- Top-down parsing: LL(1)
- Bottom-up parsing: LR(1)
- Symbol tables and type checking
- Code generation
- Liveness analysis and register allocation
- Garbage collection
The overall guideline is that you are expected to know what we
have covered in lectures and exercises, and my focus in the
examination will be on those topics.
Though it will not be a something that you will be examined in directly,
you are of course expected to know topics from courses that are
prerequisites for this course. This includes topics such as regular expressions,
finite automata, assembler programming, hash tables, etc.
Curriculum material from the course textbook
(Section 0 refers to the first part of each chapter before Section 1):
Additional curriculum material
(see the literature page), most importantly:
- Chapter 1
- Chapter 2
- Chapter 3, except Section 3.5
- Chapter 4
- Chapter 5, with the recommendation below
- Chapter 6
- Chapter 7, see below
- Chapter 8, see below
- Chapter 9, see below
- Chapter 10, only Sections 10.0 and 10.1
- Chapter 11, only Sections 11.0 and 11.1
- Chapter 13, except Sections 13.4-13.6
Kim S. Larsen, Supplementary Notes for DM546, February 13, 2018.
All of the seven sets of lecture notes.
The complete stack frame layout.
All exercises posed on work notes.
With regards to exercises in the the textbook, you are only
expected to know the ones that have been posed on the
You are not expected to be familiar with material in "Further Reading"
You will not be asked questions that only relate to the tiger language
used as an example in the textbook.
For the symbol table implementation in Chapter 5, you may
(and this is actually recommend) instead discuss the
implementation described in Supplementary Notes for DM546.
Note that this is what we did in the lecture.
With regards to Chapters 7-9, you will not be asked to account for
translations into the tree format described in the book. Use the
code generation templates as your starting point,
as described in Supplementary Notes for DM546,
and use the chapters for details regarding how
you treat issues not specified in the templates. For functions
in particular, use the templates in combination with the stack frame
and the examples of how factorial, for instance, is implemented