CS143-Lab/assignments/PA4/README
2023-03-16 15:55:37 +00:00

167 lines
6.2 KiB
Plaintext

README file for Programming Assignment 4 (C++ edition)
======================================================
Your directory should now contain the following files:
Makefile
README
ast-lex.cc -> [cool root]/src/PA4/ast-lex.cc
ast-parse.cc -> [cool root]/src/PA4/ast-parse.cc
bad.cl
cgen -> [cool root]/etc/../lib/.i
cool-tree.cc -> [cool root]/src/PA4/cool-tree.cc
cool-tree.h
cool-tree.handcode.h
dumptype.cc -> [cool root]/src/PA4/dumptype.cc
good.cl
handle_flags.cc -> [cool root]/src/PA4/handle_flags.cc
mycoolc -> [cool root]/src/PA4/mycoolc
mysemant -> [cool root]/src/PA4/mysemant
semant-phase.cc -> [cool root]/src/PA4/semant-phase.cc
semant.cc
semant.h
stringtab.cc -> [cool root]/src/PA4/stringtab.cc
symtab_example.cc -> [cool root]/src/PA4/symtab_example.cc
tree.cc -> [cool root]/src/PA4/tree.cc
utilities.cc -> [cool root]/src/PA4/utilities.cc
*.d dependency files
The include (.h) files for this assignment can be found in
[cool root]/include/PA4
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.
semant.h contains declarations and definitions for the semantic
analyzer. Place class definitions for the structures you will
use here.
cool-tree.aps contains the definitions for the tree language
which you use to construct the abstract syntax tree (AST).
From this file, cool-tree.h and cool-tree.cc are automatically
generated by a utility that compiles the specification into
C++ functions for producing and consuming the tree nodes.
This file is provided for your reference. DO NOT MODIFY.
tree.{cc|h} contain definitions used by the tree package. DO
NOT MODIFY.
cool-tree.h, and cool-tree.handcode.h specify and give 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. Note that cool-tree.handcode.h
differs slightly from the file supplied for PA3.
You should NOT remove any definitions that are already present
in cool-tree.h and cool-tree.handcode.h. These functions 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.
cool-tree.cc contains definitions of the provided methods,
and instantiations of the template for the list handling functions.
You should not modify this file, but place definitions of all
methods you add to cool-tree.h or cool-tree.handcode.h in semant.cc.
DO NOT MODIFY cool-tree.cc
semant.cc is the file in which you should write your semantic
analyzer. The main() procedure calls the method `semant'
on `ast_root', the root of the abstract syntax tree generated by
the parser. There are methods supplied that you should use to report
errors. You are relatively free in how you decide to structure the
semantic checker, but don't modify the error printing routines.
ast-lex.cc and ast-parse.cc 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-phase.cc contains a test driver for semantic analysis.
The main program 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 global
variable semant_debug to true (1). If you want your semantic
checker to print debug information when the option is set, write
your debug code in the following format:
if (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-phase.cc
symtab.h contains a symbol table implementation. Read the
comments in the file, the "Cool Tour", and look at the example
in symtab_example.cc. 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
% make symtab_example
% ./symtab_example
To compile your semantic analyzer program type:
% make semant
To test your semantic checker, type:
% ./mysemant good.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:
% make 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
% make 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
----------------