Det här är ungefär vad jag tänker säga på föreläsningen. Använd det för förberedelser, repetition och ledning. Det är inte en definition av kursinnehållet, och det ersätter inte kursboken.
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:
Kursen Kompilatorer och interpretatorer | Föreläsningar: 1 2 3 4 5 6 7 8 9 10 11 12