如果我有一個ANTLR語法如下:似乎非確定性在ANTLR解析
grammar Test;
options {
language = Java;
}
rule : (foo | bar);
foo : FOO ',' FOO;
bar : BAR;
FOO: ('0'..'9')+;
BAR: ('a'..'z' | 'A'..'Z' | '0'..'9' | ' ')+;
WHITESPACE: (' ' | '\t')+ { $channel=HIDDEN; };
我使用測試字符串:
12abc3
這(我相信)是BAR
令牌,其滿足bar
規則並且被如此解析。布拉沃。
但是,如果我有這樣的字符串:
12
我收到line 1:2 mismatched input '' expecting ','
這似乎相當不確定性,雖然我敢肯定它不是。我知道我已經有兩個令牌:FOO
和BAR
接受數字。但是,如果解析器要成功或失敗,它應該一致成功或失敗。換句話說,在第一種情況下,第一個字符是1,顯然是作爲BAR
令牌的成員進行評估,因此解析器將成功通過一條路徑。在第二種情況下,同一個第一個字符被評估爲FOO
令牌,因此該路徑註定會失敗,儘管該字符串可能是成功的bar
解析。爲什麼不一致?或者我錯過了更關於ANTLR和/或解析的基礎知識?