小编dks*_*sfo的帖子

为什么这个 ANTLR4 语法有歧义?

我正在努力理解 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)

如果有人能解释为什么这种语法有歧义以及如何消除歧义,将不胜感激。我也有可能不明白为什么歧义意味着:)。

如果我删除该 …

parsing antlr ambiguity antlr4

2
推荐指数
1
解决办法
228
查看次数

标签 统计

ambiguity ×1

antlr ×1

antlr4 ×1

parsing ×1