CS143-Lab/assignments/PA4J
2023-03-16 15:55:37 +00:00
..
AbstractSymbol.java extract tar and init 2023-03-16 15:55:37 +00:00
AbstractTable.java extract tar and init 2023-03-16 15:55:37 +00:00
ASTConstants.java extract tar and init 2023-03-16 15:55:37 +00:00
ASTLexer.java extract tar and init 2023-03-16 15:55:37 +00:00
ASTParser.java extract tar and init 2023-03-16 15:55:37 +00:00
bad.cl extract tar and init 2023-03-16 15:55:37 +00:00
BoolConst.java extract tar and init 2023-03-16 15:55:37 +00:00
CgenSupport.java extract tar and init 2023-03-16 15:55:37 +00:00
ClassTable.java extract tar and init 2023-03-16 15:55:37 +00:00
cool-tree.aps extract tar and init 2023-03-16 15:55:37 +00:00
cool-tree.java extract tar and init 2023-03-16 15:55:37 +00:00
Flags.java extract tar and init 2023-03-16 15:55:37 +00:00
good.cl extract tar and init 2023-03-16 15:55:37 +00:00
IdSymbol.java extract tar and init 2023-03-16 15:55:37 +00:00
IdTable.java extract tar and init 2023-03-16 15:55:37 +00:00
IntSymbol.java extract tar and init 2023-03-16 15:55:37 +00:00
IntTable.java extract tar and init 2023-03-16 15:55:37 +00:00
ListNode.java extract tar and init 2023-03-16 15:55:37 +00:00
Makefile extract tar and init 2023-03-16 15:55:37 +00:00
mycoolc extract tar and init 2023-03-16 15:55:37 +00:00
mysemant extract tar and init 2023-03-16 15:55:37 +00:00
README extract tar and init 2023-03-16 15:55:37 +00:00
Semant.java extract tar and init 2023-03-16 15:55:37 +00:00
StringSymbol.java extract tar and init 2023-03-16 15:55:37 +00:00
StringTable.java extract tar and init 2023-03-16 15:55:37 +00:00
SymbolTable.java extract tar and init 2023-03-16 15:55:37 +00:00
SymtabExample.java extract tar and init 2023-03-16 15:55:37 +00:00
TokenConstants.java extract tar and init 2023-03-16 15:55:37 +00:00
TreeConstants.java extract tar and init 2023-03-16 15:55:37 +00:00
TreeNode.java extract tar and init 2023-03-16 15:55:37 +00:00
Utilities.java extract tar and init 2023-03-16 15:55:37 +00:00

README file for Programming Assignment 4 (Java edition)
======================================================

