如果我有一个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和/或解析的基础知识?