Kompilatorer och interpretatorer
för Dataingenjörsprogrammet m fl
tisdag 21 augusti 2018
Gäller som tentamen för:
DT125G Kompilatorer och interpretatorer, provkod 0100
DT3030 Datateknik C, Kompilatorer och interpretatorer, provkod 0100
Hjälpmedel: | Inga hjälpmedel. |
Poängkrav: |
Maximal poäng är 38
För godkänt betyg krävs totalt minst 21 poäng, varav minst 8 poäng på uppgift 1. |
Resultat: | Meddelas på kursens hemsida eller via e-post senast tisdag 11 september 2018. |
Å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
a) Vad är en fas?
b) Ange vilka faser det är, och beskriv kort vad varje fas är.
include <stdio.h> // error: expected another token before '<' #includdd <string.h> // error: invalid preprocessing directive int main(void) { string s; // error: unknown type name 'string' printf("Hej!); // error: missing terminating " character int i; scanf("%d", i); // warning: format '%d' expects pointer return "OK"; // warning: return makes integer from pointer }
Ö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.)x = 10; while (x != y) { z = z + 20; if (x - y - z < 30) x = (x + y) / 40; else z = 50; } y = 60;
a) ett abstrakt syntaxträd (genom att rita upp trädet!)
b) postfixkod för en stackmaskin
c) treadresskod
Vi ska lagra data om träd och kottar. En kotte har en längd och en vikt. Ett träd har en höjd, och högst tusen kottar.
Vi ska skapa ett språk som beskriver en skog. Skogen innehåller noll eller flera träd, och varje träd har noll eller flera kottar. Här är ett exempel på en inmatning i det språket:
Detta beskriver en skog med två träd: ett träd som är 14.23 meter högt och har två kottar, och ett träd utan några kottar. De två kottarna är 14.2 respektive 13 centimeter långa, och väger 0.12 respektive 0.11 kilo.skog träd 14.23 kotte 14.2 0.12 kotte 13 0.11 slut träd träd 11 slut träd slut skog
Inmatningen ska kunna anges på fritt format, så den här inmatningen är ekvivalent med den ovanstående:
skog träd 14.23 kotte 14.2 0.12 kotte 13 0.11 slut träd träd 11 slut träd slut skog
b) Det står i scenariot att inmatningen ska kunna anges på fritt format, och det visas också en alternativt formaterad inmatning. Hur skiljer sig parse-trädet för denna andra inmatning från parse-trädet för den första?