Oversættere, ugeopgave 3

Relaterede dokumenter
Noter til DM517 Beregnelighed

Skriftlig Eksamen Beregnelighed (DM517)

Oversættere Skriftlig eksamen onsdag d. 24. januar 2007

Datastrukturer (recap)

Datastrukturer (recap)

Ja! det beviste vi uge 16+17

Datastrukturer (recap) Datastruktur = data + operationer herpå

Oversættere. Vejledende løsninger til Skriftlig eksamen onsdag d. 18. april 2007

Oversættere. Vejledende løsninger til Skriftlig eksamen onsdag d. 20. april 2005

Algoritmer og datastrukturer Course No Cheat Sheet May 15, 2012

Syntaks og syntaksgenkendelse, særligt regulære udtryk og tilstandsmaskiner og lidt om anvendelser i bioinformatik

Oversættere Skriftlig eksamen onsdag d. 19. april 2006

Eksamensopgaver i DM17, Januar 2003

DATALOGI 1E. Skriftlig eksamen torsdag den 3. juni 2004

Binære søgetræer. Binære søgetræer. Nærmeste naboer. Nærmeste nabo

Regularitet & Automater Eksamensnotater

DM507 Algoritmer og datastrukturer

Mindste udspændende træ. Mindste udspændende træ. Introduktion. Introduktion

Regulære udtryk og endelige automater

Mindste udspændende træ

Skriftlig eksamen i Datalogi

Oversættere Vejledende løsninger til Skriftlig eksamen onsdag d. 24. januar 2007

Definition : Et træ er en sammenhængende ikke-orienteret graf uden simple kredse. Sætning : En ikke-orienteret graf er et træ hvis og kun hvis der er

Introduktion til datastrukturer. Introduktion til datastrukturer. Introduktion til datastrukturer. Datastrukturer

Abstrakte datatyper C#-version

Træer. Datastrukturer & Algoritmer, Datalogi C Forelæsning 9/

It og informationssøgning Forelæsning november 2006 Nils Andersen. Regulære udtryk og formelle sprog

Søgetræer: Generel repræsentation af (sorterede) mængder og funktioner Databasesystemer...

Datastrukturer. Datastruktur = data + operationer herpå

Introduktion til datastrukturer. Introduktion til datastrukturer. Introduktion til datastrukturer. Datastrukturer

GESA, et GEnerelt System til Analyse af naturlige sprog, udformet som et oversætter-fortolker system med virtuel mellemkode

Datastrukturer. Datastruktur = data + operationer herpå

Ugens emner. Regulære sprog og digitale billeder. Adressering af områder. Et alfabet. Dette billede: kan repræsenteres af en FA med 832 tilstande

Introduktion til datastrukturer

Introduktion til datastrukturer. Philip Bille

Mindste udspændende træ. Mindste udspændende træ. Introduktion. Introduktion

Åben uddannelse, Efterår 1996, Oversættere og køretidsomgivelser

DM507 Algoritmer og datastrukturer

Målet for disse slides er at diskutere nogle metoder til at gemme og hente data effektivt.

02105 Eksamensnoter. Lasse Herskind S maj Sortering 3

Binære søgetræer. Nærmeste naboer Binære søgetræer Indsættelse Predecessor og successor Sletning Trægennemløb. Philip Bille

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

Orienterede grafer. Orienterede grafer. Orienterede grafer. Vejnetværk

Oversættere Skriftlig eksamen onsdag d. 20. april 2005

Prioritetskøer. Prioritetskøer Træer og hobe Repræsentation af hobe Algoritmer på hobe Hobkonstruktion Hobsortering. Philip Bille

BRP Tal. Om computer-repræsentation og -manipulation. Logaritmer

DM517:Supplerende noter om uafgørlighedsbeviser:

Forelæsning Uge 4 Torsdag

Forelæsning Uge 4 Torsdag

Målet for disse slides er at beskrive nogle algoritmer og datastrukturer relateret til at gemme og hente data effektivt.

