ANTLR – NoViableAltException

我正在尝试通过编写一个语法来学习ANTLR(我正在使用带有ANTLR插件的eclipse),直到我遇到错误它才会好起来:

NoViableAltException: line 0:-1 no viable alternative at input '' 

当我尝试测试我的args解析器规则时;

 typedident : (INT|CHAR) IDENT; args : (typedident ( COMMA typedident)*)?; 

一个字母是一个字母后跟任何字符,这是有效的,我已经测试过了。 typedident也适用于测试。

我正在使用int a12q2efwe, char a12eqdsf的输入int a12q2efwe, char a12eqdsf (完全随机)并且树在解释器中看起来很好,唯一的问题是args有四个分支而不是3,typedident,逗号,typedident然后错误在最后一。

任何帮助将不胜感激。

谢谢。

我假设你正在使用内置的解释器。 不,它是马车。 要么自己创建一个自定义测试类,要么使用ANTLRWorks的调试器(我相信Eclipse插件使用与ANTLRWorks相同的调试器)。 永远不要使用翻译。

在ANTLRWorks中,正在解析输入"int a12q2efwe, char eq45dsf" (使用调试器),如下所示:

在此处输入图像描述

正如你可以看到自己使用这个小语法:

 grammar T; args : (typedident (COMMA typedident)*)? EOF; typedident : (INT | CHAR) IDENT; COMMA : ','; INT : 'int'; CHAR : 'char'; IDENT : ('a'..'z' | 'A'..'Z') ('a'..'z' | 'A'..'Z' | '0'..'9')*; SPACE : ' ' {skip();}; 

也许这个答案会帮助你:

使用JAVA的ANTLR NoViableAltException

根据它,你的语法中缺少一个EOF标记。 你确实向我们展示了完整的语法,不是吗?