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

Antlr4 未调用的规则会导致无效的错误消息,antlr4,Antlr4,用下列语法 grammar Gram; exprEof : expr EOF ; expr : Uident | expr '(' Uident ')' ; Uident : [A-Z][a-z]* ; WS : [ \n\t]+ -> skip ; 如果我试图从exprEof解析输入Foo(ab),我会得到预期的错误 line 1:6 extraneous input 'B' expecting ')'

用下列语法

grammar Gram;

exprEof
    : expr EOF
    ;

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

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

WS
    : [ \n\t]+ -> skip
    ;
如果我试图从
exprEof
解析输入
Foo(ab)
,我会得到预期的错误

line 1:6 extraneous input 'B' expecting ')'
但如果我再加上一条规则

expr2
    : expr '(' Uident ')'
    ;
那么错误是

line 1:3 mismatched input '(' expecting <EOF>
第1:3行输入不匹配“(”应为
这是令人惊讶的,因为
expr2
实际上不是从
exprEof
调用的。在我的完整语法中,它会导致非常无用的错误消息,其中表达式中深层的语法错误被报告为
输入不匹配”(期望在表达式开头附近出现

我使用的是ANTLR 4.5.3。

您可能需要为此提交一份文件。您可能需要为此提交一份文件