The course prerequisites are CMSC313 Computer Organization and Assembly Language Programming, CMSC331 Principles of Programming Languages and CMSC341 Data Structures. You will need assembly language programming experience from CMSC313, an understanding of programming language design from CMSC331 and strong programming skills from CMSC341. In addition, CMSC441 Design and Analysis of Algorithms and CMSC451 Automata Theory and Formal Languages are very helpful, but not required.
Final grades will be based upon 5 homework assignments (20%) and 7 programming projects (80%). Each homework assignment contributes 4% to your final grade and each programming project contributes 10%, except for the final programming project which contributes 20%.
The final letter grades are based on the standard formula:
0 ≤ F < 60, 60 ≤ D < 70, 70 ≤ C < 80, 80 ≤ B < 90, 90 ≤ A ≤ 100
Depending upon the distribution of grades in the class, there may be adjustments in the students' favor, but under no circumstances will the letter grades be lower than in the standard formula. Grades will not be "curved" in the sense that the percentages of A's, B's and C's are not fixed.
Grades are given for work done during the semester; incomplete grades will only be given for medical illness or other such dire circumstances.
Students will use the Unix tools lex and yacc to construct a compiler that translates a high-level programming language of their own design to Intel i386 assembly language. This semester-long project will be completed in 7 stages with due dates given below. All projects are due on Mondays at 12 noon.
Project grades will be based on design, correctness, completeness, efficiency, testing and documentation. Note that each programming project builds upon the previous one. So, it is very important for errors in a project to be corrected before proceeding to the next project. To facilitate this, there will be two types of deductions in the grade for a project: temporary and permanent. A temporary deduction will be rescinded if the error is corrected by the due date of the next project. Deductions for lack of documentation and lack of testing will always be permanent.
Students may choose to work in a team of two students. This is entirely voluntary. The two students in a team will receive the same grade for the project. Please note that your teammate's performance will have an impact on your project grade — your teammate's failure to complete his/her share of the project is not an acceptable excuse. All programming teams must be formed by the due date of Project 2.
If your programming team does not work out, you can continue the rest of the semester working on the programming projects individually. However, your grades for previously submitted projects will remain the same. Furthermore, you will not be allowed to form another team (even with your previous teammate).
For one time during the semester, you can extend the due date of your project by one week without penalty. It is strongly suggested that you not use this "late pass" on Project 1. Each programming team is allowed only one late pass.
Attendance is very important because a large portion of class time is allocated to discussions on the programming projects. These discussions will not be duplicated on the website or in the project descriptions and will contain information needed to complete the programming project.
Assignments are due at the beginning of lecture — this is to allow for timely grading and discussion of the homework solutions.
Students are allowed to discuss homework problems and programming projects. Collaborators and reference materials must be acknowledged at the top of each homework assignment. However, homework solutions must be written up independently. A student who is looking at someone else's solution or notes, whether in print or in electronic form, while writing up his or her own solution is considered to be cheating.
Students are allowed to discuss programming projects and receive debugging help from anyone. However, only the student and his/her programming partner (if any) are allowed to edit the programs even for debugging purposes. Thus, all of the source code for a programming project must be authored by the students submitting the project. Code reuse for standard data structures from reference sources will be allowed, but must be acknowledged and must be discussed with the instructor beforehand. All other appearances of other people's code in a submitted programming project will be considered cheating. Cases of academic dishonesty will be dealt with severely.
The UMBC academic integrity policy is available here.