Přidání 1. a 2. části teorie z TI
This commit is contained in:
parent
2c302885d3
commit
1576a343af
88
KIV TI/01. Konečné automaty.md
Normal file
88
KIV TI/01. Konečné automaty.md
Normal file
|
@ -0,0 +1,88 @@
|
|||
# Konečné automaty
|
||||
|
||||
obecné vlastnosti
|
||||
- konečný počet stavů
|
||||
- konečný počet vstupů (vstupních symbolů nebo vstupních událostí)
|
||||
- následující stav je jednoznačně určen stavem a vstupním symbolem
|
||||
- jednoznačně určený počáteční stav
|
||||
|
||||
neřešíme, jakým způsobem zařízení vydává výsledek
|
||||
|
||||
### Typy automatů
|
||||
|
||||
**Rozpoznávací automat**
|
||||
- o vstupním řetězci vydává rozhodnutí typu **ano**/**ne**
|
||||
- **definice**: $A = \left( Q, \sum, \delta, q_{o}, F \right)$
|
||||
- $Q$ - konečná neprázdná množina stavů
|
||||
- $\sum$ - konečná neprázdná množina vstupních symbolů
|
||||
- $q_{0} \in Q$ - počáteční stav
|
||||
- $\delta : Q \times \sum \to Q$ - přechodová funkce
|
||||
- $F \subseteq Q$ - množina koncových stavů
|
||||
- **použití**
|
||||
- řešení dílčích problémů v překladačích programovacích jazyků
|
||||
- jednoduché úlohy AI
|
||||
|
||||
**Klasifikační automat**
|
||||
- vstupní řetězec zařadí do jedné z *n* tříd
|
||||
- **definice**: $A = \left( Q, \sum, \delta, q_{o}, \{Q_{i}\} \right)$
|
||||
- $Q$ - konečná neprázdná množina stavů
|
||||
- $\sum$ - konečná neprázdná množina vstupních symbolů
|
||||
- $q_{0} \in Q$ - počáteční stav
|
||||
- $\delta : Q \times \sum \to Q$ - přechodová funkce
|
||||
- $\{Q_{i}\}$ - rozklad množiny stavů (třídy)
|
||||
- **použití**
|
||||
- jednoduché úlohy AI
|
||||
|
||||
**Automat s výstupní funkcí** (překladový automat)
|
||||
- na základě vstupního řetězce vytvoří výstupní řetězec z výstupních symbolů
|
||||
- **použití**
|
||||
- HW - modelování číslicových systémů
|
||||
- modelování a návrh systémů logického řízení
|
||||
|
||||
Automat Mealyho typu
|
||||
- výstupní posloupnost určena **posloupností přechodů**, kterými automat při zpracování řetězce prošel
|
||||
- výstupní řetězec má délku $n$
|
||||
- **definice**: $A = \left( Q, \sum, O, \delta, q_{o}, \lambda \right)$
|
||||
- $Q$ - konečná neprázdná množina stavů
|
||||
- $\sum$ - konečná neprázdná množina vstupních symbolů
|
||||
- $O$ - konečná neprázdná množina výstupních symbolů
|
||||
- $q_{0} \in Q$ - počáteční stav
|
||||
- $\delta : Q \times \sum \to \quad$ - přechodová funkce
|
||||
- $\lambda : Q \times \sum \to O$ - výstupní funkce
|
||||
- **použití**
|
||||
- pro popis systémů s pulzními výstupy
|
||||
|
||||
Automat Mooreova typu
|
||||
- výstupní posloupnost určena **posloupností stavů**, kterými automat při zpracování řetězce prošel
|
||||
- výstupní řetězec má délku $n + 1$
|
||||
- **definice**: $A = \left( Q, \sum, O, \delta, q_{o}, \lambda \right)$
|
||||
- $Q$ - konečná neprázdná množina stavů
|
||||
- $\sum$ - konečná neprázdná množina vstupních symbolů
|
||||
- $O$ - konečná neprázdná množina výstupních symbolů
|
||||
- $q_{0} \in Q$ - počáteční stav
|
||||
- $\delta : Q \times \sum \to Q$ - přechodová funkce
|
||||
- $\lambda : Q \to O$ - výstupní funkce
|
||||
- **použití**
|
||||
- pro popis systémů s hladinovými výstupy
|
||||
|
||||
**Konfigurace automatu, ekvivalence rozpoznávacích automatů**
|
||||
- konfigurací automatu $A = (Q, \sum, \delta, q_{0}, F)$ je každá uspořádaná dvojice $(q, v) \in Q \times \sum *$
|
||||
- $q$ - aktuální stav automatu
|
||||
- $v$ - doposud nezpracovaná část řetězce
|
||||
- automaty $A_{1}$ a $A_{2}$ jsou ekvivalentní, jestliže $L(A_{1}) = L(A_{2})$
|
||||
- automaty jsou ekvivalentní, pokud rozpoznávají stejný jazyk
|
||||
- ekvivalentní mohou být i automaty, které nemají stejný počet stavů
|
||||
|
||||
**Způsob popisu konečných automatů**
|
||||
- přechodový graf (stavový diagram)
|
||||
- tabulka
|
||||
- stavový strom
|
||||
|
||||
**Zobecněná přechodová funkce deterministického konečného automatu, její vztah k přechodové funkci**
|
||||
- přechodová funkce: $\delta: Q \times \sum \to Q$
|
||||
- definiční obor zobecněné funkce $\delta^*$
|
||||
- $D(\delta^*) = Q \times \sum^* = Q \times \left( \{e\} \cup \sum \cup \sum^2 \cup \dots \right)$
|
||||
- $D(\delta) \subseteq D(\delta^*), \quad \delta^*(q, a) = \delta(q, a) \, \forall q \in Q, \forall a \in \sum$
|
||||
- zobecněná přechodová funkce je jednoznačně určena přechodovou funkcí
|
||||
- lze ji vyjádřit rekurzivně pomocí přechodové funkce
|
||||
- $\delta^*(q, wa) = \delta(\delta^*(q, w)a), \delta^*(q, e) = q$
|
360
KIV TI/02. Jazyky a gramatiky.md
Normal file
360
KIV TI/02. Jazyky a gramatiky.md
Normal file
|
@ -0,0 +1,360 @@
|
|||
# Jazyky
|
||||
|
||||
Množinový přístup k pojmu jazyk nad abecedou; abeceda, uzávěr abecedy, iterace abecedy
|
||||
- **abeceda**
|
||||
- značení: $\sum = \{a, b, c\}$
|
||||
- konečná neprázdná množina symbolů
|
||||
- prvky abecedy: písmena
|
||||
- **řetězec (slovo)**
|
||||
- značení: $ab, aacabaaab, e$
|
||||
- $e, \lambda$ - prázdný řetězec
|
||||
- libovolná konečná posloupnost písmen abecedy
|
||||
|
||||
+ **uzávěr abecedy** $\sum$
|
||||
+ značení: $\sum^+$
|
||||
- množina všech neprázdných řetězců vytvořených z písmen abecedy $\sum$
|
||||
+ **iterace abecedy** $\sum$
|
||||
+ značení: $\sum^*$
|
||||
+ množina všech řetězců vytvořených z písmen abecedy $\sum$
|
||||
+ zřejmé: $\sum^* = \sum^+ \cup \, \{e\}$
|
||||
- **jazyk $L$ nad abecedou $\sum$**
|
||||
- libovolná množina řetězců nad abecedou $\sum$, tedy $L \subseteq \sum^*$
|
||||
- jazyky chápeme jako množiny
|
||||
|
||||
### Operace
|
||||
|
||||
Operace nad řetězci, operace nad jazyky (zřetězení, mocnina, reverze, délka řetězce, sjednocení, průnik, doplněk, rozdíl, zřetězení jazyků)
|
||||
- **řetězce** $u$ a $v$
|
||||
- zřetězení
|
||||
- $\sum^* \times \sum^* \to \sum^*$
|
||||
- $u \cdot v = a_{1}a_{2}\dots a_{n}b_{1}b_{2}\dots b_{n}$
|
||||
- mocnina
|
||||
- $\sum^* \times \, N_{0} \to \sum^*$
|
||||
- $u^0 = e$
|
||||
- $u^1 = u$
|
||||
- $u^2 = u \cdot u$
|
||||
- reverze (obrácení)
|
||||
- $\sum^* \to N_{0}$
|
||||
- $u^R = a_{n}a_{n-1}\dots a_{1}$
|
||||
- délka
|
||||
- $|u| = n$
|
||||
- $|e| = 0$
|
||||
- **jazyky**
|
||||
- sjednocení
|
||||
- $L = L_{1} \cup L_{2}$
|
||||
- průnik
|
||||
- $L = L_{1} \cap L_{2}$
|
||||
- doplněk
|
||||
- $L = \overline{L_{1}}$
|
||||
- rozdíl
|
||||
- $L = L_{1} / L_{2}$
|
||||
- zřetězení
|
||||
- $L = L_{1} \cdot L_{2} = L_{1}L_{2}$
|
||||
- $A = \{a, b, c\}, B = \{0, 1\}$
|
||||
- $AB = \{a0, a1, b0, b1, \dots\}$
|
||||
|
||||
### Popis
|
||||
|
||||
- množinový
|
||||
- výčtem
|
||||
- společnou vlastností řetězců
|
||||
- akceptační
|
||||
- automatem, který jazyk rozpoznává
|
||||
- každý rozpoznávací automat jednoznačně definuje jazyk jako **množinu všech řetězců**, které automat převedou z počátečního stavu do některého z koncových stavů
|
||||
- nemusí být konečný (existují i jiné automaty)
|
||||
- generativní
|
||||
- pravidly pro vytváření řetězců, tedy **gramatikou**
|
||||
- popsání správných řetězců pomocí formálních pravidel
|
||||
- pomocí pravidel možné generovat řetězce patřící do jazyka
|
||||
- **přepisovací pravidla**
|
||||
- postupně nahrazujeme pomocné symboly
|
||||
- odvozování končí, pokud nezbývají žádné pomocné symboly
|
||||
|
||||
Jazyk akceptovaný deterministickým konečným rozpoznávacím automatem - definice
|
||||
- automat $A\left( Q, \sum, \delta, q_{0}, F \right)$ akceptuje jazyk $L(A) = \left\{ w; w \in \sum^* \wedge \, \delta^*(q_{0}, w) \in F \right\}$
|
||||
- TODO
|
||||
|
||||
# Gramatika
|
||||
|
||||
Definice formální gramatiky:
|
||||
|
||||
Uspořádaná čtveřice $G = (N, T, S, P)$
|
||||
- $N$ - množina neterminálních symbolů
|
||||
- $T$ - množina terminálních symbolů
|
||||
- $N \cap T = \emptyset$
|
||||
- $S \in N$ - počáteční symbol
|
||||
- $P$ - množina přepisovacích pravidel ve tvaru $\alpha \to \beta$
|
||||
- $\alpha \in (N \cup T)^* N (N \cup T)$
|
||||
- na levé straně alespoň jeden neterminální symbol
|
||||
- $\beta \in (N \cup T)^*$
|
||||
- na pravé straně může být i prázdný řetězec
|
||||
|
||||
Běžné konvence
|
||||
- neterminální symboly: <podmět>, <identifikátor>, ... nebo S, A, B, C
|
||||
- terminální symboly: 0, 1, 2, ... nebo a, b, c, d, f, ...
|
||||
- řetězce: $\alpha, \beta, \gamma, \delta,$ ... nebo u, v, w, x, y, z
|
||||
|
||||
## Chomského klasifikace gramatik
|
||||
|
||||
+ gramatiky klasifikovány do 4 tříd
|
||||
- třídy: 0, 1, 2, 3
|
||||
- určující pro zařazení gramatiky je nejvyšší třída, jejímž pravidlům gramatika vyhovuje
|
||||
- všechny gramatiky vyhovují pravidlům pro gramatiky třídy 0
|
||||
- každá další (tj. vyšší) třída zpřísní formální požadavky na tvar přepisovacích pravidel
|
||||
- nejužší třída 3 obsahuje gramatiky generující jazyky rozpoznatelné KA
|
||||
|
||||
### Generace řetězců gramatikou
|
||||
|
||||
Generování řetězců gramatikou, přímé přepsání, přepsání, jazyk generovaný gramatikou
|
||||
- gramatika $G$ generuje jazyk $L(G)$ jako množinu všech terminálních řetězců, které lze v gramtice odvodit z počátečního symbolu
|
||||
- mějme řetězce
|
||||
- $w \in (N \cup T)^* N (N \cup T)^*$
|
||||
- $z \in (N \cup T)^*$
|
||||
- **přímé přepsání**
|
||||
- řetězec $w$ lze přímo přepsat na $z$ právě tehdy, když existují řetězce $x_{1}, x_{2}, u, v \in (N \cup T)^*$ takové, že zároveň platí
|
||||
- $w = x_{1} \, u \, x_{2}$
|
||||
- $z = x_{1} \, v \, x_{2}$
|
||||
- $u \to v \in P$
|
||||
- značení: $w \implies z$
|
||||
- **přepsání**
|
||||
- řetězec $w$ lze přepsat na $z$ právě tehdy, když existují řetězce $w_{0}, w_{1}, \dots, w_{n} \in (N \cup T)^*$ takové, že
|
||||
- $w = w_{0} \implies w_{1} \implies \dots \implies w_{n} = z$
|
||||
- tato sekvence přepsání se nazývá odvozením (derivací) slova $z$ ze slova $w$
|
||||
- délka odvození je $n$
|
||||
- značení: $a \stackrel{*}{\implies} z$
|
||||
|
||||
**Odvození řetězců**
|
||||
- vyjdeme z počátečního symbolu $S$
|
||||
- v dosud odvozeném řetězci najdeme levou stranu některého přepisovacího pravidla
|
||||
- řetězec přepíšeme tak, že tuto levou stranu nahradíme odpovídající pravou stranou, přičemž levý i pravý kontext zůstane zachován
|
||||
- takto postupujeme dokud nedojdeme k řetězci, který se skládá pouze z terminálních symbolů
|
||||
|
||||
#### Jazyk generovaný gramatikou
|
||||
|
||||
- množina všech terminálních řetězců, které lze v gramatice odvodit z počátečního symbolu
|
||||
- $L(G) = \{w | w \in T^* \wedge S \stackrel{*}{\implies} w\}$
|
||||
|
||||
### Typy gramatik
|
||||
|
||||
**Gramatika typu 0** (G0)
|
||||
- pravidla ve tvaru $\alpha \to \beta$
|
||||
- $\alpha \in (N \cup T)^* N (N \cup T)^*$
|
||||
- na levé straně musí být alespoň jeden neterminální symbol
|
||||
- $\beta \in (N \cup T)^*$
|
||||
- na pravé straně může být i prázdný řetězec
|
||||
|
||||
**Gramatika typu 1** (G1)
|
||||
- všechna pravidla jsou ve tvaru $\alpha X \beta ⟶ \alpha \gamma \beta$
|
||||
- $\alpha, \beta \in (N \cup T)^*$
|
||||
- $X \in N$
|
||||
- $\gamma \in (N \cup T)^+$
|
||||
- **výjimka**: v gramatice může být pravidlo $S \to e$, pak se ale S nesmí vyskytnout na pravé straně přepisovacích pravidel
|
||||
- **názvy**: kontextová gramatika, context sensitive grammar (CSG), nevypouštěcí gramatika
|
||||
|
||||
**Gramatika typu 2** (G2)
|
||||
- všechna pravidla jsou ve tvaru $X \to \gamma$
|
||||
- $X \in N$
|
||||
- $\gamma \in (N \cup T)^*$
|
||||
- **názvy**: bezkontextová gramatika, ontext free grammar
|
||||
(CFG)
|
||||
- nejpoužívanější gramatiky jsou G2
|
||||
- nejpropracovanější metody syntaktické analýzy
|
||||
|
||||
Srovnání kontextových a bezkontextových gramatik
|
||||
- kontextová: $\quad \alpha X \beta \to \alpha \gamma \beta\quad$ (pravidlo 1)
|
||||
- bezkontextová: $\quad X \to \gamma\quad$ (pravidlo 2)
|
||||
+ podle pravidla 1 může dojít k substituci $X$ za $\gamma$ pouze ve „správném kontextu“ (tj. „zleva $\alpha$, zprava
|
||||
$\beta$“ )
|
||||
+ podle pravidla 2 může dojít k substituci $X$ za $\gamma$ kdykoli
|
||||
|
||||
**Gramatika typu 3**
|
||||
- gramatiky typu 3 pravé (G3P)
|
||||
- všechna pravidla jsou ve tvaru $X \to w$ nebo $X \to w Y$
|
||||
- $X, Y \in N, w \in T^*$
|
||||
- gramatiky typu 3 levé (G3L)
|
||||
- všechna pravidla jsou ve tvaru $X \to w$ nebo $X \to Y w$
|
||||
- $X, Y \in N, w \in T^*$
|
||||
- **názvy**: pravá lineární gramatika, levá lineární gramatika
|
||||
|
||||
Jak určit gramatiku?
|
||||
- gramatika je typu $i$, jsou-li všechna pravidla typu $i$ nebo vyššího $\implies$ o typu gramatiky rozhoduje „nejhorší pravidlo“ (pravidlo s nejnižším typem)
|
||||
- vyskytují-li se v gramatice současně pravidla typu G3P a G3L, nejedná se o gramatiku typu G3, ale (v nejlepším případě) o typ G2
|
||||
- pravidla, která se mohou vyskytnout v G3P i G3L, označujeme jako pravidla typu G3 (symetrická)
|
||||
- tvar pravidel u G1 je takový, že existují gramatiky typu G2 a G3, které mu nevyhovují (mohou obsahovat pravidla $X \to e$, kde $X \in N$; proto je v obrázku třída G1 vyznačena jen čárkovaně, zakreslení není zcela korektní
|
||||
|
||||
#### Typy jazyků
|
||||
|
||||
Typy jazyků, hierarchické uspořádání tříd jazyků, hierarchie modelů jejich syntaktických analyzátorů
|
||||
|
||||
Jazyk $L$ je typu $i$ jestliže existuje gramatika $G$ typu $i$ taková, že $L = L(G)$.
|
||||
- typ jazyka je typ nejvyšší gramatiky, která generuje jazyk
|
||||
|
||||
| třída | název | model syntaktického analyzátoru |
|
||||
| ----- | ------------------------------ | ------------------------------------- |
|
||||
| **0** | rekurzivně vyčíslitelné jazyky | Turingův stroj |
|
||||
| **1** | kontextové jazyky | lineárně omezený Turingův stroj |
|
||||
| **2** | bezkontextové jazyky | nedeterministický zásobníkový automat |
|
||||
| **3** | regulární jazyky | konečný automat |
|
||||
|
||||
Největší praktické použití mají bezkontextové jazyky. Současné programovací a specifikační jazyky jsou vesměs třídy 2.
|
||||
|
||||
#### Cesta od gramatiky typu G3P ke konečnému automatu (obecný popis)
|
||||
|
||||
- ke každé gramatice typu G3P existuje ekvivalentní gramatika s pravidly ve tvaru $X \to aY$ nebo $X \to e$, kde $X, Y \in N$ a $a \in T$
|
||||
- pojem KA zobecníme na nedeterministický konečný automat, který bude připouštět nejednoznačné přechody
|
||||
- ke každému nedeterministickému konečnému automatu existuje konečný automat ve smyslu dosavadní definice
|
||||
|
||||
#### Převod gramatiky G3P na regulární tvar
|
||||
|
||||
Tvrzení: Ke každé gramatice $G = (N, T, S ,P)$ typu G3P existuje gramatika $G' = (N', T', S', P')$ s pravidly v regulárním tvaru $X \to aY$ nebo $X \to e$, kde $X, Y \in N$ a $a \in T$, taková, že $L(G) = L(G')$.
|
||||
|
||||
Postup pro konstrukci ekvivalentní gramatiky v regulárním tvaru:
|
||||
1. množina $T$ a počáteční symbol $S$ jsou v $G'$ stejné jako v $G$
|
||||
2. množinu přepisovacích pravidel $P'$ zkonstruujeme takto:
|
||||
1. do $P'$ zařadíme všechna pravidla z $P$, která jsou v pořadovaném regulárním tvaru $X \to aY$ nebo $X \to e$, kde $X, Y \in N$ a $a \in T$
|
||||
2. za pravidla $X \to x_{1}x_{2}\dots x_{n}Y$ z $P (X, Y \in N, x_{i} \in T)$ přidáme do $P'$ soustavu pravidel:
|
||||
- $X \to x_{1}X_{1}$
|
||||
- $X_{1} \to x_{2}X_{2}$
|
||||
- ...
|
||||
- $X_{n-2} \to x_{n-1}X_{n-1}$
|
||||
- $X_{n-1} \to x_{n}X_{n}$
|
||||
3. za každé pravidlo $X \to z_{1}z_{2}\dots z_{n}$ z $P (X \in N, z_{i} \in T)$ přidáme do $P'$ soustavu pravidel:
|
||||
- $X \to z_{1}Z_{1}$
|
||||
- $Z_{1} \to z_{2}Z_{2}$
|
||||
- ...
|
||||
- $Z_{n-1} \to z_{n}Z_{n}$
|
||||
- $Z_{n} \to e$
|
||||
4. místo pravidel tvaru $X \to Y$ z $P$ přidáme do $P'$ soustavu pravidel ve tvaru:
|
||||
- $Z' \to zZ'' \space \forall \, Z' \in U(Y) \space \forall \, Y \to zZ''$
|
||||
- kde $U(Y) = \{X | X \stackrel{*}{\implies} Y\}$
|
||||
3. množina neterminálních symbolů $N'$ vznikne obohacením množiny $N$ o všechny nové neterminální symboly vytvořené v bodech 2.2 a 2.3
|
||||
|
||||
Poznámky k praktickému provedení transformace:
|
||||
- provedení bodů 2.2 a 2.3 je triviální (dochází k postupnému odřezávání terminálních symbolů)
|
||||
- k provedení bodu 2.4 je u složitějších gramatik vhodné nakreslit pomocný graf, který bude zobrazovat pravidla tvaru $X \to Y$ a z něj vyčíst všechny množiny U(X)
|
||||
- důležitým faktorem je udržet si přehled v tom, která pravidla jsem již zpracoval (nahradil ekvivalentními soustavami pravidel), je tedy vhodné si zpracovaná pravidla v zadání označovat (odškrtávat)
|
||||
|
||||
# Nedeterministický rozpoznávací KA
|
||||
|
||||
$A = \left( Q, \sum, \delta, S, F \right)$
|
||||
|
||||
- $Q$ - konečná neprázdná množina stavů
|
||||
- $\sum$ - konečná neprázdná množina vstupních symbolů
|
||||
- $S \subseteq Q$ - množina počátečních stavů
|
||||
- $\delta : Q \times \left( \sum \cup \{e\} \right) \to 2^Q$ - přechodová funkce
|
||||
- $F \subseteq Q$ - množina koncových stavů
|
||||
|
||||
poznámky:
|
||||
- na začátku se automat nachází v některém ze stavů množiny $S$
|
||||
- $e$-hrany může (ale nemusí) provádět automat samovolně
|
||||
- obor hodnot přechodové funkce $2^Q$ představuje množinu všech podmnožin stavové množiny $Q$
|
||||
- pro konkrétní stav a vstupní písmeno může být hodnotou funkce více než jeden následující stav
|
||||
- automat je vždy pouze v jednom stavu, přejde vždy do některého z možných
|
||||
|
||||
### Typy nedeterminismu
|
||||
|
||||
- **nejednoznačně určený počáteční stav** (může jich být více)
|
||||
- **nejednoznačné přechody** (více přechodů ze stavu se stejným znakem)
|
||||
- **možnost samovolného přechodu** ($e$-přechody)
|
||||
|
||||
### Řetězec akceptovaný NKA
|
||||
|
||||
- u deterministického KA je možné určit, do jakého stavu se zpracováním řetězce dostal, u NKA to možné není
|
||||
|
||||
Řetězec $w$ je NKA akceptován právě tehdy, jestliže v přechodovém grafu existuje alespoň jedna cesta, jejíž hrany jsou ohodnoceny písmeny řetězce $w$ (nebo symboly $e$), která začíná v některém z počátečních stavů a končí v některém z koncových stavů.
|
||||
|
||||
- prázdný řetězec $e$ je akceptován, pokud existuje průnik mezi $S$ a $F$ nebo když existuje cesta složená z $e$-hran z některého počátečního stavu do některého koncového
|
||||
- **různé možnosti zpracování** řetězce chápeme jako **různé výpočty**
|
||||
|
||||
Závěr
|
||||
- ke každému NKA existuje ekvivalentní KA
|
||||
- KA a NKA rozpoznávají tutéž třídu jazyků
|
||||
|
||||
### Převod NKA na ekvivalentní (D)KA
|
||||
|
||||
Popis převodu (bez $e$-hran)
|
||||
- předem nelze určit počet stavů ekvivalentního KA
|
||||
- počáteční stav KA odpovídá množině počátečních stavů NKA
|
||||
- stavy KA vytváříme postupně tak, že vyhodnocujeme přechodovou funkci $\delta'$ pro již vypočítané stavy KA (začínáme od počátečního stavu)
|
||||
- hodnota přechodové funkce $\delta'$ pro konkrétní podmnožinu $K \subseteq Q$ a konkrétní vstupní písmeno $x$ se získá jako sjednocení hodnot funkce $\delta$ pro všechny prvky množiny $K$ a vstupní písmeno $x$
|
||||
- koncovými stavy KA (tedy množinou $F'$) budou všechny stavy, které v sobě obsahují některý z koncových stavů výchozího NKA (tedy množiny $F$)
|
||||
|
||||
K sestrojení NKA k levé lineární gramatice je potřeba provést její reverzi, poté převod a následně reverzi automatu.
|
||||
|
||||
#### Reverze gramatiky
|
||||
|
||||
Reverzní gramatika $G^R$ ke gramatice $G$ je gramatika, které má na levé i pravé straně převrácené řetězce z gramatiky $G$.
|
||||
- příklad
|
||||
- $G$
|
||||
- $S \to aS$
|
||||
- $aS \to bA | bba$
|
||||
- $A \to abb$
|
||||
- $G^R$
|
||||
- $S \to Sa$
|
||||
- $Sa \to Ab | abb$
|
||||
- $A \to bba$
|
||||
|
||||
#### Reverze rozpoznávacího NKA
|
||||
|
||||
Reverzní automat $A^R$ k automatu $A$ je automat, v jehož přechodovém grafu jsou obráceny orientace všech šipek (obrací se orientace přechodových hran a zamění se počáteční a koncové stavy).
|
||||
|
||||
### Ekvivalentní KA k NKA s $e$-hranami
|
||||
|
||||
- nejprve je potřeba vytvořit ekvivalentní NKA bez $e$-hran
|
||||
- poté k němu vytvoříme ekvivalentní KA známým způsobem
|
||||
|
||||
Ekvivalence odstranění $e$-hran
|
||||
- pro každý stav $X$ je potřeba vytvořit množinu $e$-následníků, tedy stavů, které jsou ze stavu $X$ dosažitelné cestami složenými z $e$-hran
|
||||
- každý stav je $e$-následníkem sebe samého
|
||||
|
||||
Množiny $e$-následníků použijeme
|
||||
- k vytvoření přechodové tabulky ekvivalentního NKA bez $e$-hran tím, že stavy v množinách určující hodnoty funkce $\delta$ nahradíme všemi jejich $e$-následníky
|
||||
- k vytvoření počátečního stavu ekvivalentního KA tím, že každý počáteční stav v množině $S$ nahradíme všemi jeho $e$-následníky
|
||||
|
||||
# Regulární výrazy
|
||||
|
||||
**Regulární množiny**
|
||||
- regulární množina je regulární jazyk (množina řetězců, ke které existuje konečný automat, který ji rozpozná)
|
||||
|
||||
Regulární množina nad abecedou $\sum$ je definována rekurzivně takto:
|
||||
1. $\emptyset$ je regulární množina
|
||||
2. $\{ e \}$ je regulární množina
|
||||
3. $\{ a \}$ je regulární množina $\forall \, a \in \sum$
|
||||
4. jsou-li $P$ a $Q$ regulární množiny, pak
|
||||
1. $P \cup Q$ je regulární množina
|
||||
2. $P \cdot Q$ je regulární množina
|
||||
3. $P^*$ a $Q^*$ jsou regulární množiny
|
||||
5. neexistují žádné jiné regulární množiny
|
||||
|
||||
**Regulární výrazy**
|
||||
1. $\emptyset$ je regulární výraz označující regulární množinu $\emptyset$
|
||||
2. $e$ je regulární výraz označující regulární množinu $\{ e \}$
|
||||
3. $a$ je regulární výraz označující regulární množinu $\{ a \} \quad \forall \, a \in \sum$
|
||||
4. jsou-li $p$ a $q$ regulární výrazy označující regulární množiny $P$ a $Q$, pak
|
||||
1. $p + q$ je regulární výraz označující regulární množinu $P \cup Q$
|
||||
2. $p \cdot q$ je regulární výraz označující regulární množinu $P \cdot Q$
|
||||
3. $p^*$ a $q^*$ jsou regulární výrazy ozn. regulární množiny $P^*$ a $Q^*$
|
||||
5. neexistují žádné jiné regulární výrazy
|
||||
- vztah mezi regulární množinou a regulárním výrazem:
|
||||
- regulární výraz R **označuje** regulární množinu A
|
||||
- regulární množina A **je hodnotou** regulárního výrazu R
|
||||
- značení $A = \Vert R\Vert$
|
||||
### Souvislost s konečnými automaty
|
||||
|
||||
KA rozpoznávající regulární množiny
|
||||
- předpokládejme, že NKA má právě jeden počáteční a právě jeden koncový stav (pokud ne, doplníme $e$-hrany)
|
||||
|
||||
Sestrojení NKA akceptující jazyk popsaný RV
|
||||
- provádí se postupným rozkladem reg. výrazu R a odpovídající transformací zobecněného přechodového grafu
|
||||
- zobecněný přechodový graf = přechodový graf, kde ohodnocením hrany může být také regulární výraz
|
||||
- výchozí zobecněný přechodový graf
|
||||
- počáteční stav $S$
|
||||
- koncový stav $K$
|
||||
- hrana z $S$ do $K$ ohodnocená regulárním výrazem $R$
|
||||
- transformace grafu přidává nové stavy a nové přechodové hrany, čímž se zjednodušují regulární výrazy
|
||||
- proces končí, pokud jsou všechny hrany ohodnoceny písmenem $\sum$ nebo symbolem $e$
|
||||
- výsledkem je přechodový graf NKA
|
||||
|
||||
Sestrojení ekvivalentního RV z NKA
|
||||
- opačný postup
|
||||
|
Loading…
Reference in a new issue