Kompilatorer och interpretatorer
för Dataingenjörsprogrammet m fl
lördag 6 december 2014
Gäller som tentamen för:
DT3030 Datateknik C, Kompilatorer och interpretatorer, provkod 0100
Hjälpmedel: | Inga hjälpmedel. |
Poängkrav: |
Maximal poäng är 43.
För godkänt betyg krävs totalt minst 24 poäng, varav minst 8 poäng på uppgift 1. |
Resultat: | Meddelas på kursens hemsida eller via e-post senast lördag 27 december 2014. |
Å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. |
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
Visa tydliga exempel, med programkod och förklaringar, på fel som kommer att upptäckas:
a) av preprocessorn
b) av scannern
c) av parsern
d) av den semantiska analysen
e) av länkaren
f) vid körningen av programmet
x = 7; y = 6; while (x < y) { z = x + y; while (x < z) { x = x + 5; t = t - x * 4 - 3; } }Översätt ovanstående programavsnitt till var och en av följande tre typer av mellankod.
a) ett syntaxträd, även kallat abstrakt syntaxträd (genom att rita upp trädet!)
b) postfixkod för en stackmaskin
En användare som ska arbeta med ett dataobjekt i databasen låser det objektet, och om någon annan användare vill arbeta med samma dataobjekt, måste den andra användaren vänta tills de första användaren låser upp objektet.
Vi ska skriva programmet Locksim som simulerar låsning. Dataobjekten i databasen är variabler och har namn som X och kalle22. Man kan läslåsa ett dataobjekt med kommandot ReadLock, till exempel ReadLock(X), och man kan skrivlåsa ett dataobjekt med kommandot WriteLock, till exempel WriteLock(kalle22), Dessutom kan man låsa upp ett dataobjekt med kommandot Unlock.
Det finns redan en Bison-grammatik för inmatningen till programmet:
%token TRANSACTION READ WRITE ID LOCK READLOCK WRITELOCK UNLOCK %% scenario : transactions ; transactions : transaction transactions | /* empty */ ; transaction : TRANSACTION ID '{' commands '}' ; commands : command commands | /* empty */ ; command : READ '(' ID ')' ';' | WRITE '(' ID ')' ';' | LOCK '(' ID ')' ';' | READLOCK '(' ID ')' ';' | WRITELOCK '(' ID ')' ';' | UNLOCK '(' ID ')' ';' ; %%
Förklara för var och en av dem kort (en eller två meningar) vad det är, och om vi kan ha någon nytta av den när vi skriver programmet Locksim. Motivera svaren, dvs förklara antingen hur vi kan ha nytta av tekniken, eller varför vi inte kan det.
a) stackmaskin
b) copy propagation
c) eliminering av svansrekursion
d) Flex
e) mark-sweep