未调用的规则会导致无用的错误消息

时间:2016-12-02 04:39:52

标签: antlr4

使用以下语法

grammar Gram;

exprEof
    : expr EOF
    ;

expr
    : Uident
    | expr '(' Uident ')'
    ;

Uident
    : [A-Z][a-z]*
    ;

WS
    : [ \n\t]+ -> skip
    ;

如果我尝试从Foo(A B)解析输入exprEof,我会收到预期的错误

line 1:6 extraneous input 'B' expecting ')'

但是如果我添加一个额外的规则

expr2
    : expr '(' Uident ')'
    ;

然后错误是

line 1:3 mismatched input '(' expecting <EOF>

这是令人惊讶的,因为expr2实际上并未从exprEof调用mismatched input '( expecting <EOF>。在我的完整语法中,它会导致非常无用的错误消息,其中表达式深处的语法错误在表达式的开头附近报告为WHERE

我正在使用ANTLR 4.5.3。

0 个答案:

没有答案