ANTLR输入不匹配< EOF' [英] ANTLR mismatched input '<EOF>'

查看:53
本文介绍了ANTLR输入不匹配< EOF'的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

给出以下ANTLR 4.1语法,其中一行故意注释掉了...

Given the following ANTLR 4.1 grammar, with one line intentionally commented out ...

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

.. 但是如果我们取消注释,在上面的 block:expression; 行中,那么 grun 不会产生错误?

.. but if we uncomment the block : expression ; line above then grun produces no errors?

推荐答案

您正在看到一个罕见但已知的错误的影响:
在没有明确的EOF的情况下,没有任何可行的替代方法可以错误地引发启动规则

You are seeing the effects of a rare but known bug:
No viable alternative can be incorrectly thrown for start rules without explicit EOF

正确解决此问题对性能的影响目前令人吃惊,因此我们无意在可预见的将来应用此补丁.解决方法是创建一个以显式 EOF 结尾的规则,然后在此处开始解析.

The performance implications of properly fixing this are currently staggering, so we have no intention of applying the patch for the foreseeable future. The workaround is to create a rule that ends with an explicit EOF, and start parsing there.

这篇关于ANTLR输入不匹配&lt; EOF&amp;#39;的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