我之前发布过关于左递归问题的第一次使用ANTLR的尝试。
现在我已经解决了这些问题,当我尝试使用org.antlr.v4.Tool生成代码时,我收到以下错误:
error(99): C:test.g4::: grammar 'test' has no rules
出现此错误的可能原因是什么?使用ANTLRWorks我当然可以在解析树中看到规则,为什么它不能看到它们呢?是因为它无法找到合适的START规则吗?
答案 0 :(得分:4)
我认为Antlr希望第一个规则名称是小例子。我的语法也出现了同样的错误
grammar ee;
Condition : LogicalExpression ;
LogicalExpression : BooleanLiteral ;
BooleanLiteral : True ;
True : 'true' ;
通过将语法中的第一个生成规则更改为小写,它解决了问题,即下面的语法对我有效。
grammar ee;
condition : LogicalExpression ;
LogicalExpression : BooleanLiteral ;
BooleanLiteral : True ;
True : 'true' ;
注意:这是我个人的解释,我无法在在线文档中找到这种推理。
答案 1 :(得分:2)
我不确定你是否找到了解决方案,但我遇到了同样的问题并通过将我的开始符号更改为'prog'来修复它。例如,.g4文件的前两行是:
grammar test;
prog : <...> ;
其中&lt; ...&gt;将是你的第一个推导。
答案 2 :(得分:1)
我也遇到了这个错误(antlworks 2.1)。
切换
RULE : THIS | THAT ;
到rule : this | that ;
解析器规则(即从大写到小写)解决了问题!
修改强>
以上更正仅适用于RULE
,:
之后可以是词法分析器/解析器规则的任意组合
答案 3 :(得分:0)
最可能的原因就是错误消息所暗示的内容。最可能的原因是您没有将语法保存到文件中 - 或者如果您使用的是ANTLRWorks2 - ANTLRWorks尚未将您的工作保存到文件中。我不知道为什么ANTLRWorks无法可靠保存。
答案 4 :(得分:0)
我也遇到了同样的错误但无法修复它。 我下载了 antlrworks-1.4.jar ,它运行良好。
下载&gt;&gt; antlrworks-1.4.jar
答案 5 :(得分:0)
将第一条规则改为以小写字符开头,对我有用。
答案 6 :(得分:0)
我遇到了同样的问题,这意味着您的语法没有句法规则。所以为了避免这个错误,你至少需要写一个语法规则。