Download as pdf or txt
Download as pdf or txt
You are on page 1of 32

Formalne metode

u softverskom inženjerstvu

07 Regularni jezici i gramatike

ETFBL
Dunja Vrbaški
21-22/L

Regularni izrazi

- deklarativan način definisanja nekog jezika


- mehanizam za generisanje

- NKA - jednostavno (jednostavnije)


- mehanizam za prepoznavanje

- opis paterna
- rad sa tekstom
- find / search&replace
- leksička analiza - prevodioci
RE → e-NKA → NKA → DKA

Za NKA definisan kao A = (S, Σ, 𝜎, s0, F)


konstruiše se DKA A1 = (S1, Σ, 𝜎1, s01, F1)

S1 = 𝒫(S) (skup svih podskupova)

s01 = {s0}

𝜎1(s, a) = U {𝜎(p, a) | p ∈ s } (obratiti pažnju, p i s su skupovi)

F1 = {p ∈ S1 | p ∩ F ≠ ∅} (ako skup sadrži bar jedno završno stanje iz F)

S1 = 𝒫(S) = {∅, {q0}, {q1}, {q0, q1}}

p0 p1 p2 p3

𝜎1(s, a) = U {𝜎(p, a) | p ∈ s }

F1 = {{q1}, {q1, q2}} s01 = {q0}

p2 p3 p1
RE → e-NKA → NKA → DKA

a(bba|bb)*b a(ba)*(b|bab)*
RE ← e-NKA ← NKA ← DKA

a*ba*b(a|b)*
Numerišu se stanja
Dodaju se novo početno i završno i numerišu se sa n-1 i n
od 2 do 2 (preko svih <= 1); 2-0-2 - direktan prelaz
od 2 do 3 (preko svih <= 1); 2-0-3 - direktan prelaz

Može se nastaviti proces za novo dobijeni automat


Može se dobiti složen izraz
Identiteti - pojednostavljenje

DKA

Numerišemo stanja

L(p, q, k) - svi prelazi od p do q ali samo prolaskom kroz stanja <= k

Ponavljamo postupak za sve p, q, k


RE → e-NKA → NKA → DKA
RE ← e-NKA ← NKA ← DKA

Σ = {0, 1}

- Reči koje počinju znakom 0


- Reči koje imaju paran broj 0 i 1

- 0*1110*

- {0n1n | n >= 1}

Koji jezici su regularni?

regularan izraz
automat

neregularnost - pumping lema


Lema o napumpavanju

Neka je L je regularan jezik.


Tada postoji broj n takav da za sve reči r ∈ L takve da |r| >= n
postoji prefiks reči r čija je dužina manja od n koji sadrži pumpu.

r=xyz
y≠ε
|xy| <= n
xyiz ∈ L

n je konstanta napumpavanja jezika L


Obratiti pažnju:
pumpa - potreban, ali ne i dovoljan uslov

regularan jezik → ima pumpu


ima pumpu - ne mora da znači da je regularan

Zadatak

Šta je Dirihleov (pigeonhole) princip?

Razmisliti, ako već niste, o tome kako izgledaju automati (DKA, regularni jezici) i kako se odatle
može doći do ideje pumping leme. Kakve veze ima broj stanja automata sa konstantom
napumpavanja?
Primena: programski prevodioci

Šta su leksičke, sintaksne i semantičke greške?


Na šta nas ovo asocira?

“prepoznajemo”
“string”
“ok vs error”
* pročitani simbol se uzima u obzir za sledeći token

ako pp da je KW specijalan slučaj identifikatora

Compilers - Dragon book

* pročitani simbol se uzima u obzir za sledeći token

ako pp da je KW specijalan slučaj identifikatora


flex

regularni izrazi - tabela prelaza

generisani skener - simulator konačnog automata koji koristi tabelu prelaza


Zadatak

Prilikom realizacije skenera, ako ima više različitih prelaza da li na kraju imamo jedan veliki
automat ili rade posebni automati?

Kako izgledaju formalne specifikacije leksike nekih popularnih jezika?


Kako su implementirani skeneri?

U C-u, šta je rezultat za ---a u okviru različitih izraza? Greška ili ne?
Šta neko može očekivati da ovde bude rezultat?
Šta (neki) kompajler kaže? Da li je vaša pretpostavka bila tačna?

Šta je programski jezik?

Pogledati: https://esolangs.org
Implementirati neki?
Regularni izrazi (jezici) nisu više dovoljni da se opišu pravila sintakse mnogih programskih jezika.

