45
Interpretacija programa Krunoslav Puljić 2015/2016

Algebra formalnih jezika

  • Upload
    vanbao

  • View
    231

  • Download
    4

Embed Size (px)

Citation preview

Page 1: Algebra formalnih jezika

Interpretacija programa

Krunoslav Puljić

2015/2016

Page 2: Algebra formalnih jezika

Gramatika neograničenih produkcija

Kontekstno ovisna gramatika

Kontekstno neovisna

gramatika

Hijerarhija automata i gramatika

Regularna

gramatika

Turingov stroj

Linearno ograničeni automat

Potisni automat

Konačni

automat

Rekurzivno prebrojivi jezici

Kontekstno ovisni jezici

Kontekstno neovisni

jezici

Regularni

jezici

Leksička

analiza

Sintaksna

analiza

Semantička

analiza

Page 3: Algebra formalnih jezika

Formalni jezici

• Znak – apstraktni pojam koji se ne definira

– 0, 1; a, b, c, d

• Abeceda – konačan skup znakova

– Binarna abeceda {0,1};

• Niz – konačan slijed znakova abecede pozicioniranih jedan do drugog

– Nizovi 001, 11010, 1100011 nad abecedom {0,1}

– Duljina niza |ω|

– Prazan niz ɛ

– Nadovezivanje nizova

Page 4: Algebra formalnih jezika

Formalni jezici

• Formalni jezik - skup nizova nad abecedom

– Intuitivno: jezik je skup riječi

– Prazan skup L1 = { }

– Skup s jednim elementom: praznim nizom • L2 = { ɛ }

– Skup nizova u kojima je broj 0 i 1 paran

• L3 = { 00, 11, 0011, 1001, 1010, ... }

• L3 je zadan nad binarnom abecedom i nije konačan skup

– Skup svih mogućih nizova nad abecedom Σ

• L4 = Σ* = { ɛ, 0, 1, 00, 01, 10, 11, 000, 001, 010, ... }

• L4 nije konačan

Page 5: Algebra formalnih jezika

Formalni jezici

• Operacije nad formalnim jezicima

– Unija L U N

– Presjek L ∩ N

– Razlika L – N

– Nadovezivanje L N

– Kartezijev produkt L

N

– Partitivni skup 2L – skup svih podskupova

– Kleeneov operator L*

– Kleeneov operator L+

– Komplement jezika Lc

Page 6: Algebra formalnih jezika

Formalni jezici – Kleenov operator

• L2 = L L ; L3 = L L L

• L0 = { ɛ }; Li = Li-1 L

• L* = L0 U L1 U L2 U L3 U ...

• L+ = L1 U L2 U L3 U L4 U ...

Page 7: Algebra formalnih jezika

Regularni jezici

• Jezik je regularan akko postoji konačni automat koji ga prihvaća – Za bilo koji regularan jezik moguće je izgraditi konačni

automat koji ga prihvaća

– Bilo koji konačni automat prihvaća jedan od regularnih jezika

• Regularni jezici su najjednostavniji jezici – ...jer je za njihovo prihvaćanje potrebno izgraditi

najjednostavniji automat – konačni

• Regularni izrazi – jednostavan način opisa regularnih jezika

Page 8: Algebra formalnih jezika

Konačni automati

• Deterministički konačni automat (DKA) – Koristi se u leksičkoj analizi gotovo svih jezičnih procesora

• DKA se sastoji od konačnog skupa stanja i funkcije prijelaza – Funkcija prijelaza jednoznačno je određena znakom na

ulazu i stanjem u kojem se nalazi automat • Za pojedini znak i stanje postoji samo jedan prijelaz

– Jedno od stanja je početno stanje • Tu automat započinje svoj rad

– Ako DKA nakon pročitanih svih znakova niza x prijeđe u jedno od prihvatljivih (završnih) stanja, niz x se prihvaća

• Inače se ne prihvaća

Page 9: Algebra formalnih jezika

DKA

• DKA prikazujemo dijagramom stanja ili tablicom prijelaza

Page 10: Algebra formalnih jezika

DKA primjer

S

a Primjer:

Jezik L = { ɛ, a, a2, a3, ... } nad abecedom { a }

a*

Jezik L = { a, a2, a3, ... } nad abecedom { a }

a+

S2

a

S1

a

Page 11: Algebra formalnih jezika

DKA

