作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我的 grammar.g4
:
FOO: 'x';
BAR: 'y'
{ /* here! */ };
我希望在输入包含 y
时发出标记 BAR
和 FOO
。我应该在 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>)
关于java - 如何在 ANTLR4 中发出 token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64496755/
我是一名优秀的程序员,十分优秀!