Nisu dovoljno ekspresivni.

Međutim, postoji teorija koja omogućava formalizaciju i automatizaciju procesa parsiranja kao što
skeniranje može da se automatizuje na osnovu regularnih izraza i odgovarajućih DKA.

Hijerarhija Čomskog

Noam Chomsky

Inspiracija govorni jezici


(leksika, sintaksa, semantika)

→ formalni jezici
Hijerarhija Čomskog
(Chomsky)

Formalne gramatike → generisanje


Automati → priihvatanje

Hijerarhija Čomskog
(Chomsky)

Za sada:
regularni izrazi → generisanje
DKA → prihvatanje

Iznad:
komplikovanije
moćnije
Gramatika - odgovarajući jezik

Na primer:

Kontekstno slobodna gramatika → kontekstno slobodan jezik


KSG / KSJ

Context free grammar → Context free language


CFG / CFL
Kategorije?
Pravila po kojima se generišu reči?
Gramatika je uređena četvorka G = (Σ, N, P, S) gde je:

- Σ skup simbola (terminala)


- N skup pojmova (neterminala)
- P skup pravila izvođenja
- S početni pojam

- Σ, N, P su neprazni, konačni, skupovi


- Σ∩N=∅
- P je skup pravila u obliku (Σ ∪ N)* N (Σ ∪ N)* → (Σ ∪ N)*

Gramatika je uređena četvorka G = (Σ, N, P, S) gde je:

- Σ skup simbola (terminala)


- N skup pojmova (neterminala)
- P skup pravila izvođenja
- S početni pojam

- Σ, N, P su neprazni, konačni, skupovi


- Σ∩N=∅
- P je skup pravila u obliku (Σ ∪ N)* N (Σ ∪ N)* → (Σ ∪ N)*
Uporediti ova dva jezika

Jezik L(G) generisan gramatikom G je skup reči nad skupom terminala koje
se mogu izvesti počevši od početnog pojma.
Gramatika je uređena četvorka G = (Σ, N, P, S) gde je:

- Σ skup simbola (terminala)


- N skup pojmova (neterminala)
- P skup pravila izvođenja
- S početni pojam

- Σ, N, P su neprazni, konačni, skupovi


- Σ∩N=∅
- P je skup pravila u obliku (Σ ∪ N)* N (Σ ∪ N)* → (Σ ∪ N)*

Postavljanjem ograničenja na oblik pravila → tipovi gramatika


Regularna gramatika

P je skup pravila u obliku

A→s
A → sB
A→ε

ILI

A→s
A → Bs
A→ε

s∊Σ

Regularna gramatika

P je skup pravila u obliku

A→s
A → sB desno-regularne, desno-linearne
A→ε

ILI

A→s
A → Bs levo-regularne, levo-linearne
A→ε

s∊Σ
Regularna gramatika

P je skup pravila u obliku

A→s
A → sB
A→ε

ILI Linearna, ali nije regularna

A→s
A → Bs
A→ε

s∊Σ

Regularne gramatike
Regularan jezik
Regularni izrazi
Konačni automati
Notacija: oznaka za alternativu, umesto navođenja dva pravila ( “dve strelice”)

Kako izgleda regularni izraz?


Zadatak

Da li se levo regularna gramatika može predstaviti kao desna i obrnuto?


Da li postoje odgovarajuće?
Kontekstno slobodna gramatika

P je skup pravila u obliku N → (Σ ∪ N)*

Kontekstno slobodna gramatika

P je skup pravila u obliku N → (Σ ∪ N)*

I dalje imamo jedan neterminal sa leve strane, ali je desna strana opštija
Zašto se zove kontekstno slobodna?

kontekstno slobodna kontekstno osetljiva

G = ({E}, {+, *, (, ), id}, P, E}

P:

E → E + E
E → E * E
E → (E)
E → id
BNF (Bakus-Naurova) forma

pravila siintakse PL se često navode u BNF formi


- pojmovi (neterminali) se navode u < > ostalo su simboli (terminali)
- ::= se koristi umesto →

<assignment statement> ::= <variable> = <expression>


Proširene BNF forme

Dodaju se oznake

- [ … ] – ponavljanje sadržaja 0 ili 1 put


- { … } – ponavljanje sadržaja 0 ili više puta
- ( ... ) – grupisanje

- nekad “,” konkatenacija, “;” kraj

- nekad i *, +, ?
Nije regularan, nema DKA.
DKA ne ume da broji.
Da li postoje odgovarajući automati za KSG?

You might also like