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。您可能需要为此提交一份文件。您可能需要为此提交一份文件