diff --git a/KIV TI/01. Konečné automaty.md b/KIV TI/01. Konečné automaty.md new file mode 100644 index 0000000..69e72b7 --- /dev/null +++ b/KIV TI/01. Konečné automaty.md @@ -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$ \ No newline at end of file diff --git a/KIV TI/02. Jazyky a gramatiky.md b/KIV TI/02. Jazyky a gramatiky.md new file mode 100644 index 0000000..e3508f8 --- /dev/null +++ b/KIV TI/02. Jazyky a gramatiky.md @@ -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: , , ... 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 +