Implementation code for: https://thunderseethe.dev/series/making-a-language/.
This project is divided up into a crate for each "stage" of the compiler. Each crate has at least one associated article in the making a language series (some crates have multiple articles associated with them). The stages in the compiler:
- types - Type inference and checking
- lowering - Lowering into our intermediate representation (IR)
- simplify - Simplify our IR to improve its performance.
- base - Simplifying our base IR.
- monomorph - Monomorphization removes polymorphism from our IR.
- base - Monomorphizing our base IR.
- closure_convert - Closure conversion removes functions from our IR.
- base - Closure convert our base IR.
- emit - Code emission targeting WebAssembly
- base - Emit Wasm for our closure-converted base IR.
- parser - Parsing syntax
- base - Parser for the base language
- desugar - Desugaring our CST into an AST
- base - Desugaring for the base language
- name_resolution - Name resolution
- base - Name resolution for the base language
- lsp - Language Server Protocol
- base - Implement a language server for the base language