Zadávání formalismů pro popis regulárních jazyků

Konečné automaty (DFA, NFA, NFA s ε-kroky)

Pro popis konečného automatu je třeba zapsat iniciální stav, přechodovou funkci a množinu koncových stavů.

Počáteční stav lze explicitně definovat jako init=stav na počátku zápisu automatu. Není-li počáteční stav takto specifikován, pak je jako počáteční stav vyhodnocen ten, který se jako první objeví v přechodové funkci.

Přechodová funkce sestává z pravidel ve tvaru:

V nedeterminstických automatech s ε-kroky lze místo znaku v přechodové funkci zapsat přechod pod prázdným slovem pomocí znaku ε nebo \e. Pokud se pro stejnou dvojici (vstupní_stav,znak) objeví v přechodové funkci více přechodů, vyhodnocovací služba upozorní na možný problém.

Zápis množiny koncových stavů je final={koncový_stav1,koncový_stav2, ..., koncový_stavN}, je na samém konci zápisu a nelze jej vynechat.

Validní automat musí obsahovat alespoň jeden stav.

V názvech stavů a znaků lze použít malá i velká písmena anglické abecedy, číslice a znaky _ (!). Lze tvořit i víceznakové sekvence jako názvy stavů. Bílé znaky (mezera, tab, konec řádku) nemají na vyhodnocení automatu vliv.

Příklady:

Regulární výrazy

Základní regulární výrazy jsou znak, prázdné slovo a prázdný jazyk:

Další regulární výrazy vznikají použitím operací iterace, zřetězení a sjednocení:

Operace jsou seřazeny podle priority od nejvyšší po nejnižší, nejdříve se tedy budou vyhodnocovat iterace, po nich zřetězení a s nejnižší prioritou sjednocení. Regulární výrazy je možné uzavírat do jednoduchých závorek ( ( a ) ), mezery jsou ignorovány. Implicitní zřetězení (bez explicitního zápisu pomocí tečky) funguje pro sekvence znaků, iterovaných regulárních výrazů a regulárních výrazů v závorkách. Znak je tvořen vždy jen jedním písmenem, více znaků následujících za sebou se vyhodnotí jako jejich implicitní zřetězení (ab je ekvivalentní a.b).

Příklady:

Regulární gramatiky

Z gramatiky stačí definovat množinu pravidel ve tvaru S -> aS | a, kde S je neterminál a a je terminál. Více možných přepisů pro stejný neterminál lze zapsat jako více pravidel nebo také pomocí oddělovače |. Jednotlivá pravidla pro každý neterminál je třeba oddělit středníkem nebo koncem řádku. Jako šipku lze psát -> i unicodový znak .

Neterminál je tvořen (hovoříme o písmenech anglické abecedy):

Terminálem může být jedno malé písmeno anglické abecedy nebo číslo 0-9.

Regulární gramatika může také generovat prázdné slovo, pak lze v pravidle použít symbol ε nebo \e (ovšem pouze u iniciálního neterminálu, který se v tomto případě nesmí objevit v pravé straně žádného z pravidel).

Příklady

Bezkontextové gramatiky

Pro zápis CFG platí všechna pravidla jako pro regulární gramatiky kromě omezení tvaru pravidel. Pravé strany pravidel nemusí být jen typu samotný terminál nebo dvojice terminál a neterminál, ale mohou obsahovat terminály i neterminály v libovolné kombinaci.

Příklad