gpt4 book ai didi

java - ceylon 类型检查器 : How to obtain the typed syntax tree?

转载 作者:搜寻专家 更新时间:2023-11-01 02:22:42 24 4
gpt4 key购买 nike

我正在尝试以编程方式使用/嵌入 Ceylon Typechecker 来分析 Ceylon 源代码。在这个用例中,我想访问编译器通常会使用的所有信息。但我不会编译,也不会添加对编译器的依赖。

在我看来,ceylon/typechecker/src/main/Main.java 中的 main.Main 入口点不是这个用例的合适入口点(获取类型树和附加模型),因为此信息, 被访问者在三个检查通行证中收集的被丢弃,只打印错误。

所以,我的问题是:

如何解析和类型检查编译单元,然后获取1. 类型语法树,以及2.分析访问者在树中遇到的类型的关联模型对象,从树链接到。

编辑:

我这边曾经(现在)对 3 种不同的 AST 感到困惑。

在ceylon/ceylon.ast 的自述文件中说:

¨ ...ceylon.ast.core – 代表 Ceylon AST 的 Ceylon 类。纯 ceylon (后端独立)。...ceylon.ast.redhat – 将 ceylon.ast.core AST 从 + 转换为 RedHat 编译器(ceylon-spec AST,还包含从代码字符串编译 ceylon.ast.core AST 的函数(使用 RedHat 编译器)... ¨。

所以有 3 个 AST:1. antlr 生成的 2. ceylon.ast.core 和 3. ceylon.ast.redhat。为什么?

最佳答案

简而言之,您需要:

  • 配置TypeCheckerBuilder使用您要进行类型检查的源文件,
  • 获得 TypeChecker来自 builder ( builder.typechecker ),
  • 调用类型检查器(typeChecker.process()),
  • 处理来自 typeChecker.phasedUnits 的可用结果.具体来说,typeChecker.getPhasedUnits().getPhasedUnits()会给你一个List<PhasedUnit> ,并且对于每个 PhasedUnit ,您可以调用getCompilationUnit()获得它的Tree.CompilationUnit ,这是 AST 的根。 AST 节点还包括模型对象的 getter。

有关详细示例,您可以查看 Dart 后端的代码,从 the call to process() 向前和向后工作。在compileDart()功能。

参见 testCompile例如调用 compileDart() 的代码.

关于java - ceylon 类型检查器 : How to obtain the typed syntax tree?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35274781/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com