我正在编写我的编程语言Ya的新编译器。由于 AST抽象语法树转换和输出语言代码生成是一个大问题,所以我希望使用现有的树#graph变换器和输出生成器=漂亮的打印机。 然而,由于未能找到使用示例,现在无法找到该工具。 我读过的有前途的工具清单:
并且还发现:
问题:
答案 0 :(得分:1)
您的问题非常广泛,我将尝试从Rascal的角度回答这个问题。
首先,Rascal为具体和抽象语法树提供了广泛的支持。前者是具体的解析树,包括所有词汇信息,可以非常方便地遍历,分析和转换。保留所有文本信息对于重新设计应用程序很重要,但在编译器编写时也很方便。后者是抽象数据类型(类型树),也可以遍历和转换。
其次,Rascal提供内置数据类型,如地图,集合和关系,可用于方便地使用关系数据进行计算。实际上,许多关系代数运算符(如连接和传递闭包)都是内置的。我们一直使用它来处理类似图形的数据。
第三,Rascal为代码生成提供了复杂的字符串模板。
第四,Rascal实现基于JVM和JVM字节代码生成是正确的。但是,我们将Rascal应用程序打包为独立的jar,因此可以独立部署和执行用Rascal编写的工具。
最后,有许多使用示例,包括几个大型编译器,源代码分析,许多DSL(包括研究和商业)以及其他应用程序。
希望这可以进一步帮助您进行探索!