Toggle menu
Toggle preferences menu
Toggle personal menu
Neprihlásený/á
Your IP address will be publicly visible if you make any edits.
Verzia z 08:56, 10. december 2024, ktorú vytvoril SKevo (diskusia | príspevky)
(rozdiel) ← Staršia verzia | Aktuálna úprava (rozdiel) | Novšia verzia → (rozdiel)

Automaty, ktoré pracujú s bezkontextovou gramatikou.


Bezkontextová gramatika

Je taká gramatika, kde pravidlá majú tvar: Aα, pričom AN (na ľavej strane je práve jeden neterminálny symbol); α(NT)+(na pravej strane je ľubovoľná neprázdna postupnosť neterminálnych alebo terminálnych symbolov).

Zásobníkový automat

Zásobník

Je to pamäť typu LIFO (last in: first out), kde prvok vložený ako posledný ide von prvý.

Zásobníkové automaty definujeme ako sedmicu:

A=(K,Σ,Γ,δ,q0 Z0,F)

  • A - označenie automatu;
  • K - konečná, neprázdna množina neterminálnych symbolov;
  • Σ - konečná, neprázdna množina terminálnych symbolov (znakov, ktoré automat rozpoznáva);
  • Γ (gamma) - zásobníková abeceda (symboly, ktoré sa môžu nachádzať v zásobníku);
  • δ - prechodové funkcie (napr.: orientovaný, ohodnotený multigraf - vizuálna reprezentácia automatu);
  • q0 - začiatočný prechod (musí patriť do množiny K);
  • Z0 - začiatočný zásobníkový symbol (ktorý symbol je v zásobníku ako prvý?);
  • F - množina konečných neterminálnych symbolov (stavov)

Zásobníkové automaty fungujú tak, že pri každom prechode (kroku výpočtu) môžeme prepísať posledný symbol v zásobníku na iný symbol, alebo postupnosť symbolov. Prechody obsahujú rôzne podmienky, teda môžeme vytvoriť algoritmy, ktoré prejdú po určitých prechodoch ak sa na vrchu zásobníka nachádza určitý symbol.

Podľa toho, či je množina stavov F prázdna (F=), rozlišujeme dva typy automatov:

  1. Automaty, ktoré rozpoznávajú koncovým stavom;
    • Dôležité je, či výpočet určitého slova skončí v koncovom stave, pričom neberieme do úvahy to, aké symboly sa nachádzajú v zásobníku.
  2. Automaty, ktoré rozpoznávajú prázdnou pamäťou;
    • Pri tomto spôsobe rozpoznávania musí byť prázdna pamäť (zásobník) pre to, aby slovo patrilo do daného jazyka.

Ak sa na automat pozrieme, vieme určiť spôsob rozpoznávania: ak obsahuje koncový stav, tak rozpoznáva koncovým stavom (teda, vidíme v zápise definovanú množinu F, alebo jednoducho v obrázku vidíme stav ktorý je označený ako koncový - je označený dvojitým kruhom). Tým pádom vieme aj určiť podmienku, ktorá je nutná pre to aby slovo patrilo do daného jazyka.

Ku každej bezkontextovej gramatike existuje zásobníkový automat. Tento prevod sa dá urobiť tiež naopak, ale je to ťažšie zrealizovať.

Úloha na zásobníkový automat

Povedzme, že máme zadaný graf automatu (teda, poznáme δ) a musíme tento automat vedieť popísať (teda, definovať A) a určiť, aké slová rozpoznáva a akým spôsobom.

{{#display_diagram:Drawio:Príklad zásobníkového automatu}}Povedzme, že máme zadané slovo w=aabbaabb, a máme na tomto slove zrealizovať výpočet a na základe toho určiť, čo daný automat robí.

Ak sa pozrieme na automat, vidíme že prechody obsahujú tri časti oddelené bodkočiarkou (;):

  1. Symbol, ktorý je na vstupe (túto časť prechodu už poznáme z automatov bez zásobníka);
  2. Symbol, ktorý sa nachádza na vrchu zásobníka - tento prechod môžeme použiť iba vtedy, ak sa tento symbol nachádza na vrchu zásobníka
  3. Symbol, ktorý sa má nahradiť na mieste posledného symbola v zásobníku - ak zrealizujeme tento prechod, nahradíme posledný symbol v zásobníku týmto symbolom (alebo viacerými symbolmi: napr. ak chceme pridať symbol, tak v podstate posledný symbol nahradíme rovnakým symbolom za ktorým bude nasledovať symbol ktorý chceme pridať - preto nehovoríme, že symboly môžeme pridávať, v podstate vždy iba symboly nahradzujeme).

Z týchto symbolov vieme určiť:

  • K={q0,qF} - množina neterminálnych symbolov predstavuje všetky vrcholy v grafe (v podstate iba vypíšeme všetky symboly v kruhoch);
  • Σ={a,b} - množina terminálnych symbolov obsahuje všetky symboly, ktoré sú v prechodoch na prvom mieste;
  • Γ={Z0,a,b} - množina zásobníkových symbolov obsahuje všetky symboly, ktoré sú v prechodoch na druhom mieste;
  • F={qF} - množina koncových stavov, v tomto prípade je tam práve jeden dvojitý kruh, a to qF.
    • Ak vieme, že do množiny F patrí práve jeden neterminálny symbol, vieme povedať že automat rozpoznáva koncovým stavom. Ak výpočet skončí v tomto stave, slovo je automatom akceptované a patrí do daného jazyka;
  • Výpočet začína v stave q0, začiatočný symbol v zásobníku je (podľa konvencie) Z0;

Z informácií vyššie vieme vytvoriť definíciu automatu (a áno, musí to byť presne v takomto poradí):

A=(K,Σ,Γ,δ,q0,Z0,F)

Výpočet slova:(q0;aabbab;Z0)(q0;abbab;aZ0)(q0;bbab;aaZ0)(q0;bab;aZ0)(q0;ab;Z0)(q0;ab;Z0)(q0;b;aZ0)(q0;ϵ;Z0)(qF;ϵ;Z0)