mirror of
https://github.com/erg-lang/erg.git
synced 2025-09-28 12:14:43 +00:00
1.7 KiB
1.7 KiB
erg
概覽
我們將介紹每一層的功能以及特別重要的功能和方法
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. 字節碼生成
CodeGenerator
將HIR
轉換為CodeObj
。CodeObj
保存字節碼和執行配置。特別重要的是CodeGenerator::compile_expr
- 以上所有的處理都是由
Compiler
作為一個門面組合起來的 - 當然 Python 會執行生成的字節碼,稱為
DummyVM
。