ANTLR4:TokenStreamRewriter 输出格式不正确(删除空格)



我正在使用Antlr4和java7语法(源代码)来修改输入的Java源文件。更具体地说,我正在使用TokenStreamRewriter类来修改一些令牌。以下代码是演示如何修改令牌的示例:

public class TestListener extends JavaBaseListener {    
   private TokenStreamRewriter rewriter;
   rewriter = new TokenStreamRewriter(tokenStream);
   rewriter.replace(ctx.getStart(), ctx.getStop(), "someText");
}

当我打印更改的源代码时,空格和制表符被删除,新源文件的格式如下所示:

importjava.util.ArrayList;publicclassMain{publicstaticvoidmain(String[]args{MyTimertimer=newMyTimer();}}

我正在使用extractor.getText()将其打印回来。

这是使用的语法问题,还是我应该使用 TokenStreamRewriter 类中的其他方法?

问题是词法分析器没有向解析器发送空格,这意味着重写流也无法访问令牌。这是因为跳过词法分析器命令:

WS : [ trnu000C]+ -> skip ;

您必须将所有这些更改为-> channel(HIDDEN)这会将它们发送到不同通道上的解析器,使它们在令牌流中可用,但对解析器不可见。

最新更新