These lecture notes are my own notes that I made in order to use during the lecture, and it is approximately what I will be saying in the lecture. These notes may be brief, incomplete and hard to understand, not to mention in the wrong language, and they do not replace the lecture or the book, but there is no reason to keep them secret if someone wants to look at them.
Idag: Kodgenerering. Maskinberoende optimering.
Många av de tekniker som behandlas i kursen,
t ex för syntaxspecifikation och parsning,
är användbara även utanför rena kompilatorer.
Just kodgenerering är dock något som man förmodligen inte kommer
i kontakt med, annat än som kompilatorutvecklare.
Kodgenerering är kanske inte heller en del av kompilatorn som man har så stor nytta av att förstå i sitt arbete som programmerare. Därför tar vi bara med så mycket om kodgenerering som vi hinner. |
Input: intermediate code, often three-address code, but can also be e. g. syntax trees.
Several types of target code:
What the code generator does:
x = y + z; |
Use a template:
MOV y,R0 -- Load y into register R0
ADD z,R0 -- Add z to register R0 MOV R0,x -- Store R0 into x |
Example 2, more three-address instructions:
a = b + c;
d = a + e; |
Using the same template:
MOV b,R0
ADD c,R0 MOV R0,a MOV a,R0 ADD e,R0 MOV R0,d |
Unneccessary instruction(s).
Example 3, a three-address instruction:
a = a + 1; |
Use a template:
MOV a,R0
ADD #1,R0 -- Add "immediate" constant 1 to R0 MOV R0,a |
Better:
INC a |
Activation records, as in
föreläsning 8.
Here they show the actual target-machine instructions to:
The course Compilers and interpreters | Lectures: 1 2 3 4 5 6 7 8 9 10 11 12