TC-2 Code to Write

What is to be done:

src/parse/parsetiger.yy
Build the AST

Complete actions to instantiate AST nodes with the driver’s methods accessible using td.tp_.

Support object-related syntax

Supporting object constructs, an improvement suggested for TC-1 (see TC-1 Improvements), is highly recommended.

Support metavariable constructs

Augment your scanner and your parser to support the (reserved) keywords _chunks, _exp, _lvalue and _namety and implement the corresponding grammar rules (see Language Extensions in Tiger Compiler Reference Manual). The semantic actions of these productions shall use the metavar function template to fetch the right AST subtree from the parse::Tweast object attached to the parsing context (parse::TigerParser instance).

Implement error recovery.

There should be at least three uses of the token error. Read the Bison documentation about it.

Use %printer

Extend the use of %printer to display non-terminals.

Use %destructor

Use %destructor to reclaim the memory bound to semantic values thrown away during error recovery.

GLR

Change your skeleton to glr.cc, use the %glr-parser directive. Thanks to GLR, conflicts (S/R and/or R/R) can be accepted. Use %expect and %expect-rr to specify their number. For information, we have no R/R conflicts, and two S/R: one related to the “big lvalue” issue, and the other to the implementation of the two _cast operators (see Additional Syntactic Specifications in Tiger Compiler Reference Manual).

Chunks

In order to implement easily the type checking of declarations and to simplify following modules, adjust your grammar to parse declarations by chunks. The implementations of these chunks are in ast::FunctionChunk, ast::MethodChunk, ast::VarChunk, and ast::TypeChunk; they are implemented thanks to ast::Chunk). Note that an ast::VarChunk node appearing in a declaration list shall contain exactly one ast::VarDec object (see TC-2 Chunks); however, an ast::VarChunk used to implement a function’s formal arguments may of course contain several ast::VarDec (one per formal).

src/parse/tiger-driver.hxx

Implement all methods to create AST nodes on the driver with make_ methods.

src/ast

Complete the abstract syntax tree module: no ‘FIXME:’ should be left. Several files are missing in full. See src/ast/README for additional information on the missing classes.

src/ast/default-visitor.hxx

Complete the GenDefaultVisitor class template. It is the basis for following visitors in the Tiger compiler.

src/ast/object-visitor.hxx

Likewise, complete GenObjectVisitor. This class template is used to instantiate visitors factoring common code (default traversals of object-related nodes) and serves as a base class of ast::PrettyPrinter (and later bind::Binder).

src/ast/pretty-printer.*

The PrettyPrinter class must be written entirely. It must use the misc::indent features to support indentation.