These are the course notes for CMSC 430. They can be a bit rough around the edges in places, but please keep in mind this is a living document. If you spot errors, confusing prose, missing parts, or generally have suggestions for improving the material, please, please, please submit an issue on Github.

    1 What is a Compiler?

    2 From OCaml to Racket

    3 a86: a Little Assembly Language

    4 Abscond: a language of numbers

    5 Blackmail: incrementing and decrementing

    6 Con: branching with conditionals

    7 Dupe: a duplicity of types

    8 Dodger: addressing a lack of character

    9 Evildoer: change the world a couple nibbles at a time

    10 Extort: when errors exist

    11 Fraud: local binding, variables, and binary operations

    12 Hustle: heaps and lists

    13 Hoax: vectors and strings

    14 Iniquity: function definitions and calls

    15 Jig: jumping to tail calls

    16 Knock: pattern matching

    17 Loot: lambda the ultimate

    18 Mug: symbols and interned string literals

    19 Mountebank: quote and compound static data

    20 Neerdowell: structures