Københavns Universitet Naturvidenskabelig Embedseksamen Oversættere Vejledende løsninger til Skriftlig eksamen onsdag d. 20. april 2005 Eksamenstiden er to timer. Opgavernes vægt i procent er angivet ved hver opgave. Den skriftlige eksamen i Oversættere er bestået, hvis minimum 50% af opgaven er besvaret tilfredsstillende, eller en proportionalt større del er løst delvist tilfredsstillende. Hver opgaves vægt i procent er angivet ved opgavens start. Ligeledes er de enkelte spørgsmåls andel i denne vægt angivet. Alle de sædvanlige hjælpemidler må benyttes, herunder også lydløse elektroniske lommeregnere og PDA ere (f.eks. Palm Pilot), dog ikke hvis disse har trådløs netadgang eller telefoni. En almindelig bærbar PC vil ikke være tilstrækkelig lydløs p.g.a. blæser, harddisk og støjende tastatur. I tvivlstilfælde gælder eksamensvagtens afgørelse. Det er tilladt at bruge blyant til besvarelsen, såfremt denne er tydeligt læselig.
Vejledende løsning til skriftlig eksamen april 2005 i Oversættere side 1 af 7 Opgave 1: Grammatikker og regulære udtryk (23%) Betragt følgende grammatik G: Spørgsmål 1.1 (5%) A B A C B B B C C C Vis at G er tvetydig ved at finde en tegnfølge med to forskellige syntakstræer. Vis syntakstræerne. Den tomme tegnfølge har to forskellige syntakstræer: A B ε A C ε Spørgsmål 1.2 (8%) Find Nullable, FIRST og FOLLOW for hver nonterminal i G. Husk at behandle $ (EOF).
Vejledende løsning til skriftlig eksamen april 2005 i Oversættere side 2 af 7 Vi tilføjer en ekstra startproduktion: A A$. Derefter ses resultatet let: Spørgsmål 1.3 (5%) Eliminer venstrerekursion fra G. Nullable FIRST FOLLOW A true {, } {$} B true { } {, $} C true { } {, $} Der er venstrerekursion i produktionerne for B, som vi omskriver til: B B De andre produktioner er uændrede. Spørgsmål 1.4 (5%) B B B Lav et regulært udtryk, der genkender samme sprog som G. ( )
Vejledende løsning til skriftlig eksamen april 2005 i Oversættere side 3 af 7 Opgave 2: Endelige automater (15%) Vi betragter følgende sprog L: mængden af tegnfølger over alfabetet {a, b, c}, hvor der ikke er gentagne tegn (dvs. at hvert af tegnene a, b og c forekommer højst én gang hver). Spørgsmål 2.1 (3%) Vis fire eksempler på tegnfølger i L. abc ca ε b Spørgsmål 2.2 (12%) Lav en minimal DFA for sproget L, og argumenter for at den er minimal. Vink: Hold styr på brugte tegn. Vi har en tilstand for hver delmængde af mængden {a, b, c}: a b ab a c c b a b ac b abc c c c a a bc b Alle tilstandene er accepterende, da der ikke er krav om et minimalt antal tegn. Da vi skal vide præcis hvilke tegn, vi har brugt, er det nødvendigt med en tilstand for hver delmængde. Derfor er DFA en minimal.
Vejledende løsning til skriftlig eksamen april 2005 i Oversættere side 4 af 7 Opgave 3: Regulære sprog og udtryk (12%) Klassen af regulære sprog er afsluttet under fællesmængde og mængdedifferens, dvs. at fællesmængden af to regulære sprog er regulært og mængdedifferensen mellem to regulære sprog er regulært. Man kan derfor udvide regulære udtryk med operatorer for fællesmængde og mængdedifferens. Angiv fordele og ulemper ved at udvide regulære udtryk med disse konstruktioner. Læg vægt på konsekvenser for brug af regulære udtryk til lexergenerering. Metoden til konstruktion af NFA-fragmenter fra regulære udtryk kan ikke udvides til fællesmængde eller mængdedifferens, da man ikke kan sammensætte NFA er for to sprog til en NFA for fællesmængden eller mængdedifferensen af disse. Derfor må man bruge mere komplicerede metoder, hvilket er en ulempe. En fordel er, at man nemmere kan udtrykke sprog såsom alle variabelnavne, der ikke er nøgleord eller heltalskonstanter, der er delelige med både 3 og 7. Sidstnævnte er dog sjældent relevant i oversættere. En ulempe er, at man kan lave regulære udtryk, som er svære at gennemskue.
Vejledende løsning til skriftlig eksamen april 2005 i Oversættere side 5 af 7 Opgave 4: Mellemkodegenerering (35%) Vi udvider Grammar 6.7 fra Basics of Compiler Design med følgende produktioner: Cond orderedby relop IdList IdList id IdList id, IdList Semantikken er, at betingelsen er sand, hvis hvert par af to efterfølgende variabler i listen af variabler er ordnede med den angivne relationelle operator. For eksempel er orderedby < x,y,z sand, hvis x<y og y<z. Sammenligningerne foretages fra venstre mod højre (så i eksemplet ovenfor skal sammenligningen x<y foretages før y<z). Sammenligningerne skal stoppes, så snart en af dem er falsk (idet den samlede betingelse dermed bliver falsk). I eksemplet ovenfor skal sammenligningen y<z altså ikke foretages, hvis x<y er falsk. Hvis der kun er én variabel i listen, er betingelsen altid sand. Spørgsmål 4.1 (10%) Vis (håndgenereret) mellemkode for orderedby < x,y,z, så den ved sand betingelse hopper til Ltrue og ved falsk betingelse hopper til Lfalse. Brug mellemkodevariabler med samme navne som de oprindelige variabler (dvs. x, y og z) plus eventuelt ekstra temporære variabler. IF x<y THEN L1 ELSE Lfalse LABEL L1 IF y<z THEN Ltrue ELSE Lfalse Spørgsmål 4.2 (25%) Udvid funktionen Trans Cond fra Figure 6.8 i Basics of Compiler Design, så den kan generere kode for den nye konstruktion. Vink: Tilføj en eller flere oversætterfunktioner for IdList og lav nedarvede attributter for bl.a. den relationelle operator og den foregående variabel.
Vejledende løsning til skriftlig eksamen april 2005 i Oversættere side 6 af 7 Trans Cond (Cond,label t,label f,vtable, ftable) = case Cond of orderedby relop IdList op = transop(opname(relop)) Trans IdList (IdList,op,label t,label f,vtable) Trans IdList (IdList,op,label t,label f,vtable) = case IdList of id [GOTO label t ] id, IdList v = lookup(vtable, name(id)) Trans IdList (IdList,op,v,label t,label f,vtable) Tran s IdList (IdList,op,v,label t,label f,vtable) = case IdList of id w = lookup(vtable, name(id)) [IF vopw THEN label t ELSE label f ] id, IdList w = lookup(vtable, name(id)) label 1 = newlabel() code = Trans IdList (IdList,op,w,label t,label f,vtable) [IF vopw THEN label 1 ELSE label f,label label 1 ] ++code
Vejledende løsning til skriftlig eksamen april 2005 i Oversættere side 7 af 7 Opgave 5: Graffarvning (15%) Betragt følgende interferensgraf: a e b c d Spørgsmål 5.1 (10%) Lav en farvning af grafen med tre forskellige farver (registre). Det er muligt, så hvis du får spill, så prøv at træffe andre valg. Vis stakken som i figur 8.6 og 8.9 i Basics of Compiler Design. e 1 b e 2 d b,e 3 c b,d 1 a b, c, e 3 Spørgsmål 5.2 (5%) Hvis du kun har to farver (registre), hvilken variabel vil du helst spille, og hvorfor? Hvis man fjerner b fra grafen, kan resten af grafen farves med to farver. Hvis man fjerner enhver anden fra grafen, skal der stadig bruges tre farver. Derfor er det oplagt at spille b.