DM507 Algoritmer og datastrukturer

En karakteristik af de regulære sprog. Ugens emner. FA minimering [ ] MyHill-Nerode-sætningen en algoritme til minimering af FA er

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Danmarks Tekniske Universitet

Regulære udtryk og endelige automater. Ugens emner

Skriftlig Eksamen Algoritmer og Datastrukturer (DM507)

Regularitet og Automater. Tobias Brixen Q4-2012

Danmarks Tekniske Universitet

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: 23n log n. 4 n (log n) log n

Skriftlig Eksamen Algoritmer og Datastrukturer (DM507)

Grundlæggende køretidsanalyse af algoritmer

Hashing og hashtabeller

DM507 Algoritmer og datastrukturer

Prioritetskøer. Prioritetskøer. Prioritetskøer. Prioritetskøer

Hashing og hashtabeller

22 Hobe. Noter. PS1 -- Hobe. Binære hobe. Minimum-hob og maximum-hob. Den abstrakte datatype minimum-hob. Opbygning af hobe. Operationen siv-ned.

Skriftlig eksamen i Datalogi

Rolf Fagerberg. Forår 2013

Grådige algoritmer. Et algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Dat 2/F6S: Syntaks og semantik 2005 Centrale emner og eksamenspensum

Om at løse problemer En opgave-workshop Beregnelighed og kompleksitet

Rekursion og dynamisk programmering

DM507 Algoritmer og datastrukturer

Orienterede grafer. Orienterede grafer. Orienterede grafer. Orienterede grafer

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: 4 n n 3n n 2 /logn 5 n n (logn) 3n n 2 /logn 4 n n 5 n

DM507 Algoritmer og datastrukturer

Rolf Fagerberg. Forår 2015

Rolf Fagerberg. Forår 2015

Danmarks Tekniske Universitet

Stakke, køer og lidt om hægtede lister - kapitel 16 og 17

Prioritetskøer og hobe. Philip Bille

Binære søgetræer. Binære søgetræer. Nærmeste naboer. Nærmeste nabo

Tilgang til data. To udbredte metoder for at tilgå data: Sekventiel tilgang Random access: tilgang via ID (også kaldet key, nøgle) for dataelementer.

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen (bemærk at log n betegner totals logaritmen): n 2 (log n) 2 2.

Danmarks Tekniske Universitet

DM507 Algoritmer og datastrukturer

Sortering. Eksempel: De n tal i sorteret orden

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: n 2 n (log n) 2. 3 n /n 2 n + (log n) 4

Introduktion til DM507

Prioritetskøer. Prioritetskøer. Prioritetskøer. Prioritetskøer

Hashing. Ordbøger Hægtet hashing Hashfunktioner Lineær probering. Philip Bille

Hashing. Hashing. Ordbøger. Ordbøger. Ordbøger Hægtet hashing Hashfunktioner Lineær probering. Ordbøger Hægtet hashing Hashfunktioner Lineær probering

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

DM507 Algoritmer og datastrukturer

Rolf Fagerberg. Forår 2012

DM507 Algoritmer og datastrukturer

Hashing. Ordbøger Hægtet hashing Hashfunktioner Lineær probering. Philip Bille

Punktmængdetopologi. Mikkel Stouby Petersen. 1. marts 2013

Stakke, køer og lidt om hægtede lister

Orienterede grafer. Introduktion Repræsentation Søgning Topologisk sortering og DAGs Stærke sammenhængskomponenter Implicitte grafer.

Transkript:

