TC-2 Code to Write¶
What is to be done:
- Build the AST
Complete actions to instantiate AST nodes with the driver’s methods accessible using
- 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
_nametyand implement the corresponding grammar rules (see Language Extensions in Tiger Compiler Reference Manual). The semantic actions of these productions shall use the
metavarfunction template to fetch the right AST subtree from the
parse::Tweastobject attached to the parsing context (
- 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
%printerto display non-terminals.
- Use %destructor
%destructorto reclaim the memory bound to semantic values thrown away during error recovery.
Change your skeleton to
glr.cc, use the
%glr-parserdirective. Thanks to GLR, conflicts (S/R and/or R/R) can be accepted. Use
%expect-rrto 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
_castoperators (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::TypeChunk; they are implemented thanks to
ast::Chunk). Note that an
ast::VarChunknode appearing in a declaration list shall contain exactly one
ast::VarDecobject (see TC-2 Chunks); however, an
ast::VarChunkused to implement a function’s formal arguments may of course contain several ast::VarDec (one per formal).
Implement all methods to create AST nodes on the driver with
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.
GenDefaultVisitorclass template. It is the basis for following visitors in the Tiger compiler.
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
PrettyPrinterclass must be written entirely. It must use the
misc::indentfeatures to support indentation.