ANTLR4缺失规则定义

时间:2017-04-12 18:08:40

标签: antlr4 antlrworks

我一直在攻击我的ANTLR4语法,试图消除它的所有含糊之处,一次是lexer规则错误。我似乎没有做任何事情来解决问题。特别是这些lexer规则给出了同样的错误如下:

Identifier: Letter (Letter | Digit | Und)+;
Keyword   : Letter+;
Param: Number | Identifier;
Statement: Keyword Lpr Param+ Rpr;
Block: Lbc Statement+ Rbc;

您可能已经注意到,他们都有一个共同点是 Letter 。此标记和其他标记定义为:

fragment Digit: '0'..'9';
fragment Letter: ('A'..'Z');
Und: '_';
Lpr: '(';
Rpr: ')';

除非ANTLR不允许多重定义并且可能产生相同的结果,否则我无法找到这可能导致歧义的原因。

1 个答案:

答案 0 :(得分:0)

ANTLR(真的)只与明确的语法一起使用。允许某些左递归,谓词和词法模式可用于处理/避免歧义。

然而,ANTLR allow for multiple definition with potentially identical outcomes

通过始终选择第一个这样的冲突规则来实现这一点。其余的冲突规则被遮蔽,这意味着出于所有实际目的,它们不存在。几乎可以肯定,这是一个非常不理想的结果。