Thompsonsova konstrukce - Thompsons construction - Wikipedia
v počítačová věda, Thompsonova konstrukce algoritmus, nazývaný také McNaughton-Yamada-Thompsonův algoritmus[1], je metoda transformace a regulární výraz do ekvivalentu nedeterministický konečný automat (NFA).[2] Tuto NFA lze použít odpovídat řetězcům proti regulárnímu výrazu. Tento algoritmus je připsán na Ken Thompson.
Regulární výrazy a nedeterministické konečné automaty jsou dvě reprezentace formální jazyky. Například, zpracování textu obslužné programy používají k popisu pokročilých vyhledávacích vzorců regulární výrazy, ale NFA jsou vhodnější pro spuštění v počítači. Proto je tento algoritmus praktického zájmu, protože může kompilovat regulární výrazy do NFA. Z teoretického hlediska je tento algoritmus součástí důkazu, že oba přijímají přesně stejné jazyky, tj. běžné jazyky.
NFA lze učinit deterministickou pomocí konstrukce výkonové sady a pak být minimalizováno získat optimální automat odpovídající danému regulárnímu výrazu. Může však být také NFA interpretováno přímo.
Chcete-li se rozhodnout, zda dva dané regulární výrazy popisují stejný jazyk, lze každý převést na ekvivalentní minimum deterministický konečný automat prostřednictvím konstrukce Thompsona, konstrukce výkonové sady, a Minimalizace DFA. Pokud a pouze pokud, výsledné automaty souhlasí až do přejmenování států, jazyky regulárních výrazů souhlasí.
Algoritmus
Algoritmus funguje rekurzivně rozdělením výrazu na jeho dílčí dílčí výrazy, ze kterých bude NFA vytvořena pomocí sady pravidel.[3] Přesněji řečeno, z regulárního výrazu E, získaný automat A s přechodovou funkcí δ respektuje následující vlastnosti:
- A má přesně jeden počáteční stav q0, který není přístupný z žádného jiného státu. To znamená pro každý stát q a jakýkoli dopis A, neobsahuje q0.
- A má přesně jeden konečný stav qF, který není společně přístupný z žádného jiného státu. To znamená pro jakýkoli dopis A, .
- Nechat C být počet zřetězení regulárního výrazu E a nechte s být počet symbolů kromě závorek - to znamená, |, *, A a ε. Poté počet stavů A je 2s − C (lineární ve velikosti E).
- Počet přechodů opouštějících libovolný stav je nejvýše dva.
- Vzhledem k tomu, NFA m státy a nanejvýš E přechody z každého stavu se mohou shodovat s délkovým řetězcem n včas Ó(emn), Thompson NFA může provádět porovnávání vzorů v lineárním čase za předpokladu abecedy pevné velikosti.[4][je zapotřebí lepší zdroj ]
Pravidla
Následující pravidla jsou znázorněna podle Aho et al. (2007),[1] str. 122. V následujícím textu N(s) a N(t) jsou NFA dílčích výrazů s a t, resp.
The prázdný výraz ε se převede na
A symbol A vstupní abecedy se převede na
The odborový výraz s|t je převeden na
Stát q jde přes ε buď do počátečního stavu N(s) nebo N(t). Jejich konečné stavy se stávají přechodnými stavy celého NFA a spojují se dvěma e-přechody do konečného stavu NFA.
The zřetězení výraz Svatý je převeden na
Počáteční stav N(s) je počáteční stav celého NFA. Konečný stav N(s) se stane počátečním stavem N(t). Konečný stav N(t) je konečný stav celého NFA.
The Kleene hvězda výraz s* je převeden na
Přechod ε spojuje počáteční a konečný stav NFA se sub-NFA N(s) mezi. Další přechod ε z vnitřního finále do vnitřního počátečního stavu N(s) umožňuje opakování výrazu s podle hvězdného operátora.
- The výraz v závorkách (s) se převede na N(s) sám.
S těmito pravidly pomocí prázdný výraz a symbol pravidla jako základní případy, je možné prokázat matematická indukce že jakýkoli regulární výraz lze převést na ekvivalentní NFA.[1]
Příklad
Nyní jsou uvedeny dva příklady, malý neformální s výsledkem a větší s aplikací algoritmu krok za krokem.
Malý příklad
Na následujícím obrázku je výsledek konstrukce Thompsona (ε | a * b)
. Růžový ovál odpovídá A, šedozelený ovál odpovídá A*, odpovídá zelený ovál b, oranžový ovál odpovídá a * ba modrý ovál odpovídá ε.
Aplikace algoritmu
Jako příklad ukazuje obrázek výsledek Thompsonova konstrukčního algoritmu pro regulární výraz (0|(1(01*(00)*0)*1)*)*
která označuje množinu binárních čísel, která jsou násobky 3:
- {ε, „0“, „00“, „11“, „000“, „011“, „110“, „0000“, „0011“, „0110“, „1001“, „1100“, „1111“ , „00000“, ...}.
Pravá horní část ukazuje logickou strukturu (strom syntaxe) výrazu s „.“ označující zřetězení (předpokládá se, že má proměnnou arity); dílčí výrazy jsou pojmenovány A-q pro referenční účely. Levá část ukazuje nedeterministický konečný automat vyplývající z Thompsonova algoritmu, s vstup a výstup stav každého subexprese barevného v purpurová a tyrkysováŠtítek ε jako přechod je kvůli jasnosti vynechán - neoznačené přechody jsou ve skutečnosti přechody ε. Vstupní a výstupní stav odpovídající kořenovému výrazu q je počáteční a přijímací stav automatu, resp.
Kroky algoritmu jsou následující:
q: | začněte převádět výraz hvězd Kleene | (0|(1(01*(00)*0)*1)*)* | ||||||||
b: | začít převádět odborový výraz | 0|(1(01*(00)*0)*1)* | ||||||||
A: | převést symbol | 0 | ||||||||
p: | začněte převádět výraz hvězd Kleene | (1(01*(00)*0)*1)* | ||||||||
d: | začněte převádět výraz zřetězení | 1(01*(00)*0)*1 | ||||||||
C: | převést symbol | 1 | ||||||||
n: | začněte převádět výraz hvězd Kleene | (01*(00)*0)* | ||||||||
F: | začněte převádět výraz zřetězení | 01*(00)*0 | ||||||||
E: | převést symbol | 0 | ||||||||
h: | začněte převádět výraz hvězd Kleene | 1* | ||||||||
G: | převést symbol | 1 | ||||||||
h: | dokončil převod výrazu Kleeneových hvězd | 1* | ||||||||
l: | začněte převádět výraz hvězd Kleene | (00)* | ||||||||
j: | začněte převádět výraz zřetězení | 00 | ||||||||
i: | převést symbol | 0 | ||||||||
k: | převést symbol | 0 | ||||||||
j: | dokončil převod výrazu zřetězení | 00 | ||||||||
l: | dokončil převod výrazu Kleeneových hvězd | (00)* | ||||||||
m: | převést symbol | 0 | ||||||||
F: | dokončil převod výrazu zřetězení | 01*(00)*0 | ||||||||
n: | dokončil převod výrazu Kleeneových hvězd | (01*(00)*0)* | ||||||||
Ó: | převést symbol | 1 | ||||||||
d: | dokončil převod výrazu zřetězení | 1(01*(00)*0)*1 | ||||||||
p: | dokončil převod výrazu Kleeneových hvězd | (1(01*(00)*0)*1)* | ||||||||
b: | dokončil převod odborového výrazu | 0|(1(01*(00)*0)*1)* | ||||||||
q: | dokončil převod výrazu Kleeneových hvězd | (0|(1(01*(00)*0)*1)*)* |
Ekvivalentní minimální deterministický automat je uveden níže.
Vztah k jiným algoritmům
Thompson's je jedním z několika algoritmů pro konstrukci NFA z regulárních výrazů;[5] dřívější algoritmus dali McNaughton a Yamada.[6] Konverzujte s konstrukcí Thompsona, Kleenův algoritmus transformuje konečný automat na regulární výraz.
Glushkovův konstrukční algoritmus je podobná Thompsonově konstrukci, jakmile jsou odstraněny přechody ε.
Reference
- ^ A b C Alfred Vaino Aho; Monica S. Lam; Ravi Sethi; Jeffrey D. Ullman (2007). „3.7.4 Konstrukce NFA z regulárního výrazu“ (tisk). Překladače: Zásady, techniky a nástroje (2. vyd.). Boston, MA, USA: Pearson Addison-Wesley. str.159–163. ISBN 9780321486813.
- ^ Louden, Kenneth C. (1997). „2.4.1 Od regulárního výrazu k NFA“ (tisk). Konstrukce kompilátoru: Principy a praxe (3. vyd.). 20 Park Plaza Boston, MA 02116-4324, USA: PWS Publishing Company. str. 64–69. ISBN 978-0-534-93972-4.CS1 maint: umístění (odkaz)
- ^ Ken Thompson (červen 1968). "Techniky programování: Algoritmus vyhledávání regulárních výrazů". Komunikace ACM. 11 (6): 419–422. doi:10.1145/363347.363387.
- ^ Xing, Guangming. „Minimized Thompson NFA“ (PDF).
- ^ Watson, Bruce W. (1995). Taxonomie konečných algoritmů konstrukce automatů (PDF) (Technická zpráva). Eindhoven University of Technology. Zpráva o počítačové vědě 93/43.
- ^ R. McNaughton, H. Yamada (březen 1960). "Regulární výrazy a stavové grafy pro automaty". Transakce IEEE na elektronických počítačích. 9 (1): 39–47. doi:10.1109 / TEC.1960.5221603.