Worth 20% of your project grade
For this project, you are asked to implement the type checking program for PCAT. You will work in the same directory pcat you used in project #3. This time, you may use Eclipse to develop your program (see project.html); this is not required.
Note that, if your previous projects (Project #1, #2, or #3) have errors, you can use the solution for these projects. For example, on Windows, you can use the following build.bat script:
del bin\edu\uta\pcat\* set CLASSPATH=bin;System.jar;Solution.jar exec scalac -d bin src\edu\uta\pcat\*.scalaSo this script, will not compile your pcat.lex and pcat.cup files and will use the solution jar instead. Please do this only if you have errors in your pcat.lex or pcat.cup files.
You will use the SymbolTable class. The bindings in the Symbol Table are instances of the class EnvDecl, which has the following case classes:
For this project, you need to modify the file TypeCheck.scala only. The typecheck methods typecheck e, which can be any expression, statement, declaration, etc. If it is an expression, it returns the type of the expression. The method typecheck uses the method:
def typeEquivalence ( tp1: Type, tp2: Type ): Booleanto test whether the types tp1 and tp2 are equal (recall that PCAT supports name equivalence only).
Note that, in contrast to the PCAT manual, you should not allow mixed-typed operations (eg, adding an integer to a float). Also the for-loop introduces a new declaration: the for-variable that has an integer type. The scope of the variable is the body of the for-loop. The variable can only be used within the body. So ignore the PCAT manual that says that the for-variable must be declared before the for-loop.
You need to run your parser against all tests/*.pcat files. For example:
run 4 tests/hello.pcatThe output consists of the tracing of the type checker. To test for type errors, you need to change the test files a little bit (by changing a variable name, adding an extra argument to a call, etc), so you can get type errors. You also need to compare your output with that of the solution:
solution 4 tests/hello.pcat
After ensuring that your program compiles and executes correctly, cleanup your pcat directory using clean Then, if you are using Linux/MacOS, archive your pcat directory using tar cfz pcat.tgz pcat. If you are using Windows, zip the pcat directory into the file pcat.zip. Then submit your file (pcat.tgz or pcat.zip) here:
Last modified: 03/26/15 by Leonidas Fegaras