значение метки, присвоенное блоку, который не является установленным ANTLR 4? - PullRequest
2 голосов
/ 09 мая 2020

Когда я создаю такое правило,

/* 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)

Почему?. Как я могу это исправить?.

1 Ответ

1 голос
/ 09 мая 2020

Вы можете назначать метки только набору токенов, но не правилам парсера. Другими словами, value = (STRING | ID | INTEGER | DOUBLE | date) недопустимо, потому что date является правилом синтаксического анализатора. Исправьте это, удалив метку value =:

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