ANTLR G4语法在输入验证中给出错误



我创建了一个语法来验证下面的输入并将其转换为实体。

输入:

(
[LANGUAGE] IN ("Arabic", "Dutch") 
AND 
[Content Series] IN ("The Walking Dead") 
AND 
[PUBLISHER_NAME] IN ("Yahoo Search", "Yahoo! NAR")
) 
OR 
(
[LANGUAGE] IN ("English") 
AND
[PUBLISHER_NAME] IN ("Aol News", "Microsoft-Bing!")
)

Exp.g4

grammar Exp;
options {
language = Java;
}
start
:  expr EOF
;
expr
:  NOT expr
| '(' expr ')'  expr
|  expr ENTITY expr
|  expr AND expr
|  expr OR expr
| entity
| list
| VALUE
;
entity
:  KEY comp VALUE
|  KEY list_op list
|  KEY exists_op
;
list
:  '(' (VALUE (',' VALUE)*)? ')'
;
list_op
:  BETWEEN
|  NOT_BETWEEN
|  IN
|  NOT_IN
|  CONTAINS
|  NOT_CONTAINS
;
exists_op
:  EXISTS
|  NOT_EXISTS
;
comp
:  EQ
|  NEQ
|  GT
|  LET
|  GTE
|  LETE
;
VALUE        :  '"' .*? '"';
KEY          :  '[' .*? ']';
OR           : 'OR';
AND          : 'AND';
NOT          : 'NOT';
ENTITY       : 'ENTITY';
NOT_CONTAINS : 'NOT_CONTAINS';
CONTAINS     : 'CONTAINS';
NOT_IN       : 'NOT_IN';
IN           : 'IN';
NOT_BETWEEN  : 'NOT_BETWEEN';
BETWEEN      : 'BETWEEN';
NOT_EXISTS   : 'NOT_EXISTS';
EXISTS       : 'EXISTS';
LETE         : '<=';
GTE          : '>=';
LET          : '<';
GT           : '>';
NEQ          : '!=';
EQ           : '=';
WS           :  [trn ]+ -> channel(HIDDEN);

虽然这个语法给了我下面的错误:-

line 1:0多余输入'('期待KEY(entity ([LANGUAGE] (list_op IN) (list ("Arabic", "荷兰语")

我试过修改语法,但没有帮助。

'(' expr ')' expr改为'(' expr ')'

相关内容

最新更新