2017-07-21 3 views
0

私はフィルタークエリパーサーの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+; 

答えて

0

TAGと別々USERしてください:

selector: key=TAG COLON value=TEXT 
     | key=USER COLON value=TEXT 
     ; 

セレクタルールが一致するたびに、対応するSelectorContext#keyフィールドが実際にマッチしたTAGまたはUSERトークンが含まれています

私の文法は次のようになります。

0

あなたは、セレクタの代わりに次のコードを使用することができます。

selector: 
    SELECTOR ':' value=(TEXT | SELECTOR); 
関連する問題