Project 3: The MiniJava Typechecker

Due: Monday, October 31, 12:30 pm, by email.

In this assignment you will extend the initial MiniJava typechecker with the extensions described in the course project description handout.


You should complete the front-end processing for the extended MiniJava language, checking any legality constraints not handled earlier in the scanning or parsing phases.  These include the following additions to the hierarchies in the Typechecker package:

You should implement typechecking for the new and/or modified AST node classes, including the following:

In all cases, as long as the MiniJava restrictions are satisfied, a MiniJava expression should have the same result type as the equivalent Java expression.

You only need to get the compiler front-end to work. You do not need to implement any back-end evaluating, lowering, or target code generation.


Do the following:

  1. Add and/or modify classes in the AST and Typechecker subdirectories to typecheck the extended language.
  2. Develop test cases that demonstrate that your extended typechecker works, both in cases that should now be legal and in cases that should be syntactically legal but semantically illegal. (Since the typechecker quits at the first error, you'll likely need several illegal test case files to test the different illegal cases.) You do not need to check for lexical or syntactic errors, just semantic errors. The SamplePrograms directory contains files that should typecheck after you make your changes; some of the files should typecheck successfully with the initial version of the MiniJava compiler.

You can use the -typecheck -printSymbolTables options to the MiniJava compiler to just run the typechecking phase and print out the top-level symbol tables that it builds.  See the test_typechecker target in the Makefile for an example, and feel free to make your own target(s) to make running the tests you like easier and more mechanical.


Turn in the following:

  1. Your new and/or modified AST/*.java and Typechecker/*.java files. Clearly identify any modifications to existing files using comments.
  2. Your test cases, with names of the form name.legal.java for test cases that should typecheck successfully and name.illegal.java for test cases that should trigger typechecking errors.
  3. A transcript of running your typechecker and printing out the resulting symbol tables on each of your test cases.

Create a single tar or zip file containing these files, and email this file as an attachment to marius at cs.washington.edu by the due date.


chambers@cs.washington.edu