Course Syllabus for "CS304: Compilers"
Because we have compiler programs, software developers often take the process of compilation for granted. However, as a software developer, you should cultivate a solid understanding of how compilers work in order to develop the strongest code possible and fully understand its underlying language. In addition, the compilation process comprises techniques that are applicable to the development of many software applications. As such, this course will introduce you to the compilation process, present foundational topics on formal languages and outline each of the essential compiler steps: scanning, parsing, translation and semantic analysis, code generation, and optimization. By the end of the class, you will have a strong understanding of what it means to compile a program, what happens in the process of translating a higher-level language into a lower-level language, and the applicability of the steps of the compilation process to other applications.
Upon successful completion of this course, the student will be able to:
- Describe the compilation process and explain the function of the components that comprise the structure of a compiler.
- Apply concepts of formal languages and finite-state machines to the translation of computer languages.
- Identify the compiler techniques, methods, and tools that are applicable to other software applications.
- Describe the challenges and state-of-the-practice of compiler theory and practice.
In order to take this course, you must:
√ Have access to a computer.
√ Have continuous broadband Internet access.
√ Have the ability/permission to install plug-ins or software (e.g., Adobe Reader or Flash).
√ Have the ability to download and save files and documents to a computer.
√ Have the ability to open Microsoft files and documents (.doc, .ppt, .xls, etc.).
√ Have competency in the English language.
√ Have read the Saylor Student Handbook.
√ Have a basic mastery of the material in CS101, CS102, CS201, CS202, and CS303.
Welcome to CS304. Below, please find some general information on the course and its requirements.
Course Designer: JM Perry
Note: The MIT, Stanford, and Berkeley resources overlap. However, they reinforce each other, have differences in presentation, examples, and topic emphasis, and provide the opportunity to review the material. Moreover, they offer a choice of perspective and style, which some students may find appealing. There are several ways to use these resources. All students should use the Mogensen text. Of the MIT, Stanford, and Berkeley resources, a student may 1) choose the one whose style is most appealing and stick with it, occasionally using the others where they are beneficial, 2) use all three resources totally, or 3) for each topic/subunit select the resource you find most helpful. Lastly, the Berkeley resource includes video lectures, which can be useful for explaining certain points of a topic.
- Open courseware from MIT: 6.035 Computer Language Engineering
- Open courseware from Stanford University: CS143 Compilers
- Open courseware from Berkeley: CS164 Programming Languages and Compilers Video Lectures and Lecture Notes.
- Torben Ægidius Mogensen’s textbook, Basics of Compiler Design
Requirements for Completion: Passing grade on quizzes and the final exam; achieve the objectives of each unit and the goals of the course; ability to apply the concepts taught in the course.
Time Requirements: This course should take approximately 146 hours to complete.
Tips/Suggestions: As you study the topics in the course, keep in mind the application of compiler techniques and tools to the development of other types of software.