【问题标题】:ANTLR error(99) grammar has no rulesANTLR error(99) 语法没有规则
【发布时间】:2013-06-09 08:20:43
【问题描述】:

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

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

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

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

【问题讨论】:

  • 好吧,如果您解决了之前的问题,您可以在此处发布答案/解决方案,还是删除问题?
  • 您能否发布语法,并准确发布您尝试使用Tool 生成解析器/词法分析器类的方式?
  • 文件中可能存在语法错误,导致 ANTLR 停止解析。您可以通过(并包括)第一条规则发布您的语法吗?

标签: antlr


【解决方案1】:

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

【讨论】:

  • 我遇到了同样的问题。我认为语法规则(又称非终结规则)的名称必须全部小写。
【解决方案2】:

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

    grammar test;
    prog : <...> ;

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 您的评论 “我不知道为什么 ANTLRWorks 不能可靠地保存”,您假设是 ANTLWorks 出现故障而不是 OP。我敢打赌,情况正好相反。
      • 我说 ANTLRWorks 不能可靠地保存,因为它对我有用,这就是我知道 OP 问题的可能答案的原因。
      • 你的推理不正确。 is an 答案,如果我第一次遇到 error(99) 时看到它,那将是 the 答案。鉴于文件保存问题在 ANTLRWorks2 中很容易重现,它甚至——正如我所说——是一个可能的答案。顺便说一句,只有我提到了 ANTLRWorks2。我们甚至在谈论相同的软件吗?澄清。
      【解决方案5】:

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

      下载>>antlrworks-1.4.jar

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          【解决方案7】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-04-06
            • 2012-09-02
            相关资源
            最近更新 更多