11

当我遇到左递归问题时,我之前发布了关于我第一次尝试使用 ANTLR 的帖子。

现在我已经解决了这些问题,当我尝试使用 org.antlr.v4.Tool 生成代码时出现以下错误:

error(99): C:test.g4::: grammar 'test' has no rules

此错误的可能原因是什么?使用 ANTLRWorks 我当然可以在 Parse Tree 中看到规则,为什么它看不到它们呢?是因为找不到合适的START规则吗?

4

7 回答 7

10

我认为 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

于 2015-06-04T09:02:35.653 回答
2

我不确定您是否找到了解决方案,但我遇到了同样的问题并通过将开始符号更改为“prog”来解决它。例如,您的 .g4 文件的前两行将是:

    grammar test;
    prog : <...> ;

<...> 将是您的第一个推导。

于 2014-03-01T15:47:33.213 回答
1

我也遇到了这个错误(antlworks 2.1)。从解析器规则切换 RULE : THIS | THAT ;rule : this | that ;(即从大写到小写)解决了这个问题!

编辑 上述更正仅适用于RULE,后面的:可以是词法分析器/解析器规则的任意组合

于 2013-09-02T20:06:50.627 回答
0

最可能的原因就是错误消息所暗示的。最可能的原因是你没有将你的语法保存到文件中——或者如果你使用的是 ANTLRWorks2——ANTLRWorks 没有将你的工作保存到文件中。我不知道为什么 ANTLRWorks 不能可靠地保存。

于 2013-06-28T17:24:22.357 回答
0

将第一条规则更改为以小写字符开头对我有用。

于 2017-10-27T02:10:42.683 回答
0

我有同样的问题,这意味着你的语法没有句法规则。所以为了避免这个错误,你至少需要编写一个语法规则。

于 2021-02-06T13:07:56.477 回答
0

我也遇到了同样的错误,但无法修复。我下载了 antlrworks-1.4.jar并且运行良好。

下载 >> antlrworks-1.4.jar

于 2015-12-15T15:03:39.720 回答