Idag - Mälardalen University Sweden · (syntax = satslära) för ett språk. Exempel: Givet...

23
Idag: Reguljära språk Beskrivs av Reguljära uttryck DFA Grammatik

Transcript of Idag - Mälardalen University Sweden · (syntax = satslära) för ett språk. Exempel: Givet...

Idag:●Reguljära språk Beskrivs av

● Reguljära uttryck ● DFA ● Grammatik

Först några definitioner:Alfabet = en ändlig mängd av tecken. Ex. {0, 1}, {a,b}, {a, b, ..., ö} Betecknas ofta med symbolen ΣSträng = en ändlig sekvens av sammanfogade tecken från ett alfabet. Ex. 01101, abba, kalle abba är en sträng över alfabetet {a, b} Den har längden 4: |abba| = 4 En tom sträng betecknas med ε och har längden | ε | = 0

Språk = en (möjligtvis oändlig) mängd av strängar.{ε,a,b,ab,ba,abb,...} är mängden av alla strängar över alfabetet {a,b}Ø - kallas tomma mängden och innehåller inga strängar, inte ens ε.

Reguljära språk:Definitioner: ●Ø är ett reguljärt språk över Σ●För varje σ i Σ är {σ} ett reguljärt språk över Σ. ●Om L1 och L2 är reguljära språk över Σ så är L1 ∪ L2, L1L2 och L1* reguljära språk över Σ

Några exempel på reguljära språk över {a b} :

L1 = {a}L2 = {b}

L1 ∪ L2 = {a, b}L1L2 = {ab}L1* = {ε, a, aa, aaa, ...}

Reguljära uttryck:

● Ett sätt att beskriva reguljära språk AWK och UNIX shell använder reguljära uttryck.

Operatorer: ● Kleenestjärna (*)● Sammanfogning (om v = ab, w = ba, så är vw = abba)● Union (∪) ● + betyder en eller flera repetitioner

* och + har högst prioritet, därefter sammanfogning och sist ∪

Exempel på reguljära uttryck:

Informell beskrivning: Språket över {a b} bestående av alla strängar som börjar med 0 eller flera a:n följt av 2 st b:n följt av 1 eller flera a:n.

a*bba+ -> {bba, bba, bbaa, abba, abbaa, aabbaa, ...}

Fler exempel på reguljära uttryck:Informell beskrivning: E-postadresser s1@s2 dvs. en sekvens s1 av tecken före och en annan sekvens s2 av tecken efter en @. En sekvens s (alltså s1 och s2) ä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.

Vi kan ta hjälp av metasymboler ("variabler") för att beskriva delar av alfabetet:

Σ = {@ . a…z 0…9}S = Σ - {@ .}

Vi kan då skriva ett reguljärt uttryck: (S+.)*S+@(S+.)*S+

Övningar (1)

Skriv reguljära uttryck för: ● Giltiga variabelnamn i C, dvs. en bokstav eller ett "_"-tecken följt av 0 eller flera bokstäver, siffror eller "_".

● De strängar över alfabetet {a, b} och som börjar och slutar på likadan bokstav.

● Siffersträngar som representerar tal som är jämnt delbara med 2. Skriv uttryck för både det binära alfabetet, {0, 1}, och för det decimala, {0, ..., 9}.

DFA - Deterministisk Finit Automat

En DFA kan ses som en maskin som konsumerar strängar. Tecknen i strängarna driver maskinen till olika tillstånd.

DFA:er åskådliggörs ofta med en graf där noderna representerar de tillstånd som DFA:n kan befinna sig i och bågarna beskriver tillståndövergångar. Antalet noder är ändligt, vilket gör automaten finit.

I ett givet tillstånd och för ett visst tecken finns det maximalt ett tillstånd som DFA:n kan gå till, vilket gör den deterministisk. Det finns ett starttillstånd, vilket markeras med en inbåge utan källa och ett eller flera accepterande tillstånd, som markeras med utbågar utan destination.

DFA - Deterministisk Finit Automat (forts)

En sträng accepteras av en DFA om strängen driver den till ett accepterande tillstånd. Detta innebär att strängen tillhör det språk som denna DFA beskriver.

DFA:er kan användas för att bestämma om en given sträng tillhör ett visst språk. Precis de strängar som den accepterar ingår i språket.

DFA - Deterministisk Finit Automat (forts)Exempel: En DFA över {a, b} som som accepterar strängar som slutar och börjar på a, dvs det språk som kan beskrivas med det reguljära uttrycket a (a ∪ b)*a ∪ a

DFA - formell definition

