0

所以我正在用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);     
}

我该如何拆分这个班级?谢谢你的时间!

4

1 回答 1

0

怀疑这是一个最佳解决方案,但GenPackage代表了一种方法。它自动生成节点和支持类。生成器可以随时重新运行以填补缺失的类。我还没有看到任何其他普遍实施的解决方案。

完全披露:我是 GenPackage 的作者。如果对基本方法感​​兴趣,我有一个出色的提交,它添加了符号表支持和一些附加功能。

于 2013-05-23T07:15:03.683 回答