erg/doc/zh_TW/compiler/overview.md
Cai Bingjun 557f03ffc9 WIP
2022-10-15 12:18:04 +08: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