Kompilatorer och interpretatorer: Repetition

Några övningsuppgifter.

Uppgift 1: Faser och pass

Vad är en fas? Vad är ett pass?

Inte svar på frågan, men några inscannade anteckningar som utgör en översikt över kursen, med kompilatorns viktiga delar:
Bild (Stor)

Uppgift 2: Symboltabell

Beskriv hur en symboltabell i princip, oberoende av representation, hanterar:

a) Variabeldeklaration,

b) Variabelanvändning,

c) Påbörjande av nytt block,

d) Avslutande av aktuellt block.

Uppgift 3: Top-downparsning

När man ska anpassa en grammatik för recursive-descentparsning finns det två speciellt viktiga transformationer som utförs.

a) Namnge och definiera transformationerna. Definitionerna skall vara generella - inte bara illustrerade genom exempel.

b) Vilka problem är det man vill undvika genom att göra dessa transformationer? Förklara vad som händer i parsern om man inte gör dem, gärna med konkreta exempel.

Inte svar på frågan, men några inscannade anteckningar om eliminering av vänsterrekursion:
Bild 1 (Stor) | Bild 2 (Stor) | Bild 3 (Stor)
Och om vänsterfaktorisering:
Bild (Stor)

Uppgift 4: Mellankodsgenerering

if (a + b == 0)
    while (x < y) {
        x = x + c;
        y = y - c;
    }
else
    a = - b;
a) Översätt ovanstående programavsnitt till ett abstrakt syntaxträd.

b) Översätt ovanstående programavsnitt till postfixnotation.

c) Översätt ovanstående programavsnitt till treadresskod.

Svar på frågan:
Bild (Stor)

Uppgift 5: Syntaxstyrd översättning

Ge en grammatikregel för en if-sats i ett högnivåspråk.

Skapa ett syntaxstyrt översättningsschema, med produktioner och semantiska regler, för översättning av if-satsen till treadresskod. Antag att översättningsschemat ska implementeras i bottom-up-parsningmiljö med en stack, som i Yacc och Bison. Utgå från din grammatikregel ovan, som dock kanske måste modifieras. Förklara införda attribut och eventuella funktioner och instruktioner som används. Ange alla dina antaganden.

Inte ett fullständigt svar på frågan, men några inscannade anteckningar:
Bild (Stor)

Uppgift 7: Kodoptimering

a) Vad är en loop?

b) Vilka vanliga sätt finns för att optimera just loopar? Använd kodexempel.

Inte ett fullständigt svar på frågan, men några inscannade anteckningar om loopar och loopoptimering:
Bild (Stor)


Thomas Padron-McCarthy (Thomas.Padron-McCarthy@oru.se) 11 oktober 2007