我正在开发一个非常复杂的DSL,我希望将其编译成几种高级语言。整个过程都是一次学习经历。编译器是用Java编写的。

我想知道是否有人知道代码生成器部分设计的最佳实践。我目前将所有内容解析为抽象语法树。

我当时正在考虑使用模板系统,但是我还没有研究这个方向,因为我想首先从堆栈溢出中听到一些智慧。

谢谢!

最佳答案

当我在编程语言类(class)中进行此操作时,最终基于visitor pattern使用了发射器。它工作得很好-只要您的AST与您要打印的内容相当匹配,就可以轻松地将其重新定位到新的输出语言。

10-08 04:55