En DFA är en kvintupel (Q, Σ, δ, s, F) där

● Q är en ändlig mängd (tillstånden)

● Σ är en ändlig mängd (inputalfabetet)

● δ är en funktion (övergångsfunktionen) från Q X Σ till Q

● s är starttillståndet, ett element ur Q

● F en mängd accepterande tillstånd, en delmängd av Q

NFA - Nondeterministic Finite Automaton

En finit automat som:

●kan gå till flera olika tillstånd för ett givet input tecken●som får innehålla flera starttillstånd●som har tillstånd utan att konsumtion av något tecken (s.k. ε-övergång)

...kallas för en icke-deterministisk finit automat, förkortning NFA.

För varje NFA finns det en DFA som accepterar samma språk.NFA:er är alltså inte mer "kraftfulla" än DFA:er. Vi kommer att koncentrera oss på DFA:er.

Definition

Reguljära språk är de finita automaternas språkFör varje reguljärt språk kan konstrueras en finit automat som accepterar precis de strängar som finns i språket.Varje språk vars alla strängar accepteras av en finit automat är reguljärt.De reguljära operatorerna *, ∪ och sammanfogning motsvaras av åter-, parallell- respektive seriekoppling.

Övningar (2)

Gör DFA:er som accepterar: ● Strängar över {a, b} som börjar och slutar på likadan bokstav. ● E-postadresser tidigare beskrivning:s1@s2 dvs. en sekvens s1 av tecken före och en annan sekvens s2 av tecken efter en @. En sekvens s (alltså s1 och s2) ä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.● Språken {}, {ε}, {a}, Σ+ och Σ*

Definition

● En DFA särskiljer strängar som driver den till skilda tillstånd.● Ett språk L särskiljer två strängar x och y om det finns någon sträng z sådan att exakt en av strängarna xz och yz tillhör L. ● L särskiljer strängarna x1, x2, x3, . . . om det särskiljer varje par xi, xj av strängar. ● Om L särskiljer oändligt många strängar så är L ickereguljärt. Exempel: L = {b, ba, baa, baaa, . . .} Särskiljs b från ba?

DFA:ns begränsning

En DFA:s minne finns i tillstånden. DFA:n särskiljer strängar som driver den till olika tillstånd. Antalet tillstånd är ändligt, alltså finns det ingen DFA som kan känna igen språk som särskiljer oändligt många strängar. Exempel: L = { ε, (), (()), ((())), . . .} måste särskilja oändligt många strängar, dvs. ingen DFA kan känna igen detta språk. Informellt:En DFA som gått in i en loop ser inte vilken gång i ordningen som ett tillstånd besöks. Jämför med det reguljära uttrycket a(bc)*, det beskriver ett mönster men säger inget om hur många gånger bc förekommer.

Grammatik = språkregler

Detta är 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:Givet alfabet: {a, b}Språket {a, ab, abb, ...} kan då beskrivas:

Grammatik = språkregler

Detta är 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:Givet alfabet: {a, b}Språket {a, ab, abb, ...} kan då beskrivas:

S → aBB → bBB → ε

S → aBB → bB | ε

Vi kan också skriva de två B-reglerna på samma rad:

S → aBB → bB | ε

Grammatik (forts)

a och b är terminaler, dvs de kommer från alfabetet (för språket).S och B är här icketerminaler, de är interna för grammatiken. De kan ses ungefär som en slags variabler som används i reglerna. S är startsymbolen. Strängen till höger om → anger vad symbolen till vänster om → kan ersättas med. Regeln S → aB betyder alltså "S kan ersättas av aB"

S → aBB → bB | ε

Grammatik (forts)

Vi provar att producera (härleda) strängen abb med hjälp av reglerna i grammatiken:

S ⇒ aB ⇒ abB ⇒ abbB ⇒ abb

S → aBB → bB | ε

Grammatik (forts)

För att demonstrera vilka regler som använts i respektive steg, kan man ställa upp det vertikalt: Produktion Använd regelS ⇒ aB S → aB ⇒ abB B → bB ⇒ abbB B → bB ⇒ abb B → ε

Notera att B-regeln är rekursiv, detta motsvaras av slingor för DFA:er och Kleenstjärna för uttryck.

För reguljära språk förkommer endast regler av typen A → µA → µBA → ε Dvs. det förkommer max en icketerminal i högerledet och den ligger alltid sist.

Nästa förläsning så ska vi titta på mer uttrycksfulla regler som gör att vi kan beskriva en klass av mer generellt språk - klassen av de sammanhangsfria språken.

Reguljär Grammatik