17
Příklady jazyků Příklad 1: G=({S}, {0,1}, P, S) P = {S 0S | 1S | 0 | 1 } je regulární gramatika generující jazyk L(G) = {0,1} + Příklad 2: G=({E, T,F}, {a,b,+,x, ( , ) }, P, E) P = {E E+T | T T TxF | F F (E) | a | b } je bezkontextová gramatika generující aritmetické výrazy tvořené operátory sčítání, násobení, závorkami a operandy a, b

Příklady jazyků

  • Upload
    norris

  • View
    58

  • Download
    0

Embed Size (px)

DESCRIPTION

Příklady jazyků. Příklad 1 : G= ({S}, {0,1}, P, S) P = {S  0S | 1S | 0 | 1 } je regulární gramatika generující jazyk L(G) = {0,1} + Příklad 2 : G= ({E, T,F}, {a,b,+,x, ( , ) }, P, E) P = {E  E+T | T T  TxF | F F  (E) | a | b } - PowerPoint PPT Presentation

Citation preview

Page 1: Příklady jazyků

Příklady jazyků

Příklad 1: G=({S}, {0,1}, P, S) P = {S 0S | 1S | 0 | 1 }

je regulární gramatika generující jazyk L(G) = {0,1} +

Příklad 2: G=({E, T,F}, {a,b,+,x, ( , ) }, P, E) P = {E E+T | T

T TxF | F F (E) | a | b }

je bezkontextová gramatika generující aritmetické výrazy tvořené operátory sčítání, násobení, závorkami a operandy a, b

Page 2: Příklady jazyků

Příklady jazyků

Příklad 3: G=({S, A}, {0,1}, P, S) P = {S 0A1 | 01

0A 00A1 | 001}je kontextová gramatika; L(G) = {0 n1 n| n 1}

Příklad 4: G=({S, A}, {0,1}, P, S) P = {S 0A1 | 01

0A 00A1 A e }

je vzhledem k poslednímu pravidlu gramatika bez omezení, přičemž L(G) = {0 n1 n| n 1}

Page 3: Příklady jazyků

Příklady jazyků

Příklad 5: G1=({S}, {a,+}, P, S)

P = {S S+S| a } G1 je bezkontextová gramatika; L(G1) = {a, a+a,

a+a+a, …}

G2=({S, A}, {a,+}, P, S)

P = {S a | aA A +S }

G2 je regulární gramatika;

L(G2) = {a, a+a, a+a+a, …} je regulární jazyk

L(G2) = L(G1) je také regulární jazyk

Page 4: Příklady jazyků

Příklady gramatik

Navrhněte gramatiku generující jazyk nad abecedou {0,1}, jehož slova končí znakem 0

Navrhněte gramatiku generující jazyk nad abecedou {0,1}, jehož slova obsahují podřetězec 00

Navrhněte gramatiku generující jazyk L={aibjck|i,j,k>0} nad abecedou {a,b,c}

Page 5: Příklady jazyků

Příklady gramatik

Navrhněte gramatiku generující jazyk L={aibi|i >0} nad abecedou {a,b}

Navrhněte gramatiku generující jazyk L={aibici|i>0} nad abecedou {a,b,c}

Navrhněte gramatiku generující jazyk přirozených čísel bez vedoucích nul

Page 6: Příklady jazyků

Využití formálních jazyků

Z hlediska práce s programovacími jazyky je možné se soustředit pouze na jazyky regulární a jazyky bezkontextové

Regulární gramatiky a jazyky –specifikace základních objektů (identifikátory, čísla, …)

Bezkontextové gramatiky a jazyky – popis složitějších programových konstrukcí (výrazy, příkazy, …)

Gramatika jazyk definuje generativním způsobem, ale v praxi se spíše hodí schopnost rozpoznat, zda dané slovo do příslušného jazyka patří či nikoliv – akceptační způsob (rozhodování bude provádět automat)

Page 7: Příklady jazyků

Konečné automaty

DEF: Deterministický konečný automat M je pětice M=(Q,T,,q0,F), kde

Q je konečná množina vnitřních stavů automatuT je konečná množina přípustných vstupních symbolů je přechodová funkce : QxT Qq0 je počáteční stav automatu (q0Q)

F je množina koncových stavů (FQ)

Příklad: automat na kontrolu otevírání dveří Q={otevřeno, zavřeno}, T={smí, nesmí}, q0={zavřeno}, F={zavřeno},(zavřeno, smí)= otevřeno, (zavřeno, nesmí)= zavřeno, (otevřeno, smí)= otevřeno, (otevřeno, nesmí)= zavřeno

Page 8: Příklady jazyků

Konečné automaty

Konečný automat pracuje po krocích (taktech). V každém kroku přečte jeden symbol vstupního řetězce, který spolu se stavem, ve kterém se automat aktuálně nachází, rozhodne o další činnosti automatu. Tato činnost je určena funkcí .

Konečný automat přečte symbol c, posune se o jedno políčko vpřed a přejde do stavu q2 právě tehdy, když