• DKA je uređena petorka (Q, ∑, δ, q0, F) gdje je

– Q – konačni skup stanja

– ∑ – konačan skup ulaznih znakova

– δ – funkcija prijelaza Q

∑ → Q

– q0 ∊ Q – početno stanje

– F ⊆ Q – skup prihvatljivih (završnih) stanja

Page 12: Algebra formalnih jezika

DKA primjer

• Prikaz konačnog automata

pomoću usmjerenog grafa

• Koristi se i naziv dijagram

stanja

• Abeceda

D = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }

• Jezik

L = { riječi “djeljive s 3” }

L = { ɛ, 0, 3, 6, 9, 12, 15, ... }

• dozvoljene vodeće nule

npr. 003

• L je podskup od D*

D

J S

1, 4, 7

2, 5, 8

0, 3, 6, 9

2, 5, 8

1, 4, 7

2, 5, 8

1, 4, 7

0, 3, 6, 9

0, 3, 6, 9

Page 13: Algebra formalnih jezika

DKA primjer

Q = { S, J ,D }

∑ = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }

Δ (J, 2) = S (npr.)

q0 = S

F = { S }

D

J S

1, 4, 7

2, 5, 8

0, 3, 6, 9

2, 5, 8

1, 4, 7

2, 5, 8

1, 4, 7

0, 3, 6, 9

0, 3, 6, 9

Page 14: Algebra formalnih jezika

Sta

nje

Ulazni znak Oznaka prihvatljivosti

0 1 2 3 4 5 6 7 8 9

S S J D S J D S J D S 1

J J D S J D S J D S J 0

D D S J D S J D S J D 0

Prikaz konačnog

automata pomoću

tablice prijelaza D

J S

1, 4, 7

2, 5, 8

0, 3, 6, 9

2, 5, 8

1, 4, 7

2, 5, 8

1, 4, 7

0, 3, 6, 9

0, 3, 6, 9

Page 15: Algebra formalnih jezika

Funkcija prijelaza δ

• novo stanje = δ (staro stanje, ulazni znak)

• δ : Q

∑ → Q

Page 16: Algebra formalnih jezika

Proširenje funkcije δ

• Definira se i δ’ : Q

∑* → Q.

– Određuje stanje DKA nakon što je pročitan niz

(riječ) w.

– ∑* je skup svih mogućih nizova ulaznih

znakova

• w, x, y, z će označavati ulazne nizove iz ∑*

• a, b, c, ... , 0, 1, 2, ... će označavati ulazne znakove

• p, q, ... će označavati stanja

Page 17: Algebra formalnih jezika

Proširenje funkcije δ

• δ’(q,w) određuje stanje DKA nakon što je u

stanju q pročitan niz ulaznih znakova w

• δ’(q,w) se definira ovako:

1) δ’(q, ε) = q, gdje je ε prazni niz

2) za bilo koji niz ulaznih znakova w i za bilo

koji ulazni znak a vrijedi:

• δ’(q, wa) = δ(δ’(q, w) , a), gdje je w∊Σ*, i a∊Σ

Page 18: Algebra formalnih jezika

Proširenje funkcije δ

• (1) kaže da DKA ne može promijeniti

stanje, a da ne pročita barem jedan ulazni

znak

• (2) definira kako se računa stanje u koje

prelazi DKA čitanjem niza znakova wa

Page 19: Algebra formalnih jezika

Proširenje funkcije δ

• Ako u (2) uvrstimo w= ε, dobije se

– δ’(q, a) = δ’(q, εa) = δ(δ’(q, ε),a) = δ(q, a)

– Ako ne razlikujemo ulazni znak a∊Σ i niz a∊Σ *

duljine |a|=1, funkcije δ i δ’ imaju jednaku

vrijednost za sve one argumente za koje su

obje strane definirane

• Zato koristimo samo jednu oznaku (δ) za obje

funkcije

Page 20: Algebra formalnih jezika

Prihvaćanje niza

• DKA dka=(Q, ∑, δ, q0, F) prihvaća niz x ako je

δ(q0, x)=p ∊ F

• DKA prihvaća skup

–L(dka) = { x ∊ Σ * : δ(q0, x) ∊ F }

–L(dka) ⊆ Σ *

• Za sve nizove koji nisu u L(dka) kažemo da

ih DKA ne prihvaća

