Language Processors and Programming Environments
Meeting Time and Location:
Tuesday 7:20-10:00pm, Innovation Hall 134
Instructor: Prof. Yutao Zhong.
Email: yzhong (at) cs (dot) gmu (dot) edu
Office: STII 419
Office hour: Wednesday 3:30pm -4:30pm, or by appointment
Class Website: http://cs.gmu.edu/~yzhong/cs440_s09/
This course will cover the theoretical and implementation aspects
of language processing. Emphasis will be on the techniques and the issues that arise in the design and construction of compilers. There
are several substantial programming assignments associated with this course.
Main topics of the course include:
- Compiler Design
- Lexical Analysis
- Syntax Analysis - grammars, LL(1) parsers, LR(1) parsers
- Semantic Processing
- Code generation and optimization
Prerequisites: C or better in CS 310, CS 330, CS 365/367
Students are expected to be acquainted with formal
models and languages(CS330), computer structures and assembly languages(CS365 or CS367),
and data structures(CS310). Students should
have fair programming skills in C/C++/Java.
Other Useful Resources
At the end of this course, students should
- be able to compare compiled and interpreted execution models, outlining the relative merits of each.
- be able to describe the phases of program translation from source code to executable code and the files produced by these phases.
- be able to write regular expressions and finite state automata for languages, be able to use tools to automatically generate scanners.
- understand the definition of grammars; be able to write grammar for context-free languages; be able to manually write recursive-descent parsers; be able to transform grammars and use automatic tools to generate bottom-up parsers.
- be able to construct and maintain symbol table; be able to process declarations and scopes; understand the type system and type checking.
- be able to describe the storage system and explain the implementation of high-level language features like function calls.
- be able to explain the major problems and solutions of code generation; be able to implement code generator from intermediate code.
- be able to explain important optimization schemes; be able to describe and apply data-flow analysis.
- Tentative plans call for 3 to 4 programming assignments, together
worth 45% of your grade. These are to be individual efforts, meaning no sharing
of code allowed with anyone but the instructor or the TA.
- There will also be written homeworks, in-class quizzes,
an in-class midterm exam, and a final exam. End-of-semester numeric scores will be weighted as follows:
- 55% Exercises
- 45% programming assignments
- 10% writing assignments and quizzes: written assignments can be done individually or in groups
- 45% Exams
- Both the final and midterm are closed-book
and closed-notes. Missed exams must be arranged with the instructor BEFORE the
exam. You must have a written excuse (doctor's note, for example) to miss an exam. No
early exams will be given and make-up exams are strongly discouraged. I reserve the right to give oral makeup exams in lieu of written.
- Letter grades will be assigned by subjectively identifying brackets
in the numeric scores. A total score of 49 or less will result in F.
- Late written assignments will be accepted within 3 days with the following penalty: 1-day:25%, 2-day:50%, 3-day:75%
- For programming assignments:
- Every student has a total of THREE(3) late days for grace periods of the entire semester.
- You may use these late days on a single assignment or spread over multiple assignments. Use them wisely.
- No partial late day is in effect. You need one whole late day to cover a one-hour late submission.
- Late submissions will not be graded if you have used up all of your late days.
- You must explicitly indicate that you want to use a late day in your submission. Otherwise late submissions will not be graded.
- You may not give your extra late days to another student and you don't get any extra credit for having late days left at the end of the semester.
There may be opportunities for extra credit on some of the projects
or exams. To receive any extra credit for a project, all base functionality
of a project must be implemented; extra credit portions of a project can not count
in place of required features. Extra extensions other than your late days
will not be given for completion of extra credit.
You are expected to abide by the honor code. All assignments
and exams are individual efforts. Collaboration on any programming assignment
is unacceptable. Please refer to
GMU Academic Policies and
Computer Science Department Honor Code. Any violation of the honor code will result in a zero of the
assignment/exam, and may result in an F for the course.
I will be using
detect plagiarism in programming assignments.