Java Antlr NoViableAltException
我有一个使用Antlr 3的简单语法:Java Antlr NoViableAltException,java,antlr,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
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,true,true时,树显示为true,true,但显示NoViableAltException
我也尝试过:
elements: value? | (value ',' value)*;
但这也不行
你知道我哪里出错了吗
编辑:
编写
elements
规则时,它只派生零或一个值,或任何数量的由逗号分隔的对,而对之间没有逗号
显然,你想要的是:
elements: ( value ( ',' value )* )?;
这完全不允许(由于
?
运算符),或者一个值后跟逗号和值的零次或多次(*
)出现。有一件事,我根本不允许任何内容。它可以是输入的单个值,也可以是一个值,即值。如何做到这一点?请参见原始描述中的上述编辑。插入也不接受任何内容。已解决,添加+而不是?。谢谢。@user1646481,?
使(值(','value)*)
成为可选的。想一想,您如何允许最小的1个值…@user1646481,不,(值(','value)*)+
也将匹配值(不带逗号)。看到您最近提出的ANTLR问题,我认为是时候退一步,在继续之前学习一些ANTLR了。
elements: ( value ( ',' value )* )?;