1

我正在编写我的编程语言Ya的新转译器编译器。由于AST 抽象语法树转换和输出语言代码生成很重要,所以我希望使用现有的tree#graph 转换器 和 输出生成器 = 漂亮的打印机。但是由于找不到使用示例,现在找不到该工具。我读过的有前途的工具列表:

  • Spoofax + Stratego/XT : 目前还没有找到源代码;或者可能找到但它在 Java 中不允许评估 Stratego lang 的功能。
  • 流氓 MPL。它只有JVM执行 => 作为初始C++追随者,如果要使用它,我会遇到麻烦。
  • OBJ OBJ3 莫德。什么都不知道。

并且还发现:

  • Coctail http://cocolab.com的成本为 3000 欧元,因此由于隐藏了源代码,因此无法将其源代码视为最佳使用示例 => 无法评估其功能。3K 欧元也接近为我禁用此功能。

问题:

  • 是否还有其他树#graph 转换工具#langs #来自AST _like 数据的源代码文本输出器?
  • 寻找graph#tree transformer good+big+complex 用法示例。期望编译器源代码是最好的情况。
  • 欢迎所有关于Spoofax Stratego/XT Rascal Obj的想法。
4

1 回答 1

1

您的问题非常广泛,我将尝试从流氓的角度来回答。

首先,Rascal 为具体和抽象语法树提供了广泛的支持。前者是包含所有词汇信息的具体解析树,可以非常方便地进行遍历、分析和转换。保留所有文本信息对于重新设计应用程序很重要,但在编译器编写中也很方便。后者是可以遍历和转换的抽象数据类型(类型树)。

其次,Rascal 提供了内置的数据类型,如地图、集合和关系,可用于方便地使用关系数据进行计算。事实上,许多关系代数运算符,如连接和传递闭包都是内置的。我们一直使用它来操作类似图形的数据。

第三,Rascal 为代码生成等提供了复杂的字符串模板。

第四,Rascal 的实现是基于 JVM 和 JVM 字节码生成的,这是正确的。但是,我们将 Rascal 应用程序打包为独立的 jar,因此用 Rascal 编写的工具可以独立部署和执行。

最后,还有许多使用示例,包括几个大型编译器、源代码分析、许多 DSL(研究和商业)以及其他应用程序。

希望这可以进一步帮助您的探索!

于 2018-01-05T20:40:32.433 回答