167 lines
6.2 KiB
Plaintext
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
|
|
----------------
|