Week 7
Exercises on type checking
 Give the type rules for:
for statements; and
 array expressions.
Motivation: this questions tests that you are able to formalize
type rules. This will allow you to write type checker implementations
in a more straightforward fashion.
 Construct the type proof for the following statement sequence:
Cons x,y; int z; x = new Cons(z+1,y);
Motivation: this question tests that you can read existing type
rules and apply them.
 Consider a scenario, where we extend JOOS with a type
float that also has a + operator.
Furthermore, we want int values to be implicitly coerced
into float values as needed. Explain the implications
for the type checker.
Motivation: it is useful to be able to extend grammars with new
types.
 (Optional.) A radical extension of the JOOS type system allows a
variable to be typed as:
A,B,C x;
which means that x may contain objects of either of the
classes A , B , or C . Types are
thus finite sets of classes, rather than just single classes. With
the appropriate type rules, this will allow more programs to be
accepted as statically type correct. Show examples of such type rules
for the JOOS syntax. Show that these new rules make the type system
strictly more powerful than the standard type system. Do you like
this new language? Why or why not?
Motivation: this question should help you to think about some
of the advantages and disadvantages of introducing extra complexity
into a language via the type system.
 (Optional.) Study the code for type checking JOOS programs.
Report on anything that is unclear.
Motivation: as before, the JOOS compilers are an excellent
reference for your own WIG compiler.
