erg/doc/JA/compiler/overview.md
2022-09-06 09:27:46 +09:00

2.1 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. バイトコード生成

  • CodeGeneratorHIRCodeObjに変換します。CodeObjはバイトコードと実行設定を保持します。特に重要なのはCodeGenerator::compile_exprです。

  • 以上のすべての処理はCompilerがファサードとしてまとめます。
  • 生成されたバイトコードの実行は、もちろんPythonが行いますが、これを呼ぶのがDummyVMです。