如何将从ceylon.ast获得的编译单元提供给Ceylon编译器?

时间:2016-07-21 18:06:50

标签: ceylon

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项目)对于typechecker?

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

1 个答案:

答案 0 :(得分:0)

生成AST然后将其与实际项目的上下文分开编译似乎不是一个可行的选择。编译器需要比单独提供的AST更多的信息,并且向编译器提供默认或伪造信息(例如文件名)仍然是一项复杂的任务。

另一方面,在真实项目的上下文中使用实际编译单元的AST作为一种宏系统是没有意义的,因为锡兰程序可能有副作用,转换必须考虑到这一点。此外,转换规则应该是终止和汇合的,并且应该以使程序变换器相对于尽可能简单的方式表达。锡兰的开关表达不适合它。最糟糕的情况是程序性的Ast变换器,它会改变程序性的变换器的AST变换器。

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