2

项目中的以下示例ceylon/ceylon.ast显示了如何以编程方式构建一些 AST 并让 Ceylon 类型检查器 ( com.redhat.ceylon.compiler.typechecker.TypeChecker) 对其进行类型检查:

https://github.com/ceylon/ceylon.ast/blob/master/source/test/ceylon/ast/samples/turingMachine/powerOfTwo.ceylon

那么随后推荐使用类型化语法树调用以编译类型化语法树的方法 - 考虑到编译单元通常作为文件而不是类型化语法树(来自ceylon.ast项目)提供给类型检查器?

这个问题与这个问题有关:The Ceylon Typechecker: How to get the typed syntax tree?.

4

1 回答 1

0

生成 AST,然后在脱离实际项目的上下文中编译它似乎不是一个可行的选择。编译器需要比 AST 单独提供的更多信息,并且为编译器提供默认或虚假信息(例如文件名)仍然是一项复杂的任务。

另一方面,在真实项目的上下文中使用真实编译单元的 AST 作为一种宏系统是没有意义的,因为锡兰程序可能有副作用,转换必须考虑到这一点。此外,转换规则应该是终止和融合的,并且应该以使维护它们的形式尽可能容易,而不是程序转换器。Ceylon 的 switch 表达式不是它的正确工具。最坏的情况是一个程序性的 Ast 转换器,它可以转换程序性的 groovy 的 AST 转换器。

一个例外是在锡兰转换声明性树状结构。这正是我在问题中所想的:读入数据(不一定是锡兰语法)并使它们可用于评估或选择性编译。

于 2016-07-30T08:16:46.017 回答