This is where I learn about implementing parsers, type checkers, interpreters and compilers.
In general, each "lingua" tries to be as self-contained and small as possible, focusing on a single concept or implementation detail.
Directory | Description |
---|---|
lingua-000-tiger | Working through Modern Compiler Implementation in ML. |
lingua-001-visitor-interpreter | Tree-based interpreter that uses the Visitor pattern for tree traversal. |
lingua-002-hm-inference-sml | Damas-Hindley-Milner type inference in Standard ML. |
lingua-003-tree-interpreter | Tree-based interpreter for a language supporting closures, mutation and recursive let bindings. |
lingua-004-lisp-parser | Parser for a LISP-like language. |
lingua-005-debugger-scalajs | Incomplete debugger for an ML-like language in Scala.js. |
lingua-006-hm-inference-scala | Damas-Hindley-Milner type inference in Scala. |
lingua-007-µml-swift | A small ML written in Apple's Swift. |
lingua-008-partial-evaluation | A basic, yet quite impressive, partial evaluator. |
lingua-009-shunting-yard | The Shunting Yard algorithm for parsing infix operators. |
lingua-010-jit-hello-world-apple-silicon | JIT Hello World for Apple Silicon. |
lingua-011-bidirectional-typechecking | A small bidirectional typechecker. |
lingua-012-chatgpt-c++-compiler | C++ compiler written entirely by ChatGPT 4 |