education-2022/selected/compilers.md

7.9 KiB
Raw Blame History

Compilers: How To Make a Programming Language

Other compiler-related topics out of scope:

  • What are programs anyway (Forth, LISP)
  • Computation: Turing machines, lambda calculus
  • Compiler optimization
  • GC (motivated by LISP)

aesthetics:

  • stay motivated; stick close to a c-like, imperative, procedural model because that's what people are used to

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

ok what do we want to cover

  • classical compiler structure (lexer -> parser -> codegen)
Title Page
Phases of a Compiler https://www.geeksforgeeks.org/phases-of-a-compiler/
Compiler Architecture https://cs.lmu.edu/~ray/notes/compilerarchitecture/
Compiler Design https://www.tutorialspoint.com/compiler_design/compiler_design_phases_of_compiler.htm
Structure of a Compiler https://www.csd.uwo.ca/~mmorenom/CS447/Lectures/Introduction.html/node10.html
The Structure of a Compiler https://www.brainkart.com/article/The-Structure-of-a-Compiler_8121/
Wikipedia: Compiler https://en.wikipedia.org/wiki/Compiler
Compiler Phases https://www.javatpoint.com/compiler-phases
The Structure of a Compiler https://pages.cs.wisc.edu/~fischer/cs536.s08/lectures/Lecture04.4up.pdf
Phases of a Compiler https://www.guru99.com/compiler-design-phases-of-compiler.html
Writing a C Compiler (Pt. 1) https://norasandler.com/2017/11/29/Write-a-Compiler.html
V: Structure of a Compiler https://www.youtube.com/watch?v=RH02jcUiPI0
V: Phases of a Compiler https://www.youtube.com/watch?v=jE7f3sGLGVk
V: Compiler Design https://www.youtube.com/watch?v=OZSGjRSHYUk
V: Different Phases of Comp https://www.youtube.com/watch?v=TApMNhQPaCM
V: Phases of Compiler https://www.youtube.com/watch?v=r2BRNodqbgI
V: Parser and Lexer (Pt. 1) https://www.youtube.com/watch?v=eF9qWbuQLuw
  • semantic analysis / type checking
Title Page
Semantic Analysis, Explained https://monkeylearn.com/blog/semantic-analysis/
Wikipedia https://en.wikipedia.org/wiki/Compiler#Front_end
SA in Compiler Design https://www.geeksforgeeks.org/semantic-analysis-in-compiler-design/
Compiler Design - SA https://www.tutorialspoint.com/compiler_design/compiler_design_semantic_analysis.htm
What is Semantic Analysis? https://home.adelphi.edu/~siegfried/cs372/372l8.pdf
SA in Compiler Design https://iq.opengenus.org/semantic-analysis-in-compiler-design/
Implementation of SA https://pgrandinetti.github.io/compilers/page/implementation-semantic-analysis/
What is SA in a Compiler? https://pgrandinetti.github.io/compilers/page/what-is-semantic-analysis-in-compilers/
SA - An Overview https://www.sciencedirect.com/topics/computer-science/semantic-analysis
SA (Slides) https://www.computing.dcu.ie/~davids/courses/CA4003/CA4003_Semantic_Analysis_2p.pdf
V: The Semantic Analysis! https://www.youtube.com/watch?v=j172YWmBk5A
V: Intro to Semantic Analysis https://www.youtube.com/watch?v=cC8YRnDGMwI
V: Compiler Design SA https://www.youtube.com/watch?v=57U6pQRnSJA
V: Semantic Analysis: Intro https://www.youtube.com/watch?v=7pHmBEkeIdQ
Title Page
Type Checking in Compiler Design https://www.geeksforgeeks.org/type-checking-in-compiler-design/
Type Checking https://www.brainkart.com/article/Type-Checking_8086/
Type Checking (Slides) https://www.slideshare.net/dipongkersen81/type-checkingcompilier-design
What is Static Type Checking? https://www.tutorialspoint.com/what-is-static-type-checking
Type Checking in Compiler Design https://www.wikitechy.com/tutorials/compiler-design/type-checking-in-compiler-design
Type Systems https://www.csd.uwo.ca/~mmorenom/CS447/Lectures/TypeChecking.html/node1.html
V: Type Checking https://www.youtube.com/watch?v=-TQVAKby6oI
  • modern compiler structures (IR / SSA, optimization)
  • interpreters vs. JITs vs. AOTs vs. "transpilers"
  • executables and linkers
  • regular expressions?
  • regular languages / grammars / language structure / automata
  • terminology?

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

experts / consultants:

  • Bill
  • NeGate

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

Books

Webpages

From NeGate