(q1,c)=q2

a b c d e f

q1

g h a b c d e f

q2

g h

1 krok

Page 9: Příklady jazyků

Užívané konvence a pojmy

DEF: Nechť M=(Q,T,,q0,F) je konečný automat. Potom dvojici (q,w) QxT* nazýváme konfigurací konečného automatu M.

Konfiguraci (q0,w), kde w je vstupní řetězec nazýváme počáteční konfigurací automatu M a libovolnou konfiguraci (q,e), kde qF nazýváme koncovou konfigurací automatu M.

DEF: Buď M=(Q,T,,q0,F) konečný automat. Potom nad množinou všech konfigurací definujeme relaci přechodu pro q1,q2Q, wT*, aT následovně:

(q1,aw) (q2,w), jestliže (q1,a)=q2

Page 10: Příklady jazyků

Konečné automaty - příklad

Příklad: automat na kontrolu otevírání dveří Q={otevřeno, zavřeno}, T={smí, nesmí}, q0={zavřeno}, F={zavřeno},(zavřeno, smí)= otevřeno, (zavřeno, nesmí)= zavřeno, (otevřeno, smí)= otevřeno, (otevřeno, nesmí)= zavřeno

Počáteční konfigurace (zavřeno, smí, smí, smí), (zavřeno, nesmí, smí), …….

Koncová konfigurace (zavřeno, e)

Přechody(zavřeno, smí, nesmí) (otevřeno, nesmí) (zavřeno, e)

Page 11: Příklady jazyků

Další definice

DEF: Nechť M=(Q,T,,q0,F) je konečný automat.

Potom stav qQ je dosažitelný, jestliže existuje přechod

(q0,w) n (q,e) pro nějaké n0 a wT*.

Dosažitelný stav automatu M je tedy libovolný stav, do kterého se mohu dostat z nějaké počáteční konfigurace po konečném počtu přechodů (kroků).

Příklad:V úloze s automatem na otevírání dveří jsou oba stavy dosažitelné.zavřeno je počáteční stav (vždy dosažitelný)otevřeno dosáhnu např. přechodem: (zavřeno,smí) (otevřeno, e)

Page 12: Příklady jazyků

Přijímání slova automatem

DEF: Nechť M=(Q,T,,q0,F) je konečný automat.

Potom automat M přijímá (akceptuje) slovo wT*, jestliže platí

(q0,w) * (q,e) pro nějaké qF.

Poznámka: po přečtení slova automat skončí v některém z koncových stavů.

DEF: Nechť M=(Q,T,,q0,F) je konečný automat.

Jazyk L(M) specifikovaný konečným automatem M je množina řetězců

L(M)={w| (q0,w) * (q,e), wT*, qF}

Page 13: Příklady jazyků

Konečné automaty

Příklad: Mějme automat M=({q0,q1,q2,q3},{0,1},,q0,

{q0}), kde (q0,0)= q2, (q0,1)= q1,

(q1,0)= q3, (q1,1)= q0,

(q2,0)= q0, (q2,1)= q3,

(q3,0)= q1, (q3,1)= q2.

Potom pro vstup w=1010:(q0,1010) (q1,010) (q3,10) (q2,0) (q0,e) … přijatoAle(q0,111) (q1,11) (q0,1) (q1,e) …

nepřijato(q0,121) (q1,21) … nepřijato

Page 14: Příklady jazyků

Reprezentace konečných automatů

A) Přechodovou tabulkou:

M=({q0,q1,q2,q3},{0,1},,q0,{q0})

0 1q0 q2 q1

q1 q3 q0

q2 q0 q3

q3 q1 q2

Page 15: Příklady jazyků

Reprezentace konečných automatů

B) Přechodovým diagramem:

M=({q0,q1,q2,q3},{0,1},,q0,{q0})

… počáteční stav „START“

… koncový stav

… přechody

L(M) = ?

Page 16: Příklady jazyků

Příklady konečných automatů

Navrhněte automat přijímající jazyk nad abecedou {0,1}, jehož slova obsahují lichý počet jedniček

Navrhněte automat přijímající jazyk nad abecedou {0,1}, jehož slova obsahují podřetězec 000

Navrhněte automat přijímající jazyk L={aibjck|i,j,k>0} nad abecedou {a,b,c}

Navrhněte automat přijímající jazyk L={aibjck|i,j,k0} nad abecedou {a,b,c}

Page 17: Příklady jazyků

Příklady konečných automatů

Navrhněte konečný automat k nápojovému automatu, který kontroluje správnost zaplacené částky (5,-Kč) za předpokladu, že lze platit korunami, dvoukorunami a pětikorunami a případné přeplatky se nevrací.

Navrhněte konečný automat k nápojovému automatu, který kontroluje správnost zaplacené částky (8,-Kč) za předpokladu, že lze platit korunami,dvoukorunami, pětikorunami a desetikorunami, přičemž případné přeplatky se vrací.