milestone: CGI vs. WIG
For this milestone you must:
- Make sure you all understand the CGI protocol, at least as far as
described in the reading for Week 5, An
instantaneous introduction to CGI scripts and HTML forms.
- Set up an environment for compiling and running WIG programs
following these instructions.
- Write a WIG service benchmark, and provide a link to it running
somewhere. Your WIG service should be interactive and attempt to take
advantage of WIG language features. We will be grading it for
meaningful feature coverage, clarity, documentation, correctness, and
originality. However, please do not worry about your program doing
everything possible with WIG unless you really want it to. You can
see the example programs in the wig/ directory
as well as old WIG benchmarks for
reference. You can test your WIG service using the binary versions of
existing WIG compilers, assuming your environment is set up properly.
- Write a CGI script that implements some WIG service (i.e.
"compile" a WIG service manually), and provide a link to it running
somewhere. It does not need to be a full CGI implementation of your
actual WIG benchmark, although it can be if you like. If it differs,
you should include the service you are starting from. You can use any
language, and you should discuss how a compiler might go about
generating this code starting from a WIG service, and what extra
complications might be required to translate your actual WIG
benchmark. Your choice of language here does not commit you to using
it as your WIG compiler target.
- Read the WIG project description and grammar and report on what
you see as potential difficulties. In particular, what language
features do not have immediately apparent semantics, based on your
knowledge of C, Java, and HTML? What might be the right semantics for
these features? It will be interesting for you to compare these notes
with your actual experience after completing the project.
You should check in the source code for question 3 into
group-X/wig/benchmark/ and the source code for question 4
group-X/wig/cgi/. You should also check in a
group-X/wig/benchmark/README file to accompany your WIG
benchmark. You should finally check in a milestone report that
addresses tasks 3--5 as group-X/reports/cgi_vs_wig.txt. Your
milestone will not be complete until all of these things have been
received. Following good Subversion practice, you should not check in
any automatically generated files. On the other hand, if you want to
use non-text media files, it is fine to check those in.
This milestone is small and you should be able to complete it quickly.
You should take the time now to ensure that you are familiar with
either SableCC, Flex and Bison, or whatever your chosen implementation
toolset is, because you will be writing the WIG scanner, parser, and
pretty printer for the next milestone. If possible, get started on
the next milestone early, because it will probably take you somewhat
longer than this one.
This milestone is due by midnight on Friday of Week 6. It will count for 5%
of your grade. Marks will be generously deducted for late