2013-05-22 96 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