Automatateori (2) Idag: Sammanhangsfria språk. Dessa kan uttryckas med Grammatik PDA

Storlek: px
Starta visningen från sidan:

Download "Automatateori (2) Idag: Sammanhangsfria språk. Dessa kan uttryckas med Grammatik PDA"

Transkript

1 Automatateori (2) Idag: Sammanhangsfria språk Dessa kan uttryckas med Grammatik PDA

2 Grammatik = språkregler Ett mer kraftfullt sätt att beskriva språk. En grammatik består av produktionsregler (andra ord för samma sak härledningsregler eller grammatikregler) som beskriver syntaxen (syntax = satslära) för ett språk. Exempel: Alfabet: {a, b} Språket L = {a, ab, abb,...} kan beskrivas med grammaitken G: S a b ε

3 Produktionsträd Förutom att grammatikreglerna kan vara rekursiva har de också en hirarkisk struktur. En härledning med hjälp av dessa är därför väl lämpad att illustreras med hjälp av ett träd. Vår härledning av strängen abb med G ger i följande träd: S vi hade: a S a S a ab b b abb b abb ε b Observera att löven är antingen terminaler eller ε och ickelöven är ickteterminaler ε

4 Produktionen börjar med startsymbolen som roten till det slutgiltiga trädet. S Reglerna: S a b ε Strängen att härleda: abb

5 Därefter expanderas detta med hjälp av någon grammatikregel som har startsymbolen som sitt vänsterled. S Reglerna: S a b ε Strängen att härleda: abb a

6 Var och en av dessa som själv är en icke-terminal kan i sin tur "expanderas" genom att man använder någon passande regel. S a Reglerna: S a b ε Strängen att härleda: abb b

7 Processen fortgår till dess att varje löv är en terminal eller ε. S a Reglerna: S a b ε Strängen att härleda: abb b b

8 Samtidigt försöker man välja regler så att den önskade strängen matchas. S a Reglerna: S a b ε Strängen att härleda: abb b b ε

9 Om man vill kan man rita löven längst ner så blir det mer tydligt vilken sträng man matchar. S Reglerna: S a b ε Strängen att härleda: abb a b b ε

10 ... och ta bort bubblorna kring löven S Reglerna: S a b ε Strängen att härleda: abb a b b ε

11 ... och ε motsvarar ändå ingenting S Reglerna: S a b ε Strängen att härleda: abb a b b

12 Trädet är alltså en representation av ett "program". Reglerna är en "kompilator" som specificerar språket (dvs hur program får se ut). Syftet med trädet är att tydliggöra strukturen i ett program och att visa hur parsningen går till, t.ex. i en top-down parser. S Reglerna: S a b ε Strängen att härleda: abb a b b

13 Definition En grammatik är en kvartupel G = ( N, T, P, s) där N är en ändlig mängd (de icketerminerande symbolerna) T är en ändlig mängd (terminerande symboler) P är en ändlig mängd av produktionsregler a b där a och b är strängar över N T. s är startsymbolen, ett element ur N.

14 Det språk L(G) som G beskriver (producerar) består av de strängar w över T som man med G:s regler kan producera utgående från s Regler för sammanhangsfria språk har alltid endast en icketerminal till vänster om pilen (och inga terminaler). T.ex. S SbSx CFG = Context Free Grammar CFL = Context Free Language

15 Några konventioner från boken Terminaler: gemener från början av alfabetet, a, b, c operator symboler, ex. +,-, etc parenteser, komma, etc. siffor 0, 1,...,9 strängar i fetstil, ex. id, if)

16 Några konventioner från boken (forts) Icketerminaler: versaler tidigt i alfabetet S, som ofta är startsymbol Strängar av gemener i kursiv stil, expr eller stmt Versaler längre bak i alfabetet, X, Y, Z, representerar antingen terminaler eller icke terminaler. Gemener längre bak i alfabetet, u, v,... z, representerar strängar av terminaler. Grekiska gemener, α, β, γ, representerar strängar av terminaler och/eller icke terminaler. Tumregel för sammanhangsfri grammatik: De symboler som förekommer till vänster om någon produktionspil är icke-terminaler, övriga är terminaler (utom ε).) Första regelns vänsterled är vanligen startsymbolen.

17 Övningar (1) Givet = {a, b}, skriv en grammatik som producerar alla strängar som har en första och sista bokstav som är lika. Rita produktionsträdet för strängen abaaa. Givet = {a, b}, skriv en grammatik som producerar alla strängar som är palindromer (dvs rev(s) = s). Rita produktionsträdet för strängen ababa. "E-postspråket": s 2 dvs. en sekvens s 1 av tecken före och en annan sekvens s 2 av tecken efter En sekvens s (alltså s 1 och s 2 ) är en icketom sträng av bokstäver, siffror och punkt, där ingen punkt får finnas först eller sist i s och det inte får förekomma två punkter i rad. Inför någon symbol för att beteckna en mängd av bokstäver. Rita också produktionsträdet för strängen ab@c.d!härled (dvs inte träd utan använd ) strängen a@b@c Om detta lyckas så har du gjort fel, strängen ingår inte i e-postspråket...

18 PDA - Push Down Automat Vi utrustar en finit automat med en stack (en push down lista) som automaten fritt kan skriva och läsa till (enligt stackprincipen LIFO). En PDA tillåts agera ickedeterministiskt (den kan konsumera ε i en tillståndövergång). Vid varje tillståndövergång konsumerar PDA:n en sträng u från input, den popar en sträng β från stacken och skriver en sträng γ till stacken. Var och en av de tre strängarna får vara tom (ε). β och γ får innehålla terminaler och/eller icketerminaler. Grafiskt kan det t.ex se ut:

19 Acceptans: En sträng accepteras av en PDA om PDA:n efter att ha konsumerat strängen befinner sig i ett accepterande tillstånd och stacken är tom. Stacken kan ses som noteringar av vad vi måste kunna se (pga det vi redan sett) därför måste den vara tom för ett korrekt program.

20 Exempel: En PDA för enkelt nästlade parantessträngar:

21 Definition En PDA är en 6-tuple: M = (Q,, Γ, δ, s, F) där Q är en ändlig mängd (tillståndsmängden) är en ändlig mängd (inputalfabetet) Γ är en ändlig mängd (stackalfabetet) δ är en ändlig delmängd (övergångsmängden) av (Q x * x Γ*) x (Q x Γ*) s är ett element ur Q (starttillståndet) F är en delmängd av Q (accepterande tillstånd) För varje CFG finns det en PDA För varje PDA finns det en CFG

22 Övningar (2) Skriv en grammatik för språket av alla välformade parentessträngar {(), ()(), (()), ()()(), (())(), ()(()),...}. Konstruera en PDA för detta språk. Skriv en grammatik för språket där man kan utföra vanlig infix addition mellen ensiffriga tal, och som tillåter proritering med parenteser. Konstruera en PDA för detta språk. Konstruera en PDA för palindromspråket (fundera inte för länge...)