繁体   English   中英

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

[英]ANTLR G4 grammar giving error in input validation

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

输入:

(
  [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           :  [\t\r\n ]+ -> channel(HIDDEN);

虽然这个语法给我以下错误:-

第 1:0 行无关输入 '(' 期待 KEY (entity ( [LANGUAGE] (list_op IN) (list ( "Arabic", "Dutch" )))

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM