所以我在java中编写一个编译器,将我自己的语言翻译成CUDA语言。对于这个任务,我在ANTLR4中编写了一个语法,获得了词法分析器和解析器。
现在,ANTLR为我提供了一个可实现方法的监听器,它基本上是抽象解析树中的节点。然后,我根据此节点上的标记,使用我想要生成的代码装饰此树。
我的问题是我在这个CUDAEmitter类中有45个方法,以及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 :(得分:0)
怀疑这是一个最佳解决方案,但GenPackage代表了一种方法。它自动生成节点和支持类。可以随时重新运行生成器以填充缺失的类。我还没有看到任何其他通常实施的解决方案。
完全披露:我是GenPackage的作者。如果感兴趣的是基本方法,我有一个未完成的提交,它增加了符号表支持和一些附加功能。