Mik*_*e B 6 parsing antlr token lexer antlr4
我使用Antlr4和java7语法(源)来修改输入Java源文件.更具体地说,我使用TokenStreamRewriter类来修改一些令牌.以下代码是一个示例,显示如何修改令牌:
public class TestListener extends JavaBaseListener {
private TokenStreamRewriter rewriter;
rewriter = new TokenStreamRewriter(tokenStream);
rewriter.replace(ctx.getStart(), ctx.getStop(), "someText");
}
Run Code Online (Sandbox Code Playgroud)
当我打印更改的源代码时,将删除空格和制表符,新的源文件的格式如下所示:
importjava.util.ArrayList; publicclassMain {publicstaticvoidmain(字串[] args {MyTimertimer = newMyTimer();}}
我正在使用extractor.getText()将其打印回来.
这是使用语法的问题还是我应该使用TokenStreamRewriter类中的其他方法?
Ter*_*arr 17
问题是词法分析器没有向解析器发送空格,这意味着重写流也无法访问令牌.这是因为skip lexer命令:
WS : [ \t\r\n\u000C]+ -> skip
;
您必须更改所有-> channel(HIDDEN)将它们发送到不同通道上的解析器的那些,使它们在令牌流中可用,但对解析器不可见.
| 归档时间: |
|
| 查看次数: |
1455 次 |
| 最近记录: |