CSCE 531
Compiler Construction
Spring 2019

Time: TuTh 2:50pm - 4:05pm
Place: Swearingen 2A05
Instructor: Stephen Fenner
Office: Storey Center 2249
Office Hours: MW 9:45am - 10:45am, TuTh 1:30pm - 2:30pm or by appointment
Phone: 777-2596 (only during office hours; email is preferred otherwise)
E-mail: FENNER-dot-SA in the domain gmail-dot-com
Teaching Assistant: Ivan Panchenko
TA's Office: Storey Center 2236
TA's Office Hours: TuTh 10:00am - 12:00pm or by appointment through email
TA's E-mail: panchenk IN THE DOMAIN email DOT sc DOT edu
Course Homepage: https://cse.sc.edu/~fenner/csce531/index.html
Required Text: Aho, Lam, Sethi, & Ullman, Compilers: Principles, Techniques, and Tools (2nd ed.), Addison-Wesley, 2007 (but you can probably get by with the 1st ed.)

Bulletin Description

Includes course outcomes and topics covered.

Prerequisites

CSCE 240 or the equivalent (which itself requires CSCE 215 or the equivalent). Particularly, this course assumes that you have previouse experience writing substantial programs in C or C++, spanning multiple source files, on a Unix or GNU/Linux platform or the like, and that you know how to use the command-line make utility to coordinate software development. This course involves extensive programming in C on Linux. This is not a course to take to learn how to program in one of these languages. This is not a course to take if you do not already know GNU/Linux fundamentals. You are assumed to know these things before you begin.

Objectives

This course has two major objectives. First, you will learn how modern compilers are designed and implemented (and also a bit about the difficulties of designing languages). The second objective of the course is for you to improve your software engineering skills by

IMPORTANT: This course (especially the project, see below) is very time-consuming and often frustrating. Ask anyone who has taken this course what a workload it is. However, if you persevere, you will learn a great deal. Please keep this in mind when scheduling your time for coursework. If you are not sure that you can devote an ample amount of time and effort to this course, I recommend that you not take it at this time.

Lecture Topics

Compiler design is an amalgam of many varied ideas and techniques, mixing theory and practice. We will concentrate mostly on front-end issues: general background (Chapter 1 of the text), lexical analysis (2.6, 3.1--3.7 in the text), syntax analysis (2.4, 4.1--4.7), syntax-directed translation (2.3, 5.1--5.5), and type checking (6.3, 6.5). We will touch upon code generation and optimization, but will not go into much detail with either. If time permits, we will go into more detail with one of the topics above, or explore possible extensions of existing techniques.

Equipment

The "official" computer development work will be on the Linux/x86 machines in the lab (l-1d43-01.cse.sc.edu through l-1d43-20.cse.sc.edu). Make sure you have an account on these machines. All your code will be tested on one of these machines.

The Project

The major part (35%) of your course grade will be based upon a large, team-based programming project---writing a compiler for a sizable subset of C++ (target machine is GNU/Linux/x86). (Team sizes can be between 1 and 3 people; see below.) The project will consist of the following parts, with their approximate due dates:

I Week 6 declarations
II Week 8 expressions and functions
III Week 11 control constructs, pointers, and array accesses
IV Week 13 records (extra credit only)
Each part will be graded with equal weight, but they are not necessarily of equal difficulty. Part II is likely the most difficult, Part III the easier because it is in smaller, independent chunks. Handouts describing each part in more detail will be posted on the web off of the course homepage.

You will work on the project in a team of one to three people (three is recommended). Teams will be chosen before the project starts. Teams cannot mix graduate and undergraduate credit students.

Programming project parts may be handed in late at a penalty of 20% per weekday up to one week late. A weekday is a 24-hour period starting at 12:00 midnight and going through 11:59 pm. Weekends (Saturday and Sunday) and vacation/snow days are free and not included in the count. A program submitted any time through 11:59 pm on a given day will be counted as having been submitted that day. For example, for a project part due on Wednesday, submitting on Friday is two days late, and submitting any time Saturday through the following Monday counts as three days late. The following Wednesday counts as five days late, and no submissions will be accepted after that.

