4
鉴于以下ANTLR 4.1语法,一个行故意注释掉...ANTLR不匹配输入 '<EOF>'
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
产生没有错误?
我相信你,但是我的'whyDoesThisRuleHelp'规则中没有明确的EOF。是否有一个有趣的(或教育)的原因,为什么没有明确的EOF规则也解决了这个问题?谢谢。 (我读了[你提到的问题](https://github.com/antlr/antlr4/issues/118),但不明白任何它lol) –
@JaredBeck它不会发生每次你失踪'EOF'。你的两个语法(一个和一个没有注释的行)显示了它发生的一种情况,以及它没有发生的一种情况。 –