erg/doc/zh_CN/compiler/overview.md
2022-09-06 09:29:14 +09:00

1.7 KiB

erg 概览

badge

我们将介绍每一层的功能以及特别重要的功能和方法。

1. 词法分析

  • Lexer 进行词法分析。 Lexer::next(Lexer被实现为一个迭代器)负责词法分析的主要逻辑。 Token 作为解析的结果输出。

2. 解析

  • Parser 进行解析。特别重要的是Parser::parse_expr。作为解析的结果,输出作为ast::Expr的集合的AST

3. 脱糖

  • 脱糖由 Desugarer 完成。 AST 将被输出。

4. 类型检查/类型推断

  • ASTLowerer 进行打字。类型检查主要由 Context 完成。尤其重要的是 Context::supertype_of(确定子类型关系)、Context::unify/sub_unify(统一/半统一类型变量)、Context::init_builtin_*(定义内置 API)。 HIR 作为分析结果输出。

5. 副作用检查

  • SideEffectChecker 可以。

6. 所有权检查

  • OwnershipChecker 可以。

7. 字节码生成

  • CodeGeneratorHIR 转换为 CodeObjCodeObj 保存字节码和执行配置。特别重要的是CodeGenerator::compile_expr

  • 以上所有的处理都是由Compiler作为一个门面组合起来的。
  • 当然 Python 会执行生成的字节码,称为 DummyVM