Slides til 12.1 Formelt språk og formell grammatikk Andreas Leopold Knutsen April 6, 2010
Introduksjon Grammatikk er studiet av reglene som gjelder i et språk. Syntaks er læren om hvordan ord settes sammen til større enheter, dvs. setninger og fraser. Semantikk er den grenen av språkvitenskapen som studerer ordenes betydning, både enkeltvis og i sammenstilte strukturer (setninger). Vårt mål er syntaktisk korrekthet (ikke semantisk). Naturlig språk er ekstremt komplisert. Formelt språk er bestemt av en veldenert (gjerne endelig) mengde av syntaktiske regler. Programmeringsspråk er formelle språk.
Syntaktiske kategorier Substantiv (SUB) Adjektiv (ADJ) Artikkel (ART) Verb (V) Adverb (ADV) En frase er i grammatikken en gruppe ord som fungerer som en enkelt enhet i en setnings syntaks. Nominalfrase fungerer som et substantiv. (Eks: En ganske snill mann) Verbalfrase fungerer som et verb. (Eks: springer veldig fort)
Grammatikk, uformelt En setning består av en nominalfrase og en verbalfrase. En nominalfrase består av en artikkel etterfulgt av et substantiv, muligens med et adjektiv imellom. En verbalfrase består av et verb, muligens etterfulgt av et adverb. Et substantiv er student eller foreleser. Et adjektiv er ittig eller trett. En artikkel er en. Et verb er leker eller sover. Et adverb er dypt eller best.
Eksempel på gyldig setning med denne grammatikken setning nominalfrase verbalfrase artikkel adjektiv substantiv verbalfrase artikkel adjektiv substantiv verb adverb En adjektiv substantiv verb adverb En trett substantiv verb adverb En trett foreleser verb adverb En trett foreleser sover adverb En trett foreleser sover dypt Også mulig: En ittig student leker best. En student leker dypt. Ikke mulig: Flittig leker dypt.
Grammatikk, formelt S NF VF NF ART SUB, NF ART ADJ SUB, VF V, VF V ADV SUB student, SUB foreleser ADJ ittig, ADJ trett ART en V leker, V sover ADV dypt, ADV best Å generere en setning: S NF VF ART ADJ SUB V ADV en trett foreleser sover dypt Trestruktur på tavlen
Denisjoner i formell språkteori Et alfabet (eller vokabular) V er en endelig, ikketom mengde. Elementene i V kalles symboler. Et ord (eller en setning ) over V er en streng av endelig lengde av elementer i V, inkludert den tomme strengen/nullstrengen λ uten symboler V = mengden av alle ord over V. Et språk over V er en delmengde L V.
I vårt eksempel: V = {S, NF, VF, ART, ADJ, SUB, V, ADV, en, foreleser, student, trett, ittig, leker, sover, dypt, best} en trett foreleser sover dypt er et element i V. Men også ittig ADV ART er et element i V. Vi ga i tillegg regler for å generere setninger ved at symboler fra delmengden N = {S, NF, VF, ART, ADJ, SUB, V, ADV } V kunne erstattes med symboler fra seg selv eller fra delmengden T = {en, foreleser, student, trett, ittig, leker, sover, dypt, best} V Reglene var på formen w 1 w 2, der w 1 N og w 2 V.
Frasestrukturgrammatikk En frasestrukturgrammatikk G = (V, T, S, P) består av: Et vokabular/alfabet V. En delmengde T V, hvis elementer kalles terminale. (Elementene i komplemementet N = V T kalles ikketerminale eller variable.) Et element S V, kalt startsymbol. En endelig mengde P av regler, kalt produksjoner, for å erstatte et symbol i en streng over V med et annet symbol. Skrives som w 1 w 2, der w 1, w 2 V. Krav: enhver produksjon må inneholde minst ett element fra N på sin venstre side.
I vårt eksempel igjen: N = {S, NF, VF, ART, ADJ, SUB, V, ADV } V T = {en, foreleser, student, trett, ittig, leker, sover, dypt, best} V S er startelement P = {S NF VF, NF ART SUB, NF ART ADJ SUB, VF V, VF V ADV, SUB student, SUB foreleser, ADJ ittig, ADJ trett, ART en, V leker, V sover, ADV dypt, ADV best}
Variasjon... Vi kan også ha produksjoner som ikke er på formen ikketerminal streng av symboler Hvis vi f.eks. ønsker at adjektivet trett kun skal brukes for en student og ittig kun skal brukes for en foreleser kan vi bytte ut med ADJ ittig, ADJ trett ADJ foreleser ittig foreleser, ADJ student trett student Grammatikken går fra å være kontekstfri til kontekstsensitiv (mer om dette senere).
Backus-Naur form for produksjonene ::= for for alternativer ikketerminale elementer i klammer I vårt eksempel kan produksjonene skrives som S ::= NF VF NF ::= ART SUB ART ADJ SUB VF ::= V V ADV ART ::= en ADJ ::= trett ittig SUB ::= student foreleser V ::= leker sover ADV ::= dypt best
Avledninger/derivasjoner Hvis z 0 z 1 er en produksjon, z 0, z 1 V, kan vi f.eks. erstatte strengen w 0 = lz 0 r med w 1 = lz 1 r Vi skriver w 0 w 1 og sier at w 1 er direkte avledbar/avledet/derivérbar fra w 0 Dersom w 0 w 1, w 1 w 2,..., w n 1 w n for w 0, w 1..., w n V, sier vi at w n er (indirekte) avledbar/avledet/derivérbar fra w 0 og skriver w 0 wn Sekvensen w 0 w 1, w 1 w 2,..., w n 1 w n kalles en avledning/derivasjon Språket generert av/språket til grammatikken G er denert som L(G) = {w T S w} V (alle strenger av terminale objekter som er avledbare fra startsymbolet S) NB: Forskjellige grammatikker kan generere samme språk (se Eks. 6 og Oppg. 10 i 12.1)
I vårt eksempel igjen: En trett foreleser sover dypt L(G) En trett foreleser V ADV L(G) Flittig leker dypt L(G) Men alle disse er elementer i V, dvs. ord (strenger) over V.
Nye eksempler (endelig!) V = {S, A, B, a, b}, med T = {a, b}, og S er startsymbol. Eksempel 1: P = {S AB, S aa, A a, B ba}. Da er L(G) = {aba, aa}. Eksempel 2: P = {S AA, S B, A aaa, A aa, B bb, B b}. Da er L(G) = {a 2n n Z, n 2} {b m m Z, m 1}. På tavlen: derivasjonstre for a 6
Eksempel på syntaksanalyse Syntaksanalyse = parsing = skille mellom lovlige og ulovlige uttrykk. Eksempel: G = (V, T, S, P) V = {a, b, c, A, B, C, S} T = {a, b, c} P = { S ::= A B, A ::= C a, B ::= B a C b b, C ::= cb b} Oppgave (vises på tavlen): (a) Vis at cbaba L(G) (b) Vis at bbbcba L(G)
Kontekstfrie grammatikker Kontekstfri grammatikk: alle produksjonene er på formen A w, der A N og w V. Kalles også grammatikk av type II. Et språk som kan genereres av en kontekstfri grammatikk kalles et kontekstfritt språk. Alle eksemplene hittil (bortsett fra variasjonen) har vært slik. Men det nnes grammatikker og språk som ikke er kontekstfrie, se neste side.
Eksempel 7 -Oppgave 12 i 12.1 G = (V, T, S, P) V = {0, 1, 2, S, A, B} T = {0, 1, 2} P = {S 0SAB, S λ, BA AB, 0A 01, 1A 11, 1B 12, 2B 22} (merk trykkfeil i boken) G er ikke kontekstfri grammatikk pga. (hvilken som helst av) de fem siste produksjonene Vises på tavlen hvis tid: L(G) = {0 n 1 n 2 n n N}, med konvensjonen 0 0 1 0 2 0 = λ. Man kan vise at ingen av grammatikkene som genererer språket {0 n 1 n 2 n n N} er kontekstfrie, slik at språket ikke er kontekstfritt.
Kontekstsensitive grammatikker Kontekstsensitiv grammatikk: alle produksjonene er på formen lar lwr, der A N og w, l, r V, w λ. Produksjonen S λ er også tillatt, dersom S ikke forekommer på høyresiden av noen annen produksjon. Kalles også grammatikk av type I. Et språk som kan genereres av en kontekstsensitiv grammatikk kalles et kontekstsensitivt språk.
Tilbake til Eksempel 7 -Oppgave 12 i 12.1 G = (V, T, S, P) V = {0, 1, 2, S, A, B} T = {0, 1, 2} P = {S 0SAB, S λ, BA AB, 0A 01, 1A 11, 1B 12, 2B 22} G er ikke kontekstsensitiv grammatikk pga. produksjonen BA AB og felles forekomst av S λ og S 0SAB. (Her står det feil i Eks. 10 i boken) Likevel er L(G) = {0 n 1 n 2 n n N} et kontekstsensitivt språk fordi det kan genereres av en kontekstsensitiv grammatikk: Bytt ut {S λ, S 0SAB} med {S 0AB, S 0SAB}. Introdusér nytt ikketerminalt symbol C og bytt ut BA AB med {BA CA, CA CB, CB AB}.
Fortsettelse... Vi får den kontekstsensitive grammatikken G = (V, T, S, P ) V = {0, 1, 2, S, A, B, C} T = {0, 1, 2} P = {S 0AB, S 0SAB, BA CA, CA CB, CB AB, 0A 01, 1A 11, 1B 12, 2B 22} Lett å se at L(G ) = L(G) = {0 n 1 n 2 n n N}. Konklusjon: {0 n 1 n 2 n n N} er et et kontekstsensitivt språk, som hevdet i Eks. 10 i boken.