如果我的术语不正确,请原谅我。
假设我有一点简化的语法:
// 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'
等。但我的问题是当我创建 Lexer 时,即
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 中执行此操作。谢谢