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';或:‘或’;