寻找图#树变换器使用示例

时间:2018-01-05 20:01:01

标签: rascal graph-traversal maude-system spoofax

我正在编写我的编程语言Ya的新编译器。由于 AST抽象语法树转换和输出语言代码生成是一个大问题,所以我希望使用现有的树#graph变换器输出生成器=漂亮的打印机。 然而,由于未能找到使用示例,现在无法找到该工具。 我读过的有前途的工具清单:

  • Spoofax + Stratego/XT:现在还没找到源代码;或者可能被发现但是它在Java中不允许评估Stratego lang的力量。
  • Rascal MPL。它只有JVM执行=>作为最初的C++关注者,如果要使用它,我就会遇到麻烦。
  • OBJ OBJ3 Maude。一无所知。

并且还发现:

  • Coctail http://cocolab.com使用隐藏的源代码需要花费3欧元,因此无法将其源代码视为使用的最佳示例=>无法评估它的力量。 €3K也接近为我禁用此功能。

问题:

  • AST _like数据源代码文本还有树#graph transformation 工具#langs# outputers 吗?
  • 寻找图#树变换器好+大+复杂用法示例。期望编译器源代码是最好的情况。
  • 欢迎 Spoofax Stratego / XT Rascal Obj 的所有想法。

1 个答案:

答案 0 :(得分:1)

您的问题非常广泛,我将尝试从Rascal的角度回答这个问题。

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

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

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

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

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

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