我以前发布关于我在使用ANTLR时遇到左递归问题时的第一次尝试。ANTLR错误(99)语法没有规则
现在,我已经解决了这些问题,我收到以下错误,当我尝试使用org.antlr.v4.Tool生成代码:
error(99): C:test.g4::: grammar 'test' has no rules
什么是此错误的可能原因?使用ANTLRWorks我当然可以在Parse Tree中看到规则,所以为什么不能看到它们?是否因为找不到合适的START规则?
我以前发布关于我在使用ANTLR时遇到左递归问题时的第一次尝试。ANTLR错误(99)语法没有规则
现在,我已经解决了这些问题,我收到以下错误,当我尝试使用org.antlr.v4.Tool生成代码:
error(99): C:test.g4::: grammar 'test' has no rules
什么是此错误的可能原因?使用ANTLRWorks我当然可以在Parse Tree中看到规则,所以为什么不能看到它们?是否因为找不到合适的START规则?
最可能的原因正是错误消息的含义。最可能的原因是您没有将语法保存到文件中 - 或者如果您使用ANTLRWorks2- ANTLRWorks尚未将您的工作保存到文件中。我不知道为什么ANTLRWorks不能可靠地保存。
我刚刚得到了这个错误(antlworks 2.1)。 从分解规则(即从大写到小写)从 RULE : THIS | THAT ;
到rule : this | that ;
的切换解决了问题!
编辑 上述修正仅供RULE
持有,什么:
后可如下的词法/语法规则的任意组合
我不知道你是否已经找到了解决的办法,但我遇到了同样的问题,并通过将我的开始符号更改为'prog'来修复它。因此,例如,您.g4文件的前两行是:
grammar test;
prog : <...> ;
凡< ...>将是你的第一个推导。
我认为Antlr希望第一个规则名称是小型的。我得到了同样的错误与我的语法
grammar ee;
Condition : LogicalExpression ;
LogicalExpression : BooleanLiteral ;
BooleanLiteral : True ;
True : 'true' ;
通过改变语法的第一个生产规则下情况下,它解决了这个问题,即下面的语法为我工作。
grammar ee;
condition : LogicalExpression ;
LogicalExpression : BooleanLiteral ;
BooleanLiteral : True ;
True : 'true' ;
注意:这是我个人的解释,我无法在在线文档中找到这个推理。
我遇到了同样的问题。我认为语法规则的名称(也就是非终端规则)必须全部小写。 – smwikipedia
我也得到了同样的错误,但无法修复它。 我下载了antlrworks-1.4.jar它的工作完美。
改变第一规则,并开始以小写字符为我工作。
那么,如果你解决了你以前的问题,你可以在那里发布答案/解决方案,或者删除问题吗? –
您可以发布语法,并准确地发布您如何使用'Tool'生成分析器/词法分析器类? –
您可能在导致ANTLR停止解析的文件中出现语法错误。你能通过(并包括)第一条规则发布你的语法吗? –