erg/doc/EN/compiler/overview.md

1.4 KiB

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.