Your directory should now contain the following files:

 ASTConstants.java    -> [cool root]/src/PA4J/ASTConstants.java
 ASTLexer.java	      -> [cool root]/src/PA4J/ASTLexer.java
 ASTParser.java	      -> [cool root]/src/PA4J/ASTParser.java
 AbstractSymbol.java  -> [cool root]/src/PA4J/AbstractSymbol.java
 AbstractTable.java   -> [cool root]/src/PA4J/AbstractTable.java
 BoolConst.java       -> [cool root]/src/PA3J/BoolConst.java
 ClassTable.java
 Flags.java	      -> [cool root]/src/PA4J/Flags.java
 IdSymbol.java	      -> [cool root]/src/PA4J/IdSymbol.java
 IdTable.java	      -> [cool root]/src/PA4J/IdTable.java
 IntSymbol.java	      -> [cool root]/src/PA4J/IntSymbol.java
 IntTable.java	      -> [cool root]/src/PA4J/IntTable.java
 ListNode.java	      -> [cool root]/src/PA4J/ListNode.java
 Makefile
 README
 Semant.java	      -> [cool root]/src/PA4J/Semant.java
 StringSymbol.java    -> [cool root]/src/PA4J/StringSymbol.java
 StringTable.java     -> [cool root]/src/PA4J/StringTable.java
 SymbolTable.java     -> [cool root]/src/PA4J/SymbolTable.java
 SymtabExample.java   -> [cool root]/src/PA4J/SymtabExample.java
 TokenConstants.java  -> [cool root]/src/PA4J/TokenConstants.java
 TreeConstants.java
 TreeNode.java	      -> [cool root]/src/PA4J/TreeNode.java
 Utilities.java	      -> [cool root]/src/PA4J/Utilities.java
 bad.cl
 cool-tree.aps	      -> [cool root]/src/PA4J/cool-tree.aps
 cool-tree.java
 good.cl

	The Makefile contains targets for compiling and running your
	program. DO NOT MODIFY.

	The README contains this info. Part of the assignment is to fill
	the README with the write-up for your project. You should
	explain design decisions, explain why your code is correct, and
	why your test cases are adequate. It is part of the assignment
	to clearly and concisely explain things in text as well as to
	comment your code.  Just edit this file.

	good.cl and bad.cl test a few features of the semantic checker.
	You should add tests to ensure that good.cl exercises as many
	legal semantic combinations as possible and that bad.cl
	exercises as many kinds of semantic errors as possible.

	cool-tree.aps contains the definitions for the tree language
	which you use to construct the abstract syntax tree (AST). This
	file is provided for your reference.  DO NOT MODIFY.

        TreeNode.java and ListNode.java contain definitions used by the
        tree package. DO NOT MODIFY.  

        cool-tree.java specifies and gives an implementation of Cool ASTs
        (see the README for PA3 and the "Cool Tour").  In this
        assignment, you will need to add functions to the AST classes to
        store, fetch, and compute information about the AST.

   	You should NOT remove any definitions that are already present
   	in cool-tree.java.  These function and data members are required
   	for the system to function properly.

        You should add any fields and methods to the classes you need to
        perform semantic analysis.  You will need to add, for example,
        methods which traverse the expressions of the tree and implement
        the type-checking rules.  The entry point to the semantic
        analyzer is program.semant().

	ClassTable.java implements a placeholder class for a few useful
	methods.  Feel free to extend it to implement some real data
	strucutre.

	TreeConstants.java defined some useful symbol constants.  You
	may add some of your own, if you wish.

	ASTLexer.java, ASTParser.java, and ASTConstants.java implement a
	lexer and a parser for reading text representation of ASTs from
	console in the format produced by the parser phase. DO NOT
	MODIFY.

        Semant.java contains a driver to test the analyzer.  The main
        method reads an AST in text form from standard input, parses it,
        and then produces a type-annotated AST on standard output.  The
        script mycoolc can pass any of the standard flags to the
        semantic analyzer as well; for this assignment, -s (semantic
        analysis debug) may be useful as it sets a static variable
        Flags.semant_debug to "true".  If you want your semantic checker
        to print debug information when the option is set, write your
        debug code in the following format:

	      if (Flags.semant_debug)
	      {
		...
	      }

	semant_debug is provided as a convenience. You don't need to use
	the debugging flags if you don't want to. DON'T MODIFY
	Semant.java

	SymbolTable.java contains a symbol table implementation. Read
	the comments in the file and look at the example in
	SymtabExample.java.  You are not required to use this code, but
	you may find it useful. DO NOT MODIFY.

Instructions
------------

	To compile the example use of the symbol table, type

	% gmake symtab-example

	This creates a shell script to run the symbol table example.

	To compile your semantic analyzer program type:

	% gmake semant

	To test your semantic checker, type:

	% mysemant foo.cl

	mysemant is a version of mycoolc that omits code generation.
	mysemant parses all the cool files given on the command line and
	builds a single abstract syntax tree containing all class
	definitions appearing in the input files. Your semantic checker
	is then called on this abstract syntax tree.  If there are no
	errors, the program produces a type-annotated abstract syntax
	tree as output.

	To run your checker on the files good.cl and bad.cl type:

	% gmake dotest

	If you think your semantic checker is correct and behaves like
	the one we wrote, you can try to run mycoolc using your checker,
	your parser and also your lexical analyzer if you choose (see
	below for instructions).  Remember if your lexer, parser or
	checker behaves in an unexpected manner, you may get errors
	anywhere.

	If you change architectures you must issue

	% gmake clean

	when you switch from one type of machine to the other.
	If at some point you get weird errors from the linker,	
	you probably forgot this step.

	GOOD LUCK!

---8<------8<------8<------8<---cut here---8<------8<------8<------8<---

Write-up for PA4
----------------