Course Syllabus

Course Outline

Programming Languages and Compilers. A study of programming languages with an emphasis on their implementation. Topics include lexical analysis, language syntax, control structures, the binding of names, procedures, and their implementation in compilers.

Lecture topics will include:

Course Objectives

During this course, students will:

Prerequisites

This course is designed with the assumption that students have a bachelors degree in Computer Science and are able to program in C, Java, or a similar high-level programming language. In addition, the discussions of compiler implementation in lecture and in the textbook will assume a basic knowledge of discrete mathematics and algorithmic complexity, such as that learned in:

CS 3233
Discrete Mathematical Structures
CS 3343
Analysis of Algorithms

Textbook and Materials

There are two textbooks for this course. The first is Michael Scott's "Programming Language Pragmatics, 2nd Ed." (2006), and the second is Keith Cooper and Linda Torczon's "Engineering a Compiler" (2004). In addition, research papers on compilers and programming languages may be provided to supplement and the textbook's coverage of certain topics.

Times of Instruction

Lecture: Mon. and Wed., 5:30 - 6:45pm; SB 3.02.02
Office Hours: Tues. 3:30-4:30pm, Wed. 10:30-11:30am, and by appointment; SB 4.01.34
Midterm Exam: 5:30-6:45pm, Monday, October 15, 2007; regular classroom
Final Exam: 5:00-7:30pm, Monday, Dec 10, 2007; regular classroom

Instructor Information

Instructor: Jeffery von Ronne
Office Location: SB 4.01.34
Email: vonronne@cs.utsa.edu
Phone: (210) 458-5667
Course Web Page: http://www.cs.utsa.edu/~vonronne/classes/cs5363-f07/

Grading

Each student will be required to write a compiler for a toy language derived from Pascal; this will be worth 70% of the overall course grade. At four fixed dates, each student will need to turn in their compiler in its current state on that date. At each submission, students will be given one grade for their progress as of that date and a tentative score for each of the parts completed at that point. At later submissions, students may request a regrade of any part that has not already been regraded.

There will be a midterm exam worth 15% of the final grade, and a non-comprehensive final exam worth 15% of the final grade.

The final grade will be based on a nominal total of 200 points (with a possiblity of 30 points of extra credit):

Compiler Project
progress by first deadline (7)
progress by second deadline (7)
progress by third deadline (7)
progress by fourth deadline (7)
Part 1: Scanning and Parsing (28)
Part 2: AST construction and Type Checking (28)
Part 3: Syntax-Direct Translation into three address code IR (28)
Part 4: Generation of MIPS assembly code (28)
Extra Credit Part 1: Translation into and out of SSA (10)
Extra Credit Part 2: Machine Independent Optimizations (10)
Extra Credit Part 3: Register Allocation (10)
Midterm Exam (30)
Final Exam (30)

Students who successfully complete parts 1-4 on the compiler project, and earn passing grades on the midterm, and final exams will earn at least a 'B' in the course.

As a matter of policy, late assignments will not be accepted, but partial credit will be given for partially complete/working assignments. Exceptions may be made on a case by case basis.

Attendance is expected, but points will not be deducted for absenteeism.

Scholastic Dishonesty

You are expected to work independently on all assignments. It is OK to discuss the assignment, strategies, algorithms, and compiler error messages with your classmates in general terms, but you should not be discussing the details of, looking at or copying each others code. Your code should be your own and not look like anyone else's. It is, however, permitted to re-implement known/published algorithms (from textbooks or research papers) in the context of your own compiler, but you should cite the source for any such algorithms not found in your text book. In any case, you must understand everything, and you are expected to be able to explain the purpose of every line of code that you turn in.

According to UTSA's Student Code of Conduct:

"Scholastic dishonesty" includes, but is not limited to, cheating, plagiarism, collusion, falsifying academic records and any act designed to give unfair advantage to he student, or the attempt to commit such an act.
"Cheating" includes, but is not limited to: ... 6. collaborating with or seeking aid from another student during a test or other assignment without authority; ...
"Plagiarism" includes, but is not limited to, the appropriation, buying, receiving as a gift or obtaining by any means another's work and the submission of it as one's own academic work offered for credit.
"Collusion" includes, but is not limited to, the unauthorized collaboration with another person in preparing academic assignments offered for credit or collaboration with another person to commit a violation of any section of the rules on scholastic dishonesty.

Penalties for scholastic dishonesty can include failing the course and even expulsion from the university.

Errata / Revisions