• Pick an intermediate representation: some combination of graphical notation and three-address codes

  • Translate Expressions

  • Check Types

  • Use a Symbol Table: using widths and types

  • Flatten arrays:

  • Jumping Code: for boolean expressions and branching

  • Control Flow: inherit .next label

  • Backpatching: alternative to Jumping Code and Control Flow

  • Variants of Syntax Trees

    • AST
    • DAG
  • Three-Address Codes

    • Quadruples
    • Triples
  • Types and Declarations

  • Translation of Expressions

  • Type Checking

  • Control Flow

  • Backpatching

  • Switch Statements

  • Intermediate Code for Procedures