ANTLR不匹配输入'<EOF>'。

5
鉴于以下ANTLR 4.1语法,其中一行被故意注释掉...

考虑以下 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个回答

6

1
我相信你,但是在我的whyDoesThisRuleHelp规则中没有明确的EOF。一个没有显式EOF的规则也能解决问题,这背后是否有有趣(或教育)的原因?谢谢。(我看了你提到的问题,但是一点也没看懂lol) - Jared Beck
@JaredBeck,每次缺少EOF时都不会发生。您的两个语法(一个有注释,一个没有)显示了一种情况会发生,另一种情况则不会发生。 - Sam Harwell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接