Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Antlr NoViableAltException_Java_Antlr - Fatal编程技术网

Java Antlr NoViableAltException

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

我有一个使用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,true,true时,树显示为true,true,但显示NoViableAltException

我也尝试过:

elements: value? | (value ',' value)*;
但这也不行

你知道我哪里出错了吗

编辑:


编写
elements
规则时,它只派生零或一个值,或任何数量的由逗号分隔的对,而对之间没有逗号

显然,你想要的是:

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

这完全不允许(由于
运算符),或者一个值后跟逗号和值的零次或多次(
*
)出现。

有一件事,我根本不允许任何内容。它可以是输入的单个值,也可以是一个值,即值。如何做到这一点?请参见原始描述中的上述编辑。插入也不接受任何内容。已解决,添加+而不是?。谢谢。@user1646481,
使
(值(','value)*)
成为可选的。想一想,您如何允许最小的1个值…@user1646481,不,
(值(','value)*)+
也将匹配
值(不带逗号)。看到您最近提出的ANTLR问题,我认为是时候退一步,在继续之前学习一些ANTLR了。
elements: ( value ( ',' value )* )?;