2014-02-19 72 views
5

我正在使用Antlr4和java7語法(source)修改輸入Java源文件。更具體地說,我使用TokenStreamRewriter類來修改一些令牌。下面的代碼是一個示例,演示如何令牌修改:ANTLR4:TokenStreamRewriter輸出沒有正確的格式(刪除空格)

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

當我打印的改變源代碼,空格和tab被刪除,新源文件的格式是這樣的:

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

我使用extractor.getText()用於打印回

這是的一個問題語法使用或應該使用其他一些m來自TokenStreamRewriter類的方法?

回答

14

問題在於詞法分析器沒有向解析器發送空白區域,這意味着重寫流也無法訪問令牌。這是因爲跳躍詞法分析器命令:

WS : [ \t\r\n\u000C]+ -> skip ;

你必須改變所有那些-> channel(HIDDEN)將它們發送到解析器在不同的渠道,使他們的令牌流中獲得,而是看不見的解析器。

+0

非常感謝您的快速回復。建議的文件更改(Java.g4)運行良好。 –