Inte svar på frågan, men några inscannade anteckningar som utgör en översikt över kursen,
med kompilatorns viktiga delar:
Bild
(Stor)
a) Variabeldeklaration,
b) Variabelanvändning,
c) Påbörjande av nytt block,
d) Avslutande av aktuellt block.
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)
a) Översätt ovanstående programavsnitt till ett abstrakt syntaxträd.if (a + b == 0) while (x < y) { x = x + c; y = y - c; } else a = - b;
b) Översätt ovanstående programavsnitt till postfixnotation.
c) Översätt ovanstående programavsnitt till treadresskod.
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)
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)