Page 21: Algebra formalnih jezika

Model konačnog automata

• Dijelovi DKA:

– Konačna ulazna traka

– Glava za čitanje

– Upravljačka jedinica

• Upravljačka jedinica pamti samo stanje u kojem se

nalazi (nema druge memorije)

– Upravljačka jedinica u stanju q pročita ulazni znak a s ulazne

trake, promijeni stanje u novo stanje δ(q, a) i pomakne glavu za

čitanje jedno mjesto u desno

– Ako je novo stanje prihvatljivo, onda DKA prihvaća do tada

pročitani niz (ali bez znaka na kojem je pozicionirana glava za

čitanje)

• Pomakom glave izvan krajnje desne pozicije, prihvaća se ili ne prihvaća cijeli

niz ispisan na traci, ovisno o stanju u kojem se DKA nalazi

Upravljačka jedinica

Stanje

a1 ... ai ... an-1 Ulazna traka

Glava za čitanje

Page 22: Algebra formalnih jezika

Model konačnog automata

• Usporedba s Turingovim strojem (za sada)

– Traka je konačna

– Sa trake se samo čita (nema pisanja)

– Glava ide samo u desno

• Čitanje znaka “potroši” taj znak s trake

Page 23: Algebra formalnih jezika

Primjeri...

• Q = {pp, nn, pn, np}

• Σ = {0, 1}

• q0 = pp

• F = {pp, nn}

• δ(pp,1)=pn, δ(pp,0)=np, δ(pn,1)=pp, δ(pn,0)=nn,

δ(np,1)=nn, δ(np,0)=pp, δ(nn,1)=np, δ(nn,0)=pn

• DKA prihvaća sve nizove nula i jedinica koji imaju:

– paran broj jedinica i paran broj nula, ili

– neparan broj jedinica i neparan broj nula

Page 24: Algebra formalnih jezika

Primjeri...

• DKA s prethodnog slajda se može prikazati i dijagramom stanja i tablicom prijelaza

np

pn pp

0

nn

0

1

1

1

0

1

0

0 1

pp np pn 1

pn nn pp 0

np pp nn 0

nn pn np 1

Page 25: Algebra formalnih jezika

Prihvaćanje niza

• Postupak prihvaćanja niza

Page 26: Algebra formalnih jezika

Prihvaćanje niza

• Tablica prijelaza i dijagram stanja

olakšavaju postupak prihvaćanja niza

Page 27: Algebra formalnih jezika

Zadatak

• Implemetirajte DKA

– Koristite C++

• Dev-C++ ili Visual Studio ili vi i gcc

• Python, Java itd.

– Neka abeceda bude {0,1}, tj. podskup int-ova (enum)

– Stanja označite malim slovima engleske abecede

{a,b,c, ... ,z}, tj. podskup char-ova

– Sami osmislite kako ćete unositi funkciju prijelaza

– Zadajte i početno stanje i skup završnih stanja

• Provjerite da se radi o stanjima, te javite grešku

• ili ih ubacite u skup stanja ako ih nema

Page 28: Algebra formalnih jezika

Zadatak

• Implemetirajte DKA

– Implementirajte učitavanje DKA iz datoteke

Page 29: Algebra formalnih jezika

Minimizacija DKA

• Za bilo koji DKA moguće je izgraditi

proizvoljno mnogo drugih DKA koji

prihvaćaju isti jezik

– Ideja: izgraditi DKA s što manjim brojem

stanja

• Teorem: minimalni DKA je jedinstven

Page 30: Algebra formalnih jezika

Istovjetnost stanja DKA

• Stanje p DKA M=() je istovjetno stanju p’

DKA M’=() akko DKA M u stanju p

prihvaća isti skup nizova kao i DKA M’ u

stanju p’

– Za bilo koji niz w skupa * mora vrijediti:

δ(p,w) i δ’(p’,w) su oba završna ili oba

nezavršna stanja

Page 31: Algebra formalnih jezika

Istovjetnost stanja DKA

• Relacija istovjetnosti je tranzitivna

– Da bismo smanjili broj stanja zadanog DKA,

grupa istovjetnih stanja se zamijeni jednim

jedinstvenim stanjem

• Primjer: neka su p4 i p5 istovjetna stanja

c d

p1 p1 p4 0

p2 p3 p5 1

p3 p5 p1 0

p4 p2 p3 1

