用語が間違っていたらすみません。
次のような単純化された文法があるとします。
// parser
expr : COMPARATIVE;
// lexer
WS : ( '\t' | ' ' | '\r' | '\n'| '\u000C' )+;
COMPARATOR
: 'vs'
| 'versus'
;
ITEM
: 'boy'
| 'girl'
;
COMPARATIVE :ITEM WS* COMPARATOR WS* ITEM;
したがって、これはもちろん'boy vs girl'
or'girl vs boy'
などと一致します。しかし、私の質問は、レクサーを作成するときです。
CharStream stream = new ANTLRInputStream("boy vs girl");
SearchLexer lex = new SearchLexer(stream);
CommonTokenStream tokens = new CommonTokenStream(lex);
tokens.fill();
for(Token token : tokens) {
System.out.print(token.getType() + " [" + token.getText() + "] ");
}
これは次のようなものを出力します: 9 [boy vs girl]、つまり、クエリにうまく一致しますが、この現在のトークンのサブトークンを取得するようなことができるようにしたいと考えています。
私の直感では、ツリーを使用する必要があることがわかりましたが、実際には、私の例では Antlr4 でこれを行う方法がわかりません。ありがとう