Next: , Previous: , Up: TC-2   [Contents][Index]

4.4.4 TC-2 Code to Write

What is to be done:

Build the AST

Complete actions to instantiate AST nodes.

Support object-related syntax

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

Support metavariable constructs

Augment your scanner and your parser to support the (reserved) keywords ‘_decs’, ‘_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.


Change your skeleton to, 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).


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::FunctionDecs, ast::MethodDecs, ast::VarDecs, and ast::TypeDecs; they are implemented thanks to ast::AnyDecs). Note that an ast::VarDecs node appearing in a declaration list shall contain exactly one ast::VarDec object (see TC-2 Chunks); however, an ast::VarDecs used to implement a function’s formal arguments may of course contain several ast::VarDec (one per formal).


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.


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


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).


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

Next: , Previous: , Up: TC-2   [Contents][Index]