p5 p2 p3 1

c d

p1 p1 X 0

p2 p3 X 1

p3 X p1 0

X p2 p3 1

X p2 p3 1 postaje

višak

Page 32: Algebra formalnih jezika

Istovjetnost DKA

• DKA M i M’ su istovjetni akko su istovjetna

njihova početna stanja q0 i q0’

Page 33: Algebra formalnih jezika

Ispitivanje istovjetnosti stanja

• Istovjetnost stanja p i q svodi se na

ispitivanje dva uvjeta:

– Uvjet podudarnosti: p F i q F ili p F i q F

– Uvjet napredovanja: a mora vrijediti da su

stanja δ(p,a) i δ(q,a) istovjetna

Page 34: Algebra formalnih jezika

Pronalaženje istovjetnih stanja

• Primjer:

c d

p0 p0 p3 0

p1 p2 p5 0

p2 p2 p7 0

p3 p6 p7 0

p4 p1 p6 1

p5 p6 p5 0

p6 p6 p3 1

p7 p6 p3 0

Page 35: Algebra formalnih jezika

Pronalaženje istovjetnih stanja

• Nekoliko algoritama

• Algoritam 1: gradimo tablicu (korak 1)

– Za sve ulazne znakove gradimo poseban

stupac

– Par stanja za koji ispitujemo istovjetnost

upisuje se u prvi redak

c d

p0, p7

c d

p0 p0 p3 0

p1 p2 p5 0

p2 p2 p7 0

p3 p6 p7 0

p4 p1 p6 1

p5 p6 p5 0

p6 p6 p3 1

p7 p6 p3 0

Page 36: Algebra formalnih jezika

Pronalaženje istovjetnih stanja

• Nekoliko algoritama

• Algoritam 1: gradimo tablicu (korak 2)

– Uvjet podudarnosti ispituje se za sve parove

stanja koje upisujemo u retke tablice

• Ako par nije podudaran, početna stanja nisu

istovjetna

• Ako je par podudaran određujemo nove

parove stanja ovisno o znaku abecede

u stupcu

c d

p0, p7 p0, p6

p3

p0 i p7 su oba

nezavršna pa su

podudarna

c d

p0 p0 p3 0

p1 p2 p5 0

p2 p2 p7 0

p3 p6 p7 0

p4 p1 p6 1

p5 p6 p5 0

p6 p6 p3 1

p7 p6 p3 0

Page 37: Algebra formalnih jezika

Pronalaženje istovjetnih stanja • Nekoliko algoritama

• Algoritam 1: gradimo tablicu (korak 3)

– Za novi par postoje tri mogućnosti:

• Dva ista stanja

– Nema akcije

• Dva različita stanja koja su se već pojavila

– Nema akcije

• Dva različita stanja koja se još nisu pojavila

– Ubacujemo novi redak u tablicu

c d

p0, p7 p0, p6 p3

p0, p6 ubačen novi

redak

c d

p0 p0 p3 0

p1 p2 p5 0

p2 p2 p7 0

p3 p6 p7 0

p4 p1 p6 1

p5 p6 p5 0

p6 p6 p3 1

p7 p6 p3 0

Page 38: Algebra formalnih jezika

Pronalaženje istovjetnih stanja • Algoritam 1: gradimo tablicu (korak 4)

– Ako se u prethodnom koraku ne pojavi niti

jedan novi redak u tablici, onda je par stanja

zapisan u prvom retku tablice istovjetan

• Kao i svi ostali parovi stanja zapisani u ostalim

recima tablice

– Zbog uvjeta napredovanja

– Ako postoji novi redak, vraćamo se na

korak 2

c d

p0, p7 p0, p6 p3

p0, p6 Stanja nisu

podudarna pa niti

početni par nije

istovjetan. KRAJ.

c d

p0 p0 p3 0

p1 p2 p5 0

p2 p2 p7 0

p3 p6 p7 0

p4 p1 p6 1

p5 p6 p5 0

p6 p6 p3 1

p7 p6 p3 0

Page 39: Algebra formalnih jezika

Pronalaženje istovjetnih stanja • Provjerimo eventualnu istovjetnost stanja

p0 i p1

c d

p0, p1 podudarna stanja

c d

p0 p0 p3 0

p1 p2 p5 0

p2 p2 p7 0

p3 p6 p7 0

p4 p1 p6 1

