From ebceb59e763b7914db0c9e7c33ac477bf24292e2 Mon Sep 17 00:00:00 2001 From: bvisness Date: Mon, 2 May 2022 22:50:44 +0000 Subject: [PATCH] Update 'compilers.md' --- compilers.md | 70 +++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 61 insertions(+), 9 deletions(-) diff --git a/compilers.md b/compilers.md index 9a22de8..ed32ff2 100644 --- a/compilers.md +++ b/compilers.md @@ -1,17 +1,69 @@ -# Compilers And You: A Sonata in 8 Parts +# Compilers: How To Make a Programming Language -## Parsers +Other compiler-related topics out of scope: +- What are programs anyway (Forth, LISP) +- Computation: Turing machines, lambda calculus +- Compiler optimization +- GC (motivated by LISP) -## Lexers +aesthetics: +- stay motivated; stick close to a c-like, imperative, procedural model because that's what people are used to -## IR +motivation / goals / what questions are we trying to answer: +- I want to be able to make a toy procedural language. + - like C, Algol, JS, Lua, etc. + - possible user motivations: + - I want to make a game scripting language + - I want to make a DSL for my job (and I want syntax highlighting!) +- I want to do simple static analysis of my projects -## SSA +ok what do we want to cover +- classical compiler structure (lexer -> parser -> codegen) +- semantic analysis / type checking +- modern compiler structures (IR / SSA, optimization) +- interpreters vs. JITs vs. AOTs vs. "transpilers" +- executables and linkers +- regular expressions? +- regular languages / grammars / language structure / automata -## Backend Codegen +the c compilation process +- translation units +- preprocessing -> (the whole compilation process) -> object files -> linking +- c compilation model is not in favor any more, don't like compiling all these files separately +- ABIs and FFI +- should maybe be in separate article + +## The actual progression + +- Simple expression interpreter (parse and evaluate) +- Classical compiler construction (lex -> parse -> output), semantic analysis / type checking + - motivation: complex structures! recursion! etc. + - many of these resources exist and cover different aspects of the process in different ways +- Grammars and language structure +- Types of output (interpreter vs. AOT vs. JIT, etc.) + - We can probably find resources on specific ones of these +- Modern phases (IR / SSA) + - Mention WASM? +- The terrors of the real world + - Executables, linkers, and debug info + - The C ABI and FFI + - Register allocation +- C is not the only language + - LISP + - Forth + - This could be a whole topic maybe + +## Link dump + +- lua grammar: http://lua-users.org/wiki/LuaGrammar +- pascal railroad diagrams: https://www.cs.utexas.edu/users/novak/grammar.html +- tons of links: https://github.com/aalhour/awesome-compilers +- dragon book: http://ce.sharif.edu/courses/94-95/1/ce414-2/resources/root/Text%20Books/Compiler%20Design/Alfred%20V.%20Aho,%20Monica%20S.%20Lam,%20Ravi%20Sethi,%20Jeffrey%20D.%20Ullman-Compilers%20-%20Principles,%20Techniques,%20and%20Tools-Pearson_Addison%20Wesley%20(2006).pdf +- expression parsing examples: + - pratt parsing and recursive descent: https://journal.stuffwithstuff.com/2011/03/19/pratt-parsers-expression-parsing-made-easy/ + - dunno, not recursive descent: https://www.cs.rochester.edu/u/nelson/courses/csc_173/grammars/parsing.html +- gary bernhardt's compiler from scratch: https://www.destroyallsoftware.com/screencasts/catalog/a-compiler-from-scratch +- lambda calculus interpreter: https://justine.lol/lambda/ -## Optimization Passes -## Debug Symbols -## Linkers