我正在尝试通过编写语法来学习ANTLR(我在ANTLR的插件中使用了eclipse),在我遇到错误之前一切都还好:

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

当我尝试测试args解析器规则时;
typedident  :   (INT|CHAR) IDENT;

args    :   (typedident ( COMMA typedident)*)?;

ident是一个字母,后跟任何字符,可以正常工作,我已经对其进行了测试。 typedident也适用于测试。

我正在使用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();};

07-24 09:27