Schedule of topics

Course links

January 25. Introduction to the course.

Reading: Aho et al., chapter 1 (pages 1-38).

January 27. The structure of a compiler; the structure of a programming language.

Reading: Aho et al., chapter 2 through section 2.3 (pages 39-60).

January 29. Syntax-directed translation.

Reading: Aho et al., sections 2.4 and 2.5 (pages 60-76).

February 1. Simple parsing strategies.

Reading: The GNU make manual, chapters 1 through 6, sections 9.1 through 9.6, sections 10.1 through 10.6, and chapter 14.

February 3. Lab: the make compilation manager.

Reading: Aho et al., sections 2.6 and 2.7 (pages 76-91).

February 5. An overview of lexical analysis.

Reading: Aho et al., chapter 2, from section 2.8 to the end (pages 91-107).

February 8. An overview of intermediate code generation.

Reading: Duan, ``Understanding git conceptually.''

February 10. Lab: the git version-control system.

February 12. The term project; overview of Dijkstra's notation for algorithms.

Reading: ``The Dijkstra programming language.''

February 15. Examples of Dijkstra's notation.

Reading: Aho et al., chapter 3 through section 3.3 (pages 109-128).

February 17. Tokens; input buffering.

Reading: Aho et al., sections 3.4 through 3.6 (pages 128-152).

February 19. Finite automata; overview of the lex scanner generator.

Reading: Aho et al., sections 3.7 and 3.8 (pages 152-173).

February 22. The mechanics of scanner generators.

Reading: The flex manual.

February 24 and 26. Lab: the flex scanner generator.

Reading: Aho et al., chapter 3, from section 3.9 to the end (pages 173-190).

March 1. Optimizing pattern-matching finite automata.

Reading: Aho et al., chapter 4 through section 4.4 (pages 191-233).

March 3. Context-free grammars; parsing by recursive descent.

March 5. LL parsing.

Reading: Aho et al., section 4.5 (pages 233-241).

March 8. Bottom-up parsing strategies.

Reading: Aho et al., section 4.6 (pages 241-259).

March 10. Simple LR parsing.

Reading: Aho et al., section 4.7 (pages 259-278).

March 12. Efficient LR parsing; constructing and storing LR parsing tables.

Reading: Aho et al., section 4.8 (pages 278-287).

March 15. Resolving ambiguities; recovering from errors.

Reading: Aho et al., chapter 4, from section 4.9 to the end (pages 287-302).

March 17. Lab: the bison parser generator.

Reading: The GNU bison manual.

March 19. Lab: the bison parser generator (continued).

Reading: Aho et al., chapter 5, through section 5.2 (pages 303-317).

April 5. Syntax-directed definitions; computing attributes.

Reading: Aho et al., sections 5.3 and 5.4 (pages 318-337).

April 7. Syntax-directed translation schemes.

Reading: Aho et al., chapter 5, from section 5.5 to the end (pages 337-355).

April 9. Implementing syntax-directed translation schemes in recursive-descent, LL, and LR parsers.

Reading: Aho et al., chapter 6 through section 6.4 (pages 357-386).

April 12. Three-address code and the translation of expressions.

Reading: Aho et al., section 6.5 (pages 386-399).

April 14. Type checking; unification.

Reading: Aho et al., chapter 6, from section 6.6 to the end (pages 399-426).

April 16 and 19. Translating control structures.

Reading: Aho et al., chapter 7 through section 7.3 (pages 427-452).

April 21. The run-time stack.

Reading: Aho et al., section 7.4 (pages 452-463).

April 23. Heap management.

Reading: Aho et al., chapter 8 through section 8.3 (pages 505-525) and pages 1-15 of the AVR instruction set manual.

April 26 and 28. Code generation.

Reading: Aho et al., section 8.4 (pages 525-532).

April 30. Basic blocks and flow graphs.

Reading: Aho et al., sections 8.5 through 8.8 (pages 533-537).

May 3. Register allocation.

Reading: Aho et al., sections 8.9 and 8.10 (pages 558-567).

May 5. Instruction selection.

Reading: Aho et al., section 8.10 (pages 567-573).

May 7. Optimal code generation for expression evaluation.

Reading: Aho et al., chapter 8, from section 8.11 to the end (pages 573-581).

May 10. The dynamic programming algorithm for code generation.

Reading: Aho et al., chapter 7, from section 7.5 to the end (pages 463-503).

May 12. Garbage collection strategies.

May 14. Review and commentary; student evaluations.

May 19, 9 a.m. to noon: Project review and finalization.