Project 3 is to read chapter five of the text and build a static-semantics checker for Appel's Tiger language.
Your code should perform the static semantic checks decribed in Chapter 5:
Your semant module should export a function with this signature:
transProg : Absyn.exp -> unit
that checks an AST and outputs error messages if anything is wrong. (Why is
our type-checker called transProg rather than something like
typeCheck?
Because we'll be extending it in project 4 to type-check and translate
the AST to our intermediate representation.)
You will find a structure Types defining a datatype to represent Tiger types
in $TIGER/chap5/types.sml.
You should submit:
semant.sml file containing your code
sources.cm file
Words to the wise:
Obviously, we can map any Absyn.ty chunk of Tiger type syntax to a Types.ty value. But don't confuse the two different datatypes. Anytime you must handle a description of a Tiger type, be clear in your mind: are you handling a semantic value or a chunk of syntax?
- Types.ty
- These are semantic values -- they represent the various types found in Tiger. This is carefully designed to assist the type-checking process, e.g. handling circularities.
- Absyn.ty
- These are syntactic values -- they represent the notation in Tiger for describing types.