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.) |
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.
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.
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 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) |
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.
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% |
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 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
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
This page was last modified Sunday April 21, 2019 at 16:46:49 EDT.