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