Oversættere, ugeopgave 3 Anders jerg Pedersen (andersbp@me.com) 29. november 2009 Opgave 1 Vi konsrer først NFA er for grammatikken fra opgave 3.22 med produktionen tilføjet: Produktion NFA 0 A 1 C D 2 E F 3 G H I J 4 K L M N 5 O P Q Vi tilføjer nu ε-transitioner til de states, der har en nonterminal som overgang: Tilstand A G I K M P ε-transition Vi anvender nu den sædvanlige algoritme til at konsre en DFA ud fra vores NFA er og ε-transitionerne (vi medtager ikke alle detaljer, da vi jo har prøvet det her en gang eller to før...). Vi har: s 0 = ε-closure({a}) = {A, C, E, G, K, D} move(s 0, ) = ε-closure({d}) = {D} = s 1 move(s 0, ) = ε-closure({f }) = {F } = s 2 move(s 0, ) = ε-closure({, H, L}) = {, H, L} = s 3 move(s 0, ) = ε-closure({p }) = {P, C, E, G, K, O} = s 4 1

Det er uinteressant at se på moves fra s 1 og s 2, da der ingen er (begge er accepterende tilstande uden ε-transitioner). move(s 3, ) = ε-closure({i}) = {I, C, E, G, K, O} = s 5 move(s 3, ) = ε-closure({m}) = {M, C, E, G, K, O} = s 6 move(s 4, ) = ε-closure({d}) = {D} = s 1 move(s 4, ) = ε-closure({f }) = {F } = s 2 move(s 4, ) = ε-closure({h, L, Q}) = {H, L, Q} = s 7 move(s 4, ) = ε-closure({p }) = {P, C, E, G, K, O} = s 4 move(s 5, ) = ε-closure({d}) = {D} = s 1 move(s 5, ) = ε-closure({f }) = {F } = s 2 move(s 5, ) = ε-closure({j, H, L}) = {J, H, L} = s 8 move(s 5, ) = ε-closure({p }) = {P, C, E, G, K, O} = s 4 move(s 6, ) = ε-closure({d}) = {D} = s 1 move(s 6, ) = ε-closure({f }) = {F } = s 2 move(s 6, ) = ε-closure({h, L, N}) = {H, L, N} = s 9 move(s 6, ) = ε-closure({p }) = {P, C, E, G, K, O} = s 4 move(s 7, ) = ε-closure({i}) = {I, C, E, G, K, O} = s 5 move(s 7, ) = ε-closure({m}) = {M, C, E, G, K, O} = s 6 move(s 8, ) = ε-closure({i}) = {I, C, E, G, K, O} = s 5 move(s 8, ) = ε-closure({m}) = {M, C, E, G, K, O} = s 6 move(s 9, ) = ε-closure({i}) = {I, C, E, G, K, O} = s 5 move(s 9, ) = ε-closure({m}) = {M, C, E, G, K, O} = s 6 2

Vores seks accepterende tilstande er F = {s 1, s 2, s 3, s 7, s 8, s 9 }, hvilket giver os følgende trivielle DFA: s 1 s 0 s 2 s 5 s 8 s 3 s 6 s 9 s 4 s 7 Vi tilføjer nu produktionen $ og beregner F OLLOW for vores to nonterminaler: F OLLOW ( ) F OLLOW () F OLLOW ( ) = {$} F OLLOW () = {$,, } Vi kan nu konsre vores SLR-tabel og starter med at tilføje shifts på alle vores terminal-moves fra DFA en og gos på alle vores nonterminal-moves. Derefter tilføjer vi reduces ud fra vores F OLLOW -mængder ovenfor og reglen på side 93 i bogen: DFA-tilstand f alse $ 0 s1 s2 s4 g3 1 r1 r1 r1 2 r2 r2 r2 3 s5 s6 a 4 s1 s2 s4 g7 5 s1 s2 s4 g8 6 s1 s2 s4 g9 7 s5/r5 s6/r5 r5 8 s5/r3 s6/r3 r3 9 s5/r4 s6/r4 r4 Det ses nu, at der er seks konflikter, der skal løses via de givne præcedensregler fra opgave 3.22: 3

