Sam*_*urn 20 java dsl code-generation abstract-syntax-tree
我正在开发一个非常复杂的DSL,我想将其编译成几种高级语言.整个过程一直是学习的经历.编译器是用java编写的.
我想知道是否有人知道代码生成器部分的设计的最佳实践.我目前已将所有内容解析为抽象语法树.
我正在考虑使用模板系统,但我还没有研究过这个方向,因为我希望首先从堆栈溢出中听到一些智慧.
谢谢!
你真正想要的是一个程序转换系统,它将一种语言(你的DSL)的语法结构映射到其他语言中的语法模式.这样的工具可以在代码生成项目期间执行任意转换(树重写一般化的字符串重写,这是Post系统,具有完全图灵功能),这意味着您生成的内容和生成过程的复杂程度仅由您的野心决定,而不是"代码生成器框架"属性.
Sophtisticated程序转换系统结合了各种类型的范围,流量分析和/或自定义分析器来实现转换.这并没有增加任何理论能力,但它增加了许多实际功能:大多数真实语言(甚至DSL)都有名称空间,控制和数据流,需要类型推断等.
我们的DMS软件再造工具包就是这种类型的转换系统.它已被用于分析/转换传统语言和DSL,简单和复杂的语言,以及小型,大型甚至是巨大的软件系统.
与OP关于"将AST转换为其他语言"的评论相关,这是由DMS通过编写将DSL的表面语法(在幕后实现他的DSL的AST)映射到目标语言的表面语法(使用目标实现)的转换来完成的.语言AST).然后由DMS自动绘制得到的目标语言AST,以提供目标语言的实际源代码,其对应于目标AST.
| 归档时间: |
|
| 查看次数: |
5715 次 |
| 最近记录: |