erg/doc/EN/compiler/overview.md

36 lines
No EOL
1.4 KiB
Markdown

# overview of `erg`
We will introduce the function of each layer and the particularly important functions and methods.
## 1. Lexical Analysis
* The `Lexer` does the lexical analysis. `Lexer::next` (`Lexer` is implemented as an iterator) is responsible for the main logic of lexical analysis. `Token` is output as a result of parsing.
## 2. Parsing
* `Parser` does the parsing. Of particular importance is `Parser::parse_expr`. As a result of parsing, `AST` which is a collection of `ast::Expr` is output.
## 3. Desugaring
* Desugaring is done by `Desugarer`. `AST` will be output.
## 4. Type checking/type inference
* `ASTLowerer` does the typing. Type checking is primarily done by the `Context`. Especially important are `Context::supertype_of` (determine subtype relation), `Context::unify/sub_unify` (unify/semi-unify type variables), `Context::init_builtin_*`( defines built-in APIs). `HIR` is output as a result of analysis.
## 5. Side effect check
* `SideEffectChecker` does.
## 6. Ownership check
* `OwnershipChecker` does.
## 7. Bytecode Generation
* `CodeGenerator` converts `HIR` to `CodeObj`. `CodeObj` holds bytecode and execution configuration. Of particular importance is `CodeGenerator::compile_expr`.
---
* All the above processing is put together by the `Compiler` as a facade.
* Of course Python executes the generated bytecode, which is called `DummyVM`.