如何将从 ceylon.ast 获得的编译单元提供给 Ceylon 编译器?
How to feed ancompilation unit obtained from ceylon.ast to the Ceylon compiler?
在 ceylon/ceylon.ast
项目中找到的以下示例显示了如何以编程方式构建一些 AST 并使用 Ceylon typechecker (com.redhat.ceylon.compiler.typechecker.TypeChecker
) 对其进行类型检查:
随后使用类型化语法树调用的推荐方法是什么来编译类型化语法树 - 考虑到编译单元通常作为文件而不是类型化语法树给出(来自 ceylon.ast
项目)到类型检查器?
这个问题与这个问题相关:。
生成 AST 然后在脱离真实项目上下文的情况下编译它似乎不是一个可行的选择。编译器需要比 AST 单独提供的信息更多的信息,并且为编译器提供默认或虚假信息(例如文件名)仍然是一项复杂的任务。
另一方面,在真实项目的上下文中使用真实编译单元的 AST 作为一种宏系统是没有意义的,因为锡兰程序可能有副作用,转换必须将其纳入帐户。此外,转换规则应该是终止的和融合的,并且应该以尽可能容易维护它们的形式表达,而不是程序转换器。 Ceylon 的 switch 表达式不是适合它的工具。最坏的情况是程序 Ast 转换器转换程序 a la groovy 的 AST 转换器。
一个例外是锡兰中声明性树状结构的转换。这正是我在问题中想到的:读取数据(不一定使用锡兰语法)并使它们可用于评估或可选编译。
在 ceylon/ceylon.ast
项目中找到的以下示例显示了如何以编程方式构建一些 AST 并使用 Ceylon typechecker (com.redhat.ceylon.compiler.typechecker.TypeChecker
) 对其进行类型检查:
随后使用类型化语法树调用的推荐方法是什么来编译类型化语法树 - 考虑到编译单元通常作为文件而不是类型化语法树给出(来自 ceylon.ast
项目)到类型检查器?
这个问题与这个问题相关:
生成 AST 然后在脱离真实项目上下文的情况下编译它似乎不是一个可行的选择。编译器需要比 AST 单独提供的信息更多的信息,并且为编译器提供默认或虚假信息(例如文件名)仍然是一项复杂的任务。
另一方面,在真实项目的上下文中使用真实编译单元的 AST 作为一种宏系统是没有意义的,因为锡兰程序可能有副作用,转换必须将其纳入帐户。此外,转换规则应该是终止的和融合的,并且应该以尽可能容易维护它们的形式表达,而不是程序转换器。 Ceylon 的 switch 表达式不是适合它的工具。最坏的情况是程序 Ast 转换器转换程序 a la groovy 的 AST 转换器。
一个例外是锡兰中声明性树状结构的转换。这正是我在问题中想到的:读取数据(不一定使用锡兰语法)并使它们可用于评估或可选编译。