ANTLR输入不匹配'&书信电报;EOF>';
给出以下ANTLR 4.1语法,其中一行故意注释掉ANTLR输入不匹配'&书信电报;EOF>';,antlr,antlr4,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 : [
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表达式产生
line 1:6 mismatched input '<EOF>' expecting WS
第1:6行不匹配的输入“”应为WS
但是如果我们取消注释块:表达式上面的代码>行grun
不会产生错误?您看到了一个罕见但已知的错误的影响:
正确修复此问题对性能的影响目前令人震惊,因此我们无意在可预见的将来应用此修补程序。解决方法是创建一个以显式的EOF
结尾的规则,并在那里开始解析。我相信你,但是我的为什么这个规则帮助中没有显式的EOF
规则。没有明确EOF的规则也能解决问题,这有什么有趣的(或教育性的)原因吗?谢谢(我读过,但一点都不懂,哈哈)@JaredBeck并不是每次你错过EOF
时都会发生这种情况。您的两个语法(一个有注释行,一个没有注释行)显示了一种情况下它确实发生了,另一种情况下它没有发生。