私はフィルタークエリパーサーのantlr4文法を書いています(Github問題クエリに似ています)。2つのANTLR4トークンをテキストが同じであると区別する方法?
最初のタグには、我々は、タグと第二でフィルタリングしていることを意味すべきであるtag:tag
:しかし、私はのようなものを解析する問題を抱えている
tag:abc AND user:john
:理論クエリでのようになります。単なるテキストです。
parse
: expression? EOF
;
expression
: expression operator expression
| WHITESPACE* selector WHITESPACE*
;
selector:
SELECTOR ':' value=TEXT;
operator
: AND | OR | WHITESPACE
;
SELECTOR : TAG | USER;
AND : 'AND';
OR : 'OR';
TAG : 'tag' ;
USER : 'user' ;
WHITESPACE : (' ' | '\t') ;
TEXT_CHAR : ~[ :];
TEXT : TEXT_CHAR+;