[英]How to emit a token in ANTLR4?
这是我的grammar.g4
:
FOO: 'x';
BAR: 'y'
{ /* here! */ };
我希望在输入包含y
时发出令牌BAR
和FOO
。 我应该在here!
写什么here!
部分? 请不要建议重写语法,这只是一个测试样本,我的真实案例要复杂得多。
这是一个快速演示:
grammar T;
@lexer::members {
private java.util.LinkedList<Token> tokens = new java.util.LinkedList<>();
@Override
public Token nextToken() {
return tokens.isEmpty() ? super.nextToken() : tokens.poll();
}
}
parse
: foo bar foo EOF
;
foo : FOO;
bar : BAR;
FOO : 'x';
BAR : 'y' {this.tokens.offer(new CommonToken(TLexer.FOO, "x"));};
SPACES : [ \t\r\n] -> skip;
测试:
TLexer lexer = new TLexer(CharStreams.fromString("x y"));
TParser parser = new TParser(new CommonTokenStream(lexer));
System.out.println(parser.parse().toStringTree(parser));
这将打印:
(parse (foo x) (bar y) (foo x) <EOF>)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.