Antlr NoViableAltException

时间:2012-11-23 10:33:35

标签: java antlr

我有一个使用Antlr 3的简单语法:

grammar i;

@header {
package com.data;
}

null        : 'null';
value       : null | STRING;
elements    : value? | (value ',' value)+;
STRING      : ('a'..'z'|'A'..'Z')+;
WS      : (' '|'\t'|'\f'|'\n'|'\r')+ {skip();}; // handle white space between keywords

我想要实现的是我有价值。因此,值可以是可选的,或者值可以跟随另一个值后面的逗号。例如:

值可能为true或value可能为true,true,true,true。

当我进行解释时,以下工作:

或 真实,真实

当我尝试true,true,true时,树显示为true,true但显示NoViableAltException。

我也尝试过:

elements: value? | (value ',' value)*;

但这也不起作用。

我出错的任何想法?

编辑:

insert      : 'INSERT INTO TABLE' 'VALUES' '('elements')'';';

1 个答案:

答案 0 :(得分:1)

编写elements规则,使得它只导出零个或一个值,或者用逗号分隔的任意数量的对,而对之间没有逗号。

显然你想要的是这个:

elements: ( value ( ',' value )* )?;

这样就什么都不允许(由于?运算符),或者单个值后跟零或多个(*)出现的逗号和值。