ANTLR - NoViableAltException

djc*_*476 5 java eclipse antlr

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

NoViableAltException: line 0:-1 no viable alternative at input '<EOF>'
Run Code Online (Sandbox Code Playgroud)

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

typedident  :   (INT|CHAR) IDENT;

args    :   (typedident ( COMMA typedident)*)?;
Run Code Online (Sandbox Code Playgroud)

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

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

任何帮助将不胜感激.

谢谢.

Bar*_*ers 6

我假设你正在使用内置的解释器.不,它是马车.要么自己创建一个自定义测试类,要么使用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();};
Run Code Online (Sandbox Code Playgroud)