Stuff to do, Ideas, etc. - Modify parser to create IR objects: (play with CUP actions) - Add types to non-terminals (see IR handout section 6) - Program is a TreeBlock of methods, each of which is a TreeBlock of TreeNodes (e.g. TreeIf, Instruction, etc) - Annotate TreeBlocks with SymbolTables. - Locals and parameters for methods - Field names for the Program - None for other blocks - Build SymbolTables at parse time (see IR handout section 6) - Flag some semantic errors during parsing? - Modify Compiler.java to run Scanner and Parser, and then take new output of Parser (the IR tree) and perform Semantic checking. - Design decisions: - SymbolTable implementation (Hashtable? (in java.util I think)) - getHierAnnotation?? - Types? - Extend IRType. - Annotate useful things (like Operands) with types - Include types in the symbol table, possibly as annotations, although not necessarily. - Procedures: Create a TreeProc class, as suggested on page 2 of IR handout? - Semantic Rules - All the ones they list - What else is in the language spec document that we have to watch for also? - Test cases - The given ones. - Our own, to test _every_ semantic rule - Division of Labor? - Symbol table implementation - Different CUP actions for different things (lots of stuff here) - Types - Other?