Each project part has three possible levels of difficulty. Those taking the course for undergraduate credit will get a 10-point boost, which may put them over 100%, the surplus grade counting as extra credit. Functionality at the lowest level is necessary for further parts of the project.

Grading of programming assignments will be automated. This means that you must adhere to the specified interfaces. We will make the scripts we will use for grading available to you for self-testing.

WARNING: Although grading is mostly or entirely automatic, your code must be adequately documented and structured. If we choose to examine your source code directly but cannot easily read and understand it, you will lose points.

Other Homework and Exams

There will be two individual (non-team) programming assignments given during the semester. The homework (in total) will be worth 15% of your course grade. These assignments must be turned in on time. No late nonproject homework assignments will be accepted.

In general, all exercises that I assign throughout the course are to be submitted by CSE Dropbox.

The rest (50%) of your course grade will be divided between an open-book open-notes midterm exam given Tuesday, February 26 in class and a similar final exam given according to the Registrar's schedule of final exam times:
     Final Exam Thursday May 2, 12:30pm - 3:00pm, Coliseum room 2009

For both exams you are allowed any printed and hand-written material, but you are NOT allowed electronic devices of any kind, except for legitimate use by students with disabilities registered through the university's Office of Student Disability Services. Students taking the course for undergraduate credit will receive a 10% slack on all exams. That means both your score and the denominator will be boosted by 10%.

NOTE to APOGEE students: you must either be physically present to take the exams or otherwise set up a way to take the exam remotely, with a trustworthy proctor. You must send me contact information for the proctor well in advance. You must also take the exam at the same time as the other students.

In summary, your course grade will be determined in the following way:

Programming Project 35%
Homework 15%
Midterm Exam (Tues February 26 in class) 15%
Final Exam 35%

Grading Rubric

We will use a fairly standard rubric for final letter grades:
Overall Score Letter Grade
[90%,100%] A
[86%,90%) B+
[80%,86%) B
[76%,80%) C+
[70%,76%) C
[66%,70%) D+
[60%,66%) D
[0%,60%) F

Extra Credit Policy

Extra credit earned on the team project counts toward the team project only, up to 100% (35% of your grade). So earning extra credit in one installment can offset a poor showing in another, but only up to 100% of the project. Extra credit earned on individual homework assignments counts for both the project and the homework, but not exams. Extra credit on exams (midterm and final) counts toward everything and is unlimited.

Here is how your grade is computed: Suppose you earn p out of 100% on the project, you earn h out of 100% on the individual homework, and you earn e out of 100% on the combined exams. Any or all of these three quantities may exceed 1 = 100% because of extra credit earned. Then your total score for the course is


T = min(min(0.35p,0.35) + 0.15h, 0.5) + 0.5e

T may still surpass 100%, but only because of extra credit earned on exams.

Attendance Policy

All non-remote students are expected to attend all lectures in person. Those students taking the course remotely are expected to view each lecture in a timely manner, i.e., before the next lecture.

Plagiarism Policy

You are expected to read and understand the Student Honor Code in the Carolina Community Student Handbook and Policy Guide, especially item A.9. starting on page 2. You are also expected to know and follow the policies specific to this course, given below.

The following applies to individuals and to teams.

Copying someone else's work without proper citation (see below), with or without the other person's knowledge, constitutes academic fraud. It is a serious intellectual crime, as it betrays the trust of the instructor and other students, as well as future employers. The same is true for letting someone else copy your work. Neither will be tolerated. The punishment is automatic failure of the course for all parties involved (copier and copiee) and a report submitted to the university's Office of Academic Integrity as well as any other disciplinary action taken by that office. Discussion and collaboration among students at the conceptual level only (i.e., general ideas, approaches, and techniques to solve a problem) is tolerated, even encouraged, but the answer you give and the program code you write must be completely your own or your team's. You may not copy anyone else's work, even if you modify it afterwards. Likewise, do not under any circumstances give a copy of your homework to, or make your homework available for copying by, anyone except me or your other team members, otherwise you will be held equally responsible for any plagiarism that results. This includes

Other forms of cheating (on exams for example) will also be punished by automatic failure from the course. If you have doubts or questions about what any of this means, please ask me.

Plagiarism Policy FAQs (not exhaustive)


This page was last modified Sunday April 21, 2019 at 16:46:49 EDT.