我正在使用 Antlr4 和 java7 语法(source)用于修改输入 Java 源文件。更具体地说,我使用 TokenStreamRewriter 类来修改一些标记。以下代码是显示如何修改令牌的示例:
public class TestListener extends JavaBaseListener {
private TokenStreamRewriter rewriter;
rewriter = new TokenStreamRewriter(tokenStream);
rewriter.replace(ctx.getStart(), ctx.getStop(), "someText");
}
当我打印更改后的源代码时,空格和制表符将被删除,新源文件的格式如下:
导入 java.util.ArrayList;publicclassMain{publicstatic void main(String[]args{MyTimertimer=newMyTimer();}}
我正在使用 extractor.getText() 将其打印回来。
这是所使用语法的问题还是我应该使用 TokenStreamRewriter 类中的其他方法?
问题是词法分析器没有向解析器发送空格,这意味着重写流也无法访问令牌。这是因为跳过词法分析器命令:
WS : [ \t\r\n\u000C]+ -> skip
;
你必须将所有这些更改为-> channel(HIDDEN)
这会将它们发送到不同通道上的解析器,使它们在令牌流中可用,但对解析器不可见。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)