所以我正在用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);
}
我该如何拆分这个班级?谢谢你的时间!