Next: TC-4 Options, Previous: TC-4 Given Code, Up: TC-4 [Contents][Index]
What is to be done.
ast::Typable
ast::TypeConstructor
Because many AST nodes will be annotated with their type, the feature is factored by these two classes. See Typable, and TypeConstructor, for details.
ast::Exp
, ast::Dec
, ast::Ty
These are typable.
ast::FunctionDec
, ast::TypeDec
, ast::Ty
These build types.
Implement the Singletons type::String
, type::Int
, and
type::Void
. Using templates would be particularly appreciated to
factor the code between the three singleton classes, see TC-4 Options.
The remaining classes are incomplete.
Pay extra attention to type::operator==(const Type& a, const
Type& b)
and type::Type::compatible_with
.
type::TypeChecker
object::TypeChecker
Of course this is the most tricky part. We hope there are enough comments in there so that you understand what is to be done. Please, post your questions and help us improve it.
It is also the type::TypeChecker
’s job to set the record_type
in
the type::Nil
class. record_type
is holding some information
about the type::Record
type associated to the type::Nil
type.
We choose to handle the record_type
only when no error occured in the
type-checking process.
type::GenVisitor
type::GenDefaultVisitor
type::Type
s are visitable. You must implement the default visitor class
template, which walks through the tree of types doing nothing. It’s used as a base
class for the type visitors.
type::PrettyPrinter
In order to output nice error messages, the types need to be printed. You must
implement a visitor that prints the types, similar to ast::PrettyPrinter
.
The implementation of TC-E, suggested at TC-3, becomes a mandatory assignment at TC-4.
Next: TC-4 Options, Previous: TC-4 Given Code, Up: TC-4 [Contents][Index]