Kompilatorer och interpretatorer
(gamla kursen)
för Dataingenjörsprogrammet m fl
måndag 5 november 2012
Gäller som tentamen för:
DT3004 Datateknik C, Kompilatorer och interpretatorer, provkod 0100
Hjälpmedel: | Inga hjälpmedel. |
Poängkrav: |
Maximal poäng är 37.
För godkänt betyg (3 respektive G) krävs 18 poäng. |
Resultat: | Meddelas på kursens hemsida eller via e-post senast måndag 26 november 2012. |
Återlämning av tentor: | Efter att resultatet meddelats kan tentorna hämtas på universitetets centrala tentamensutlämning. |
Examinator och jourhavande: | Thomas Padron-McCarthy, telefon 070 - 73 47 013. |
b) (3p) Förklara och visa med exempel vad som menas med FIRST()-konflikter, och på vilket vis de kan vara ett problem. Hur kan man lösa problemet? Visa med exempel!
c) (3p) Förklara och visa med exempel vad som menas med en tvetydig grammatik, och på vilket vis det kan vara ett problem. Hur kan man lösa problemet? Visa med exempel!
b) Visa med ett exempel hur man skriver en prediktiv recursive-descent-parser. Skapa först ett språk, beskriv det språket, och skriv sedan en parser för det.
a = b; c = 17; while (x < 19) { x = x + b - c - 1; if (c > 0) c = c - 1; r = r + 2 * b; } |
Översätt ovanstående programavsnitt till två av följande tre typer av mellankod.
a) ett abstrakt syntaxträd (genom att rita upp trädet!)
b) postfixkod för en stackmaskin
c) treadresskod
Observera: Det finns tre deluppgifter i uppgiften ovan. Välj ut och besvara (högst) två av dessa. (Skulle du svara på alla tre, räknas den med högst poäng bort.) |
b) Flera olika typer av optimeringar kan göras på koden inuti ett enskilt basic block. Vilka? Beskriv dem, och använd treadresskod för att ge exempel på hur de fungerar.