Parsing 分析“之间的字符串”;字符ANTLR4

Parsing 分析“之间的字符串”;字符ANTLR4,parsing,antlr4,Parsing,Antlr4,我的任务是为自定义查询语言编写语法,用户可以在其中编写一些基本查询。 到目前为止,我的语法是: grammar EAQL; prog: cond; cond: cond logical_operator cond | elexpr comparison_operator VALUE; elexpr: ELSTEREOTYPE '.' eattribute

我的任务是为自定义查询语言编写语法,用户可以在其中编写一些基本查询。 到目前为止,我的语法是:

grammar                 EAQL;

prog:                   cond;

cond:                   cond logical_operator cond | elexpr comparison_operator  VALUE;

elexpr:                 ELSTEREOTYPE '.' eattribute;

conexpr:                CSTEREOTYPE '.' cattribute;

eattribute:             'Name' | 'Path' | 'GUID' | conexpr;

cattribute:             'Name' | 'GUID' | elexpr;

VALUE:                   QUOTATION ( ~([QUOTATION]) | ~('\n'))+ QUOTATION;

ELSTEREOTYPE:           'EG_ApplicationComponent' | 'EG_ApplicationFunction';

CSTEREOTYPE:            'EG_Flow';

SPACE:                  ' ';

QUOTATION:              '"';

EOL:                    '\n';

WS : (' ' | '\t')+ -> channel(HIDDEN);

AND:                    'AND';

OR:                     'OR';

logical_operator:       AND | OR;

EQUALS:                 '=';

GREATER_THAN:           '>';

SMALLER_THAN:           '<';

comparison_operator:    GREATER_THAN | SMALLER_THAN | EQUALS;
语法EAQL;
prog:cond;
cond:cond逻辑|u运算符cond | elexpr比较|u运算符值;
elexpr:ELSTEREOTYPE.'eattribute;
conexpr:CSTEREOTYPE.”cattribute;
eattribute:'Name'|'Path'|'GUID'| conexpr;
cattribute:“Name”|“GUID”| elexpr;
值:引号(~([QUOTE])|('\n'))+引号;
ELSTEREOTYPE:“EG_应用程序组件”|“EG_应用程序函数”;
CSTEREOTYPE:“EG_Flow”;
空间:'';
引语:“”;
下线:'\n';
WS:(''|'\t')+->通道(隐藏);
和:'和';
或:‘或’;
逻辑_运算符:和|或;
等于:'=';
大于:'>';

小于:“
~[quote]
匹配除
Q
U
O
T
A
T
I
O
N
以外的任何字符。您需要做的是
~/code>~[“

您的
规则可能如下所示:

VALUE
 : QUOTATION ~["\r\n]* QUOTATION
 ;

谢谢,它终于做了一些事情,并解析了正确的值'name1',但在该字符串'之后,EG_ApplicationFunction.Name=“name2”被忽略。我们发现解析是不正确的,因为我们的输入中有空格,但当我们将其添加到语言声明中时,它被修复了,在和中:'and';或:‘或’;