CS50200 - Compiling and Programming SystemsFall 2016 Days:
TTh 3:00-4:15 pmCredit Hours:
This course presents an overview of the principles and techniques in modern compilers, which gives students a deeper understanding of the syntactic rules and the functionality of modern programming languages, as well as the use of the compiler for enhancing program quality. The course also gives the students the opportunity to practice the implementation of certain key components in the compiler front-end and back-end.Description:
The course introduces the theoretical foundation for both the front end and the backend of the compiler. For front end, finite automata, regular expression, context free grammars and parsing state computation form the theoretical base. For the back end, the most important theories concern the analysis of program???s control and data flow, control and data dependences, and the concept of parallelism and locality analysis. The course also has a heavy emphasis on experimentation, using a state of the art compiler environment to implement both front-end and back-end techniques.Topics Covered:
The first part of the course will be an overview of the "front end" of the compiler and basic mechanism for code generation , including the following components: Lexical analysis, examples of context free grammars, top-down parsing, bottom-up parsing, abstract syntax tree, basic type checking, symbol tables,intermediate code format and generation, machine code generation, garbage collection, code generation for programs written in object-oriented languages. The second part of the course gives more in depth coverage of the fundamental program analysis techniques commonly used by compilers and software engineering tools, which include, but not limited to, the following: Control flow and control dependence, data flow and data dependence analysis, interprocedural analysis, pointer analysis, how such analyses are applied to program transformations for better performance and to enhancement of software reliability.Prerequisites:
A bachelor degree in computer science or an equivalent field. Students not in the Computer Science master's program should seek department permission to register.
Solid understanding of syntax and semantics of high level programming languages, computer organization, data structues and combinatorial algorithms. Strong skill in C programming, especially in dealing with dynamic data structures such as lists and graphs. Familiarity with instruction-level processor architecture.Applied/Theory:
50/50Web Address:http://www.itap.purdue.edu/learning/tools/blackboard/index.cfmWeb Content:
Also using course website: http://www.cs.purdue.edu/homes/ci/cs502
. Blackboard will contain grades, lecture notes, homework assignments, solutions, chat room, message board, and links to addt'l readings and useul software/documents.Homework:
4-5 written homework assignments. 2-3 small programming assignments for lexical analysis and parsing. 2 programming projects, one on front end (internal representation) and one on backend (control and data flow analysis). Work submitted via email to the TA(s) (email TBA).Projects:
Required (See "Homework" section)Exams:
One midterm exam and one final examTextbooks:
**Updated Mar. 13, 2013** Required - "Compilers: Principles, Techniques, and Tools (Second Edition)" by A Aho & M. Lam & Sethi & Ullman, Addison-Wesley, ISBN: 978-032-148681-3. Articles from literature may be assigned for additional reading to complement the textbook. Computer Requirements:
ProEd Minimum Computer Requirements. All programming assignments and projects will be done on Linux systems. The projects will be done within a version (to be announced) of GCC. Such a version will be required to be installed on Linux. Lex and Yacc/Bison tools will be required to perform the small programming assignments in front end.ProEd Minimum Requirements: viewTuition & Fees: viewOther Requirements:
Remote students may need computer accounts to access Computer Science computers for CS502 if students lack their own machines appropriate for completing programming assignments and projects.