This is an optional, extra credit, individual assignment
(no groups). No one has to do it. Doing it can only help you
grade, but not doing it will not hurt your grade. (I set my
grading curve before factoring in any extra credit.) The
amount of extra credit is variable, depending on what you do,
but the general goal is that you can get a max of about 5%
extra, compared to 40% for the overall project component of the
course, and you need to do more than 5/40 = 12.5% extra work to
reach the max.
What do you need to do, you ask? Well, you tell me: You must design and implement some non-trivial extension to the pl/0 language. Ideally, whatever you do will effect all phases of the compiler, from lex to codegen. Here's one half-baked example: add goto's. Lots of details need to be specified: syntax and scope of labels, syntax for goto's, can you jump into/out of a loop, a procedure, a function, how does that effect the stack, etc., etc. There are lots and lots of other possibilities (strings, array slices, pointers, exceptions, objects, multiple inheritence, first-class functions, logic programming, Real Time Streaming ActiveMediaX Beans, ...), but do think it through; some of those are a wee bit complicated. Step 1: Prepare a written description of your proposed language change, together with a sketch of what needs to be changed in the compiler. (What new tokens are needed? What parts of the parser need to change and will the basic pseudo-LL(1) style parser suffice? What semantic checks need to be added? Will the symbol table change? What kinds of test cases will you need to test it? Etc.) This should run 2-3 pages, typed. Schedule a time to meet with me to review this before you begin implementation. Step 2: Implement and test it. Step 3: Turn in, both electronically and on paper:
|
cse401-webmaster@cs.washington.edu (Last modified: 11/12/99)