ANTLR错误(99)语法没有规则

时间:2013-06-13 03:31:52

标签: antlr

我之前发布过关于左递归问题的第一次使用ANTLR的尝试。

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

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

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

7 个答案:

答案 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)

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