133 lines
4.4 KiB
Plaintext
133 lines
4.4 KiB
Plaintext
README file for Programming Assignment 3 (C++ edition)
|
|
======================================================
|
|
|
|
Your directory should now contain the following files:
|
|
|
|
Makefile
|
|
README
|
|
cool.y
|
|
bad.cl
|
|
good.cl
|
|
cool-tree.handcode.h
|
|
cool-tree.cc -> [cool root]/src/PA3/cool-tree.cc
|
|
cool-tree.aps -> [cool root]/src/PA3/cool-tree.aps
|
|
dumptype.cc -> [cool root]/src/PA3/dumptype.cc
|
|
handle_flags.c -> [cool root]/src/PA3/handle_flags.cc
|
|
parser-phase.cc -> [cool root]/src/PA3/parser-phase.cc
|
|
stringtab.cc -> [cool root]/src/PA3/stringtab.cc
|
|
tokens-lex.cc -> [cool root]/src/PA3/tokens-lex.cc
|
|
tree.cc -> [cool root]/src/PA3/tree.cc
|
|
utilities.cc -> [cool root]/src/PA3/utilities.cc
|
|
*.d dependency files
|
|
*.* other generated files
|
|
|
|
The include (.h) files for this assignment can be found in
|
|
[cool root]/include/PA3
|
|
|
|
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 in 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.
|
|
|
|
cool.y is the skeleton for the parser specification that you
|
|
are to write. It already contains productions for the program
|
|
and the classes. Use them as an example to write the remaining
|
|
productions. You should also read the bison documentation.
|
|
This skeleton will compile and run as is, but it doesn't
|
|
do much.
|
|
|
|
good.cl, bad.cl test a few features of the grammar. You should
|
|
add tests to ensure that good.cl exercises every legal
|
|
construction of the grammar and that bad.cl exercises as many
|
|
different parsing errors as you can squeeze into one file.
|
|
|
|
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.
|
|
cool-tree.handcode.h is the handwritten extension to
|
|
cool-tree.h. If you read cool-tree.h and cool-tree.cc, you will
|
|
note that there are "hooks" for extending the classes
|
|
declarations. Extending and modifying the tree package is
|
|
discussed in the "Cool Tour", but you do not need to (and should
|
|
not) modify the tree package for this assignment.
|
|
|
|
tokens-lex.cc is a lexer capable of reading a token stream from
|
|
console in the format produced by the lexer phase. DO NOT
|
|
MODIFY.
|
|
|
|
parser-phase.cc contains a driver to test the parser. DO NOT
|
|
MODIFY.
|
|
|
|
dumptype.cc prints the AST out in a form readable by the
|
|
semant phase of the compiler. DO NOT MODIFY.
|
|
|
|
handle_flags.cc implements routines for parsing command line
|
|
flags. DO NOT MODIFY.
|
|
|
|
The rest of the files are created as byproducts of `bison'.
|
|
`cool-parse.cc' is the generated C++ file containing the
|
|
parser.
|
|
|
|
Files not discussed are covered in the README for PA2.
|
|
|
|
Instructions
|
|
------------
|
|
|
|
To compile your parser program type:
|
|
|
|
% make parser
|
|
|
|
This produces an executable named "parser" which is standalone
|
|
phase of the Cool compiler. It requires lexer, semant, and cgen
|
|
to do anything useful.
|
|
|
|
To test your parser on a file 'foo.cl' type
|
|
|
|
% myparser foo.cl
|
|
|
|
myparser is a shell script that "glues" together lexer and
|
|
parser using pipes.
|
|
|
|
To run your parser on the files good.cl and bad.cl type:
|
|
|
|
% make dotest
|
|
|
|
To run the (provided) lexer and your parser on a file called test.cl type:
|
|
|
|
% ./lexer test.cl | ./parser
|
|
|
|
If you think your parser is correct and behaves like
|
|
the one we wrote, you may want to run a COOL compiler using
|
|
your parser:
|
|
|
|
% mycoolc foo.cl
|
|
|
|
To overwrite the default lexical analyzer with yours, replace
|
|
lexer (which is a symbolic link to the "official" lexer) with
|
|
your lexer from PA2.
|
|
|
|
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 PA3
|
|
----------------
|