Kompilatorer och interpretatorer
för Dataingenjörsprogrammet m fl
onsdag 9 januari 2019
Gäller som tentamen för:
DT125G Kompilatorer och interpretatorer, provkod 0100
| Hjälpmedel: | Inga hjälpmedel. |
| Poängkrav: |
Maximal poäng är 36.
För godkänt betyg krävs totalt minst 18 poäng. |
| Resultat: | Meddelas på kursens hemsida eller via e-post senast onsdag 30 januari 2019. |
| Återlämning av tentor: | Elektroniskt via Studentforum. |
| Examinator och jourhavande: | Thomas Padron-McCarthy, telefon 070 - 73 47 013. |
A är en icke-terminal, men x och y står för godtyckliga konstruktioner som består av terminaler och icke-terminaler.A -> A x | y
Regeln ersätts av följande två regler (eller, korrektare uttryckt, tre produktioner), som beskriver samma språk men som inte är vänsterrekursiva:
A -> y R R -> x R | empty
A är en icke-terminal, men x, y och z står för godtyckliga konstruktioner som består av terminaler och icke-terminaler.A -> x y | x z
Skriv om till dessa tre produktioner:
A -> x R R -> y | z
while (x > y - z - t) {
if (x < y)
x = y + z * t;
else
x = y * z + t;
x = y * (z + t);
x = (y + z) * t;
}
Översätt ovanstående programavsnitt till två av följande tre typer av mellankod. (Skulle du svara på alla tre, räknas den med högst poäng bort.)
a) ett abstrakt syntaxträd (genom att rita upp trädet!)
b) postfixkod för en stackmaskin
c) treadresskod
Vi ska lagra data om skogar, träd och kottar. Kottarna har längd och vikt. Varje träd har en höjd och noll eller flera kottar. En skog innehåller ett eller flera träd. För att mata in data om skogen behöver vi ett särskilt skogsspråk, där en inmatning kan se ut så här:
skog {
träd 17.9 {
kotte 0.24 0.09;
kotte 0.22 0.11;
kotte 0.22 0.11;
}
träd 13 {
kotte 0.26 0.10;
}
träd 13 { }
}
Denna inmatning beskriver en skog med tre träd: ett träd som är 17.9 meter högt och har tre kottar, ett träd som är 13 meter högt och har en kotte, och ett träd till som också är 13 meter högt, men som inte har några kottar alls. Den första av de angivna kottarna är 0.24 meter lång och väger 0.09 kilo.
Inmatningen ska kunna skrivas på fritt format, som de flesta vanliga programmeringsspråk, till exempel så här:
skog { träd 17.9 { kotte 0.24 0.09; kotte 0.22 0.11; kotte
0.22 0.11; } träd 13 { kotte 0.26 0.10; } träd 13 { } }
b) (2p) Vilka andra terminaler, förutom tal, behövs för att man ska kunna skriva en grammatik för språket?
skog {
träd 7 {
kotte 0.24 0.09;
}
}
b) (1p) Hur skiljer sig ett syntaxträd (ibland kallat "abstrakt syntaxträd") från ett parse-träd?
c) (2p) Rita upp syntaxträdet för inmatningen ovan!