All posts by Albert Zündorf

Compiler Construction, WS0910

Homework #4 (due Nov. 27th, see last entry!) requires you to implement the following:

  • extend the parser to handle if, else, and while statements. The new grammar rules are:
    ifStat ::= 'if' condExpr '{' block '}' ('else' '{' block '}')?
    whileStat ::= 'while' condExpr '{' block '}'
    condExpr ::= expr (bop expr)?
    bop ::= '<' | '>' | '==' | ...

    A conditional expression (condExpr) is true if its value is > 0, and false otherwise.

  • parse function declarations:
    funcDecl ::= name '(' paramDeclList ')' '{' block '}'
    paramDeclList ::= name*

    Extend your symbol table to be able to store a function declaration.

  • interpret function calls:
    factor ::= number | name | name '(' expr* ')'

    Make sure to handle parameter symbols correctly when calling functions. It should be possible to access globals from a function, but you may choose to make function execution free of side effects. Please make a comment or two about how your implementation works in the code!

Please remember to write simple test cases first (if without else, functions without parameters…). Develop iteratively, adding features as you go. Do not attempt to get everything right on first attempt…

Compiler Construction, WS0910

On the next 2 Fridays (Nov. 13th & Nov. 20th) there will be no lecture. The deadline for homework #4 will be Friday, Nov. 27th. There was no exercise today, instead the exercise covering homework #4 will be held in place of the lecture on Friday, starting 10:15!

To summarize, the next dates are:

  • Friday, Nov. 13th, 10:15 – Exercise for homework #4
  • Friday, Nov. 27th, 10:15 – Deadline for homework #4 and next lecture