Překladový automat
Author
Albert FloresPřekladový automat je v podstatě zásobníkový automat, který však obsahuje navíc ještě výstupní pásku a je definován rozkladovou tabulkou.
Definice překladového automatu
Tvar konfigurace (stav) překladového automatu: (x, Z, π) * x = nepřečtená část vstupní pásky * Z = obsah zásobníku * π = obsah výstupní pásky
Tvar počáteční konfigurace: (w, S#, ε) * w = vstupní řetězec * S = startovací symbol * # = zásobníkový symbol, který představuje dno zásobníku
Popis překladového automatu
Překladový automat obsahuje zásobník, vstupní pásku, výstupní pásku a rozkladovou tabulku. Rozkladová tabulka nahrazuje přechodovou funkci. +more Překladový automat postupně čte symboly ze vstupní pásky, stejným způsobem pak pracuje i se zásobníkem, na výstupní pásku nakonec zapisuje levý rozklad vstupní věty (tj. čísla použitých pravidel).
Rozkladová tabulka
Rozkladová tabulka je zobrazení M: (∑ ∪ N ∪ {#}) ∙ (∑ ∪ {$}) ∪ {expand i, pop, accept, error}
Jednotlivé funkční hodnoty mají tento význam:
expand i: Je-li A::= α i-té pravidlo gramatiky, pak na vrcholu zásobníku je neterminál A, na vstupu je symbol x, M[A,x] = expand i. Automat provede změnu konfigurace (xm, Aβ, π) |- (xm, αβ, πi) - tzn. +more že do zásobníku umístí pravou stranu pravidla A::= α (řetězec α od konce). Vstupní pásky si automat nevšímá a na výstupní pásku zapíše číslo i.
pop: Jestliže je na vrcholu zásobníku a též na vstupní pásce tentýž terminál symbol x, pak automat provede změnu konfigurace (xm, xβ, π) |- (m, β, π), tzn. že automat odstraní symbol x z vrcholu zásobníku a na vstupní pásku se posune na další znak.
accept: K této hodnotě dojde automat v koncové konfiguraci, ale jen pokud přečte celou vstupní pásku a zároveň při tom vyprázdní zásobník. Na výstupní pásce se objeví úplný levý rozklad vstupní věty.
error: Znamená, že automat vstup nepřijal, vstupní řetězec tedy není větou jazyka.
Pravidla
# je-li A::= α i-té pravidlo gramatiky a α ≠ ε, pak pro všechny a ∈ FIRST(α) platí M[A,a] = expand i # jestliže ε ∈ FIRST(α), pak pro všechna b ∈ FOLLOW(A) M[A,b] = expand i # M[a,a] = pop, m[#,$] = accept, jinak M[X,a] = error
Příklad rozkladu tabulky
Zadaná pravidla:
:
1 | Předpis | číslo pravidla | množina FOLLOW |
---|---|---|---|
S ::= aAd | ε | center | 1,2 | FOLLOW(S) = {$} | |
A ::= bB | center | 3 | FOLLOW(A) = {d} | |
B ::= cbB | ε | center | 4,5 | FOLLOW(B) = {d} |
Rozkladová tabulka:
:
1 | Vstupní symbol | ||||
---|---|---|---|---|---|
Zásobník | a | b | c | d | $ |
S | expand1 | expand2 | |||
A | expand3 | ||||
B | expand4 | expand5 | |||
a | pop | ||||
b | pop | ||||
c | pop | ||||
d | pop | ||||
# | accept |