ANTLR输入'<eof>'</eof>不匹配

时间:2013-10-04 03:43:12

标签: antlr antlr4

鉴于以下ANTLR 4.1语法,有一条线被故意注释掉......

grammar Foobar;

//whyDoesThisRuleHelp : expression ;
expression : operand | binaryOperation ;
binaryOperation : operand WS BINARY_OPERATOR WS expression ;
operand : LETTER ;

BINARY_OPERATOR : 'EQ' ;
LETTER : [a-z] ;
WS : [ \n]+ ;

..为什么echo -n "a EQ b" | grun Foobar expression产生

line 1:6 mismatched input '<EOF>' expecting WS

.. 但如果我们取消注释上面的block : expression ;行,则grun 不会产生错误

1 个答案:

答案 0 :(得分:6)

您正在看到一个罕见但已知的错误的影响:
No viable alternative can be incorrectly thrown for start rules without explicit EOF

正确解决这个问题的性能影响目前是错误的,所以我们无意在可预见的未来应用补丁。解决方法是创建一个以显式EOF结尾的规则,然后开始解析。