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

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
----------------