分配给块的标签值不是一组 ANTLR 4?

label value assigned to a block which is not a set ANTLR 4?

什么时候,我制定了这样的规则,

/* date type */
date: 'date' '(' value = STRING ')' ;
/* field["value"] */
key: name = ID '[' value = STRING ']';
whereExpr: key op =('>'|'<'|'>='|'<='|'=') value = (STRING | ID | INTEGER | DOUBLE | date ) ;

在我的语法中,ANTLR 显示以下错误。

error(130): WhereParser.g4:14:43: label value assigned to a block which is not a set
1 error(s)

为什么? 我该如何解决?

您只能将标签分配给一组标记,而不能分配给解析器规则。换句话说,value = (STRING | ID | INTEGER | DOUBLE | date) 是无效的,因为 date 是解析器规则。通过删除 value = 标签修复它:

whereExpr
 : key op=('>'|'<'|'>='|'<='|'=') (STRING | ID | INTEGER | DOUBLE | date)
 ;