2013-06-13 131 views
4

我以前发布关于我在使用ANTLR时遇到左递归问题时的第一次尝试。ANTLR错误(99)语法没有规则

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

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

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

+0

那么,如果你解决了你以前的问题,你可以在那里发布答案/解决方案,或者删除问题吗? –

+0

您可以发布语法,并准确地发布您如何使用'Tool'生成分析器/词法分析器类? –

+0

您可能在导致ANTLR停止解析的文件中出现语法错误。你能通过(并包括)第一条规则发布你的语法吗? –

回答

0

最可能的原因正是错误消息的含义。最可能的原因是您没有将语法保存到文件中 - 或者如果您使用ANTLRWorks2- ANTLRWorks尚未将您的工作保存到文件中。我不知道为什么ANTLRWorks不能可靠地保存。

+0

您的评论*“我不知道为什么ANTLRWorks不能可靠地保存”*,您认为它是ANTLWorks故障而不是OP。我敢打赌,这是另一回事。 –

+0

我说ANTLRWorks不能可靠地保存,因为它对我有用,这就是我如何知道OP的问题的可能答案。 – Roy

+0

你的推理是不正确的。它是一个**答案,当我第一次遇到错误(99)时,我看到它会是答案。鉴于文件保存问题在ANTLRWorks2中很容易重现,它甚至 - 正如我所说 - 可能的答案。顺便说一句,只有我提到了ANTLRWorks2。我们是否谈论过相同的软件?澄清。 – Roy

1

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

编辑 上述修正仅供RULE持有,什么:后可如下的词法/语法规则的任意组合

2

我不知道你是否已经找到了解决的办法,但我遇到了同样的问题,并通过将我的开始符号更改为'prog'来修复它。因此,例如,您.g4文件的前两行是:

grammar test; 
    prog : <...> ; 

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

1

我认为Antlr希望第一个规则名称是小型的。我得到了同样的错误与我的语法

grammar ee; 
Condition : LogicalExpression ; 
LogicalExpression : BooleanLiteral ; 
BooleanLiteral : True ; 
True : 'true' ; 

通过改变语法的第一个生产规则下情况下,它解决了这个问题,即下面的语法为我工作。

grammar ee; 
condition : LogicalExpression ; 
LogicalExpression : BooleanLiteral ; 
BooleanLiteral : True ; 
True : 'true' ; 

注意:这是我个人的解释,我无法在在线文档中找到这个推理。

+0

我遇到了同样的问题。我认为语法规则的名称(也就是非终端规则)必须全部小写。 – smwikipedia

0

我也得到了同样的错误,但无法修复它。 我下载了antlrworks-1.4.jar它的工作完美。

下载>>antlrworks-1.4.jar

0

改变第一规则,并开始以小写字符为我工作。