p5 p6 p5 0

p6 p6 p3 1

p7 p6 p3 0

c d

p0, p1 p0, p2 p3, p5

p0, p2 podudarna stanja

p3, p5

c d

p0, p1 p0, p2 p3, p5

p0, p2 p0, p2 p3, p7

p3, p5

p3, p7

Page 40: Algebra formalnih jezika

Pronalaženje istovjetnih stanja • Provjerimo eventualnu istovjetnost stanja

p0 i p1

c d

p0 p0 p3 0

p1 p2 p5 0

p2 p2 p7 0

p3 p6 p7 0

p4 p1 p6 1

p5 p6 p5 0

p6 p6 p3 1

p7 p6 p3 0

c d

p0, p1 p0, p2 p3, p5

p0, p2 p0, p2 p3, p7

p3, p5 podudarna stanja

p3, p7

c d

p0, p1 p0, p2 p3, p5

p0, p2 p0, p2 p3, p7

p3, p5 p6 p5, p7

p3, p7

p5, p7

Page 41: Algebra formalnih jezika

Pronalaženje istovjetnih stanja • Provjerimo eventualnu istovjetnost stanja

p0 i p1

• budući da nema novih redaka u tablici, par

stanja u prvom retku prvog stupca je

podudaran

– kao i parovi stanja u ostalim recima prvog stupca

c d

p0 p0 p3 0

p1 p2 p5 0

p2 p2 p7 0

p3 p6 p7 0

p4 p1 p6 1

p5 p6 p5 0

p6 p6 p3 1

p7 p6 p3 0

c d

p0, p1 p0, p2 p3, p5

p0, p2 p0, p2 p3, p7

p3, p5 p6 p5, p7

p3, p7 p6 p3, p7 podudarna stanja

p5, p7 p6 p3, p5 podudarna stanja

Page 42: Algebra formalnih jezika

Pronalaženje istovjetnih stanja • p0 i p1 su istovjetna, kao i p0 i p2

– zbog tranzitivnosti i komutativnosti su sva tri

stanja istovjetna p0 ~ p1 ~ p2

• uvedimo za njih oznaku A

• p3 i p5 su istovjetna, kao i p5 i p7

– zato su sva tri stanja istovjetna p3 ~ p5 ~ p7

• uvedimo za njih oznaku B

c d

p0 p0 p3 0

p1 p2 p5 0

p2 p2 p7 0

p3 p6 p7 0

p4 p1 p6 1

p5 p6 p5 0

p6 p6 p3 1

p7 p6 p3 0

c d

p0, p1 p0, p2 p3, p5

p0, p2 p0, p2 p3, p7

p3, p5 p6 p5, p7

p3, p7 p6 p3, p7 podudarna stanja

p5, p7 p6 p3, p5 podudarna stanja

Page 43: Algebra formalnih jezika

Pronalaženje istovjetnih stanja • p0 ~ p1 ~ p2

• uvedimo za njih oznaku A

• p3 ~ p5 ~ p7

• uvedimo za njih oznaku B

c d

p0 p0 p3 0

p1 p2 p5 0

p2 p2 p7 0

p3 p6 p7 0

p4 p1 p6 1

p5 p6 p5 0

p6 p6 p3 1

p7 p6 p3 0

c d

A A B 0

A A B 0

A A B 0

B p6 B 0

p4 A p6 1

B p6 B 0

p6 p6 B 1

B p6 B 0

c d

A A B 0

B p6 B 0

p4 A p6 1

p6 p6 B 1

Page 44: Algebra formalnih jezika

Nedohvatljiva stanja

– Red ToDo; Skup D, Done;

– Ubaci q0 u ToDo i u D;

– Dok ToDo nije prazan radi:

• Skini stanje s pocetka reda

• Ubaci ga u Done

• Pogledaj do kuda možeš doći iz tog stanja

• Ubaci nova stanja (not Done) u ToDo

• Ubaci sva stanja u D

– http://web.studenti.math.pmf.unizg.hr/~nuno/

ip/2015/

Page 45: Algebra formalnih jezika

Zadatak

• Implemetirajte funkciju koja provjerava da li DKA

prihvaća zadanu riječ

– Riječ = niz (polje, vektor) znakova abecede

• string?

• Primjenite DKA na nekoliko jednostavnih

primjera, te provjerite da li automat prihvaća

zadane riječi