2013-05-22 34 views
0

所以我正在編寫一個java編譯器,將我自己的語言翻譯成CUDA語言。爲了這個任務,我在ANTLR4中編寫了一個語法,得到一個詞法分析器和解析器。簡化編譯器的類結構

現在,ANTLR給了我一個Listener的可執行方法,它們基本上都是抽象分析樹中的節點。然後,我根據此節點上的令牌,用我想要生成的代碼修飾此樹。

我的問題是,我有45個方法在這個CUDAEmitter類和830行代碼。我正在努力弄清楚如何構建和劃分這些方法。我用這3個裝飾我的節點:代碼生成的

private final ParseTreeProperty<String> cuda = new ParseTreeProperty<String>(); 
String getCode(ParseTree ctx) { return cuda.get(ctx); } 
void setCode(ParseTree ctx, String s) { cuda.put(ctx, s); } 

例如:

public void exitIdvalString(ParmaParser.IdvalStringContext ctx) { 
String str = ctx.STRING().getText(); 
setCode(ctx, str);  
} 

我怎麼去分裂這個類?謝謝你的時間!

回答

0

令人懷疑這是一個最佳解決方案,但GenPackage代表了一種方法。它自動生成節點和支持類。發電機可以隨時重新運行,以填補缺失的課程。我還沒有看到任何其他通常實施的解決方案。

完全披露:我是GenPackage的作者。如果基本方法是有趣的,我有一個傑出的承諾,增加了符號表支持和一些附加功能。

+0

我如何在Linux中生成?似乎沒有run.bat文件 – Saph