Lab – Semantic Analysis
Familiarisation with Semant package
Environments
Scope Checking
Type Checking
Note – these slides are available on the web

Building the Contextual Analyser
New directories/files: copy into your existing compiler
cp –r $Tiger/Tiger/chap5/Semant .
cp –r $Tiger/Tiger/chap5/Types .
cp –r $Tiger/Tiger/chap5/Translate .
cp –r $Tiger/Tiger/chap5/Absyn/* Absyn
cp –r $Tiger/Tiger/chap5/tests .
Compile ordering
all in Types all in Translate
Semant/Entry.java   Semant/FunEntry.java
Absyn/FunctionDec.java   Absyn/TypeDec.java
Semant/VarEntry.java Absyn/VarDec.java
Semant/Print.java Absyn/Exp.java
all in Semant all in Absyn

Environments
Run compiler with: java Semant.Main <program>
Examine Semant/Env.java
Notice the 2 tables for the 2 environments
Examine, then compile tests/1.tig
Find the code that is reporting the error – work out what it’s doing
Make the two types have different names
Does that fix it?
What does this tell you about type and variable names?

Examine Semant.java
Most of the CA operations in here
Examine analysis of a while loop
Is it ok? Write a program to check…
Compare with analysis of if statement
Examine function call
Notice that no checking is taking place at all
Write a checker for this
Hint – notice the recursive nature of the formal and actual parameter lists – use a recursive fn here?

Recursive function decls…
Write a small program to check if these work properly
If not
Examine the code for function declarations
Correct it

Finally
I’ve removed one check from the contextual analyser phase
(apart from those covered in this session)
Find it for a prize…
I suggest working as a team
Split up the language between you
Use test cases & code inspection?