Links

Lecture 1 (Week 1, first)

Phases of a Compiler

  1. Source code
  2. Lexical analysis
  3. Lexical Tokens
  4. Syntax analysis
  5. Type checking
  6. Code generation
  7. Machine code

Lexical Analysis

if x < 0 then z := x else z := x

becomes

KW_IF, IDENTIFIER("x"), LESS, NUMBER(0), KW_THEN, IDENTIFIER("z"), ASSIGN, MINUS, IDENTIFIER("x"), KW_ELSE, IDENTIFIER("z"), ASSIGN, IDENTIFIER("x")

Concrete Syntax Tree

Statement
  IfStatement
    KW_IF
    Condition
      Exp
        Term
          Factor
            LValue
              IDENTIFIER("x")
      RelOp
        LESS
      Exp
        Term
          Factor
            NUMBER(0)
    KW_THEN
    Statement
      Assignment
        LValue
          IDENTIFIER("z")
        ASSIGN
        Condition
          EXP
            MINUS
              Term
                Factor
                  LValue
                    IDENTIFIER("x")
    KW_ELSE
      Statement
        Assignment
          LValue
            IDENTIFIER("z")
          ASSIGN
          Condition
            Exp
              Term
                Factor
                  LValue
                    IDENTIFIER("x")

Abstract Syntax Tree

IfNode
  OperatorNode :: bool
    LESS_OP
    ArgumentsNode
      []
       IdentifierNode
          "x"
        ConstNode :: int
          0
  AssignmentNode
    IdentifierNode
      "z"
    OperatorNode
      UMINUS_OP
      IdentifierNode("x")
  AssignmentNode
    IdentifierNode
      "z"
    IdentifierNode
      "x"

where