{ s5 / r5 : () Tilstand 7: s6 / r5 : () Vi vælger altså et reduce i stedet for et shift i begge tilfælde. { s5 / r3 : ( ) Tilstand 8: s6 / r3 : ( ) Vi vælger altså et shift i stedet for et reduce i begge tilfælde. { s5 / r4 : ( ) Tilstand 9: s6 / r4 : ( ) Vi vælger altså et reduce i første tilfælde og et shift i andet tilfælde. Dermed bliver vores færdige SLR-tabel som følger: Opgave 2 DFA-tilstand f alse $ 0 s1 s2 s4 g3 1 r1 r1 r1 2 r2 r2 r2 3 s5 s6 a 4 s1 s2 s4 g7 5 s1 s2 s4 g8 6 s1 s2 s4 g9 7 r5 r5 r5 8 s5 s6 r3 9 r4 s6 r4 Mit yndlingssprog er selvfølgelig Java 1. Her er der mulighed for forskellige datastrukturer til brug, når man skal konsre en dictionary. Standarden er et Map, der indeholder key-value par. Et Map har selfølgelig en constructor til at lave en ny tom symboltabel (og metoden Map.isEmpty() til at finde ud af, om tabellen er tom), samt (blandt andet) metoderne Map.put(K key, V value) (til at lave en ny binding, der erstatter den gamle) og Map.get(Object key) (til at slå op i vores dictionary - metoden returnerer NULL, hvis der intet findes). For at håndtere forskellige scopes kan vi for eksempel anvende en stak som beskrevet i afsnit 4.2.3 i bogen. Til dette formål har Java også en direkte implementation af en stak, i form af klassen Stack. Vores Stack skal så bruges til at holde på markører for scopeændringer samt de oprindelige bindings, der skal reetableres efter vi kommer tilbage til et ældre scope. Her kan vi anvende Map.containsKey(Object key) til at afgøre, om vi skal skifte scope. (eller har jeg FULDSTÆNDIG misforstået opgaven?!!) Opgave 3 Den her opgave er da godt nok også kryptisk formuleret. Som jeg har forstået den, så bliver man bedt om at vise, hvordan EN semi-persistent dictionary kan bruges til 1 Se evt. API en på http://java.sun.com/javase/6/docs/api/ 4

at opbygge en symboltabel for et programmeringssprog med almindelige scoping-regler og static binding. Men det er jo præcis, hvad der bliver beskrevet i afsnit 4.2.3?!! Den skitserede semi-persistente dictionary givet i opgaven er altså fuldstændig irrelevant...? Opgave 4 a) Professor Juniper har sandsynligvis omskrevet til Chomsky normalform for at kunne lægge en øvre grænse på den tid det vil tage at parse en given tekststreng af længde n. Chomsky normalform har nemlig den egenskab, at dens syntakstræer er balancerede binære søgetræer. Denne datastruktur har den gode egenskab, at den længste vej til enhvert blad (som i Chomsky vil være en terminal) er af længde O(lg t). Derfor vil parsing af en streng af længde n kunne parses i O(n lg t). 2 b) Som beskrevet ovenfor er køretiden O(n lg t) for en parsing realistisk indenfor antagelsen om, at terminaler kan bearbejdes (hvad en der så ligger i det) i konstant tid. Ulempen ved at omdanne en grammatik til Chomsky normalform bør dog være, at antallet af produktioner og nonterminaler kan stige kraftigt. Nu vides det ikke, hvad der ligger i den preprocessing, der tager O(t 2 vp) tid, men den vil være forholdsvist irrelevant, da den øjensynligt kun foregår, når compileren oversættes ikke hver gang der parses en tekststreng. Da antallet af terminaler jo ikke ændres, samt at vi ved fra sidste ugeopgave, at en LL(1)-parser kan køre i lineær tid, er tidsgrænserne sandsynligvis realistiske. 2 Desuden har Chomsky normalformer den fordel, at de kun kan beskrive kontekstfrie grammatikker og omvendt. At Professor Juniper har omskrevet Mr. Olsens grammatik til en sådan beviser altså, at den er kontekstfri. 5