我有一个使用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')'';';
答案 0 :(得分:1)
编写elements
规则,使得它只导出零个或一个值,或者用逗号分隔的任意数量的对,而对之间没有逗号。
显然你想要的是这个:
elements: ( value ( ',' value )* )?;
这样就什么都不允许(由于?
运算符),或者单个值后跟零或多个(*
)出现的逗号和值。