我正在努力理解 ANTLR4 算法以及它如何处理左递归。希望有人可以教育我一点。
采用左下递归语法:
grammar Dummy;
TOK1 : 'foo';
TOKE_OPT : 'bar';
TOK2 : 'baz';
TOKDERP : 'derp';
SPACES
: [ \u000B\t\r\n] -> channel(HIDDEN)
;
rr
: rr TOK1 rr TOKE_OPT?
| '(' TOK2 ')'
| TOKDERP
;
Run Code Online (Sandbox Code Playgroud)
以及以下输入字符串:
derp foo derp foo derp
Run Code Online (Sandbox Code Playgroud)
当运行TestRig -diagnosticsANTLR 时,得出的语法是模棱两可的,我不明白为什么:
line 1:5 reportAttemptingFullContext d=2 (rr), input='foo'
line 1:9 reportContextSensitivity d=2 (rr), input='foo derp'
line 1:14 reportAttemptingFullContext d=2 (rr), input='foo'
line 2:0 reportAmbiguity d=2 (rr): ambigAlts={1, 2}, input='foo derp
'
Run Code Online (Sandbox Code Playgroud)
如果有人能解释为什么这种语法有歧义以及如何消除歧义,将不胜感激。我也有可能不明白为什么歧义意味着:)。
如果我删除该 …