从AST生成代码的最佳设计?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (53)

我正在研究一个非常复杂的DSL,我想编译成几种高级语言。整个过程一直是一种学习体验。编译器是用java编写的。

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

我正在考虑使用模板系统,但我还没有研究过这个方向,因为我希望先从堆栈溢出中听到一些看法。

提问于
用户回答回答于

当我在编程语言课上做这个时,我们最终使用了基于访问者模式的发射器。它工作得很好 - 只要你的AST能够很好地匹配你打印的内容,就可以轻松将其重定向到新的输出语言。

用户回答回答于

你真正想要的是一个程序转换系统,它将一种语言(你的DSL)的语法结构映射到其他语言的语法模式中。这样的工具可以在代码生成项目中执行任意转换(树重写概括字符串重写,这是Post完整的图灵系统),这意味着你生成的内容以及生成过程的复杂程度仅由您的志向决定而不是“代码生成器框架”属性。

精密的程序转换系统结合了各种类型的范围,流量分析和/或自定义分析器来实现转化。这并没有增加任何理论力量,但它增加了很多实用的力量:大多数真实语言(甚至DSL)都有名称空间,控制和数据流,需要类型推断等。

扫码关注云+社区