Programming Project 1
Programming Project 1
Flex and Bison for use in
Leet to English conversion
Due: Thursday December 19, by 11:59pm.
NOTE: The description file has been
updated on 12/13/02. If you downloaded it before this date, please
re-download it. Take a look at the submission info - it's all there
Scenario (to be read if you like reasons for doing these assignments :)
An English teacher comes to you with complaints about her high school
students writing in some strange language called leet speak. It's
not like the old pig latin and she can kind of read it, but she's not happy
with it. For one thing, there are multiple ways to say the same words.
As an example, if a student wanted to say the words "leet speak",
the student could write: "133+ $p34k" or if they're really leet they could
write: "||:|:-|- _\-|*|:/\|<".
The teacher would like to play a trick on students who turn their
next homework assignment in using leet speak - she would like to
automatically translate it, correct a certain subset of misspelled
words, highlight those words, and then give the assignment back to
Your first thought upon hearing this is to ask whether or not students
submit assignments in ms-word as you don't really want to have to deal
with those kind of formatting issues...
luckily the documents will be given to you in
ascii text [editors note: this is a bit contrived, but works for
this particular assignment]. The teacher
doesn't even mind if you convert them to HTML - after all, the format
is easy to read and easy to generate. And so you decide that they
should be in HTML.
In this programming project, you will do the following:
- Use flex to translate the leet into English. This involves the following
- Use flex to translate the different ways of making leet characters
into regular characters.
- Use flex to translate certain incorrectly spelled words into their
correctly spelled equivalents.
- Pass on various other characters in the text file to the parser (this
includes characters like the ? or . that may end a sentence). You
will also need to pass on a \n\n as a paragraph ending.
- Create a grammar for turning the text into an html document. As an
example, you may want your grammar to handle sentences, words, and letters
- Use bison to:
- Implement the grammar in bison and add in the appropriate html tags.
- Create the appropriate html text to colorize misspelled words.
- Capitalize the beginning of every sentence.
Assorted files you will need
- I have collected a variety of letter translations, words, and their
corresponding colors that you need to deal with in a
- The starting leetScanner.h and
leetScanner.lex files for use with
flex. I've defined A in this file to help you out. This scanner
will tokenize a file containing only an a. You
can compile the file in the following 2 steps:
- Type: flex leetScanner.lex
- Type: gcc -o scan lex.yy.c
- The starting leetParser.h and
leetParser.y files for use with
bison. I've defined letters in this file to help you out. This parser
will parse a file containing only an a (but
it won't turn it into html).You
can compile the file in the following 2 steps (assuming that the file
lex.yy.c already exists!):
- Type: bison leetParser.y
- Type: gcc -o parse leetParser.tab.c
- An example text file along with output from
the scanner and
As usual, use lots of comments and make your
files as readable as possible (for example, by making
use of the definition and code sections, using descriptive names,
and using good indentation (spaces, NOT tabs)).
Start each file with comments containing your name(s) and account(s).
Make sure that your lines are at most 80 characters long.
You may work on and submit this project with another student
as stated in the syllabus,
If you choose to work with another student, both of you
should contribute significantly to the whole programming project.
You should submit only one copy of the project with both
your names on it.
You should only submit work that is completely your own and
you should be able to explain your work to me.
You will be using try to submit your projects this quarter. For this
particular project there are 2-3 submissions:
- (10 points) You must all register for the course separately as the
course registration gives me info. on where to send your email.
The registration command is:
try jdb-grd register /dev/null
- (90 points) Submitting the project code. Of these points, 50 will
be for the scanner and 40 will be for the parser. The code submission command is:
try jdb-grd project1-1 leetParser.h leetParser.y leetScanner.h leetScanner.lex
- (helps with the above credit) An optional writeup file in which
you can describe any problems that
you might have had with the project, any difficult-to-understand code
that you might have created, or any particular cases (for instance the damn
problem where damn will be scanned as dmm) that you have handled specially.
You are more likely to get partial
credit if you are aware of your problems and describe them to me. The writeup file command is:
try jdb-grd project1-2 writeup.txt
You can resubmit
as often as you like before the deadline.
Late submissions will not be accepted for any reason, but the lowest
of the four programming project grades will be dropped if you do
all of the projects. However,
a zero for cheating will not be dropped.
If you work as a pair, you should submit all work from one account and
both partner's names should appear on all submitted files.
Flex and Bison Sites and Information
The Unix man pages for flex and bison are fairly complete. With that said,
you can also find information at:
The on-line Bison manual