Syntaxí řízený překlad Překladový automat Šárka Vavrečková Ústav informatiky, FPF SU Opava sarka.vavreckova@fpf.slu.cz Poslední aktualizace: 27. listopadu 2008
Zobecněný překladový automat Překladový automat Překladový automat budeme konstruovat pro zadaný překlad Z L 1 L 2. Účelem je pro každý vstup h i (w) L 1 vytvořit na výstupu h o (w) L 2. Vytváříme konečný překladový automat pro regulární překladovou gramatiku, zásobníkový překladový automat pro bezkontextovou překladovou gramatiku.
Zobecněný překladový automat Překladový automat Překladový automat budeme konstruovat pro zadaný překlad Z L 1 L 2. Účelem je pro každý vstup h i (w) L 1 vytvořit na výstupu h o (w) L 2. Vytváříme konečný překladový automat pro regulární překladovou gramatiku, zásobníkový překladový automat pro bezkontextovou překladovou gramatiku.
Konečný překladový automat Definice (Konečný překladový automat) je uspořádaná šestice KP A = (Q, T, D, δ, q 0, F ), kde Q je konečná neprázdná množina stavů automatu, T je konečná neprázdná množina vstupních symbolů, D je konečná množina výstupních symbolů, D T =, δ je přechodová funkce automatu, δ : Q T P(Q D ) (u nedeterministického automatu by výsledkem zobrazení byla množina), q 0 Q je počáteční stav, F Q je množina koncových stavů automatu.
Definice (Konfigurace) Konfigurace konečného překladového automatu KP A = (Q, T, D, δ, q 0, F ) je uspořádaná trojice (q, x, y) Q T D. Počáteční konfigurace je (q 0, w, ε), kde w je vstupní řetězec (řetězec vstupních symbolů). Koncová konfigurace je (q f, ε, y), kde q f F, y je výstupní řetězec (řetězec výstupních symbolů).
Definice Překlad definovaný konečným překladovým automatem KP A = (Q, T, D, δ, q 0, F ) je množina uspořádaných dvojic Z(KP A) = {(u, v) ; (q 0, u, ε) (q f, ε, v), q f F }.
Činnost konečného překladového automatu Činnost automatu KP A = (Q, T, D, δ, q 0, F ) probíhá takto: na vstupu je vstupní řetězec složený ze symbolů množiny T, automat postupně čte vstupní řetězec a podle znaků v tomto řetězci přechází mezi stavy, při každém přechodu může na výstupní pásku přidat řetězec z množiny D, výpočet končí tehdy, když je přečteno vstupní slovo a automat je v některém z koncových stavů.
Činnost konečného překladového automatu Činnost automatu KP A = (Q, T, D, δ, q 0, F ) probíhá takto: na vstupu je vstupní řetězec složený ze symbolů množiny T, automat postupně čte vstupní řetězec a podle znaků v tomto řetězci přechází mezi stavy, při každém přechodu může na výstupní pásku přidat řetězec z množiny D, výpočet končí tehdy, když je přečteno vstupní slovo a automat je v některém z koncových stavů.
Činnost konečného překladového automatu Činnost automatu KP A = (Q, T, D, δ, q 0, F ) probíhá takto: na vstupu je vstupní řetězec složený ze symbolů množiny T, automat postupně čte vstupní řetězec a podle znaků v tomto řetězci přechází mezi stavy, při každém přechodu může na výstupní pásku přidat řetězec z množiny D, výpočet končí tehdy, když je přečteno vstupní slovo a automat je v některém z koncových stavů.
Činnost konečného překladového automatu Činnost automatu KP A = (Q, T, D, δ, q 0, F ) probíhá takto: na vstupu je vstupní řetězec složený ze symbolů množiny T, automat postupně čte vstupní řetězec a podle znaků v tomto řetězci přechází mezi stavy, při každém přechodu může na výstupní pásku přidat řetězec z množiny D, výpočet končí tehdy, když je přečteno vstupní slovo a automat je v některém z koncových stavů.
Sestrojení konečného automatu podle gramatiky Je dána regulární překladová gramatika P G = (N, T, D, R, S). Sestrojíme podle ní konečný překladový automat KP A = (Q, T, D, δ, q 0, F ) takto: Q = N {X}, X / N je nově přidaný stav, množiny T a D jen přejmeme jako vstupní a výstupní abecedu, q 0 = S, jestliže A aγb, a T, γ D je pravidlo gramatiky P G, tak definujeme δ(a, a) (B, γ) jestliže A aγ, a T, γ D je pravidlo gramatiky P G, tak definujeme δ(a, a) (X, γ) jestliže ε L(P G), pak F = {S, X}, jinak F = {X}.
Zadání Sestavte konečný překladový automat, který provádí inverzní zobrazení nad abecedou {0, 1}. Řešení KP A = ({q}, {0, 1}, { 0, 1 }, δ, q, {q}), s přechodovou funkcí δ: 0 1 δ(q, 0) = (q, 1 ) q 1 0 δ(q, 1) = (q, 0 ) Ukázka zpracování slova 110101: (q, 110101, ε) (q, 10101, 0 ) (q, 0101, 0 0 ) (q, 101, 0 0 1 ) (q, 01, 0 0 1 0 ) (q, 1, 0 0 1 0 1 ) (q, ε, 0 0 1 0 1 0 )
Zadání Sestavte konečný překladový automat, který provádí inverzní zobrazení nad abecedou {0, 1}. Řešení KP A = ({q}, {0, 1}, { 0, 1 }, δ, q, {q}), s přechodovou funkcí δ: 0 1 δ(q, 0) = (q, 1 ) q 1 0 δ(q, 1) = (q, 0 ) Ukázka zpracování slova 110101: (q, 110101, ε) (q, 10101, 0 ) (q, 0101, 0 0 ) (q, 101, 0 0 1 ) (q, 01, 0 0 1 0 ) (q, 1, 0 0 1 0 1 ) (q, ε, 0 0 1 0 1 0 )
Zadání Podle regulární gramatiky sestrojte konečný překladový automat. S a a A a a A B +C B a a A a a C a a + A a a + Řešení KP A = ({S, A, B, C, X}, {a, +, }, { a, +, }, δ, S, {X}), s přechodovou funkcí δ:
Zadání Podle regulární gramatiky sestrojte konečný překladový automat. S a a A a a A B +C B a a A a a C a a + A a a + Řešení KP A = ({S, A, B, C, X}, {a, +, }, { a, +, }, δ, S, {X}), s přechodovou funkcí δ: δ(s, a) = {(A, a ), (X, a )} δ(a, ) = {(B, ε)} δ(a, +) = {(C, ε)} δ(b, a) = {(A, a ), (X, a )} δ(c, a) = {(A, a + ), (X, a + )}
Zadání Podle regulární gramatiky sestrojte konečný překladový automat. S a a A a a A B +C B a a A a a C a a + A a a + Řešení KP A = ({S, A, B, C, X}, {a, +, }, { a, +, }, δ, S, {X}), s přechodovou funkcí δ: a + S (A, a ), (X, a ) A (C, ε) (B, ε) B (A, a ), (X, a ) C (A, a + ), (X, a + )
Zásobníkový překladový automat Definice (Zásobníkový překladový automat) je uspořádaná 8-ce ZP A = (Q, T, Γ, D, δ, q 0, Z 0, F ), kde Q je množina vnitřních stavů, T je množina vstupních symbolů, Γ je množina zásobníkových symbolů, D je množina výstupních symbolů, D T =, δ je zobrazení δ : Q (T {ε}) Γ P(Q Γ D ) (přechodová funkce automatu), q 0 Q je počáteční stav, Z 0 Γ je počáteční symbol na zásobníku, F Q je množina koncových stavů.
Definice (Konfigurace) Konfigurace zásobníkového překladového automatu má tvar (q, x, α, y) Q T Q D. Počáteční konfigurace je (q 0, w, Z 0, ε), kde w T je vstupní řetězec. Koncová konfigurace je definována podobně jako u běžného ZA podle typu automatu.
Definice Překlad definovaný zásobníkovým překladovým automatem ZP A = (Q, T, Γ, D, δ, q 0, Z 0, F ) je množina uspořádaných dvojic Z(ZP A) = { (u, v) ; (q 0, u, Z 0, ε) (q, ε, α, v), kde (q, ε, α, v) je koncová konfigurace }.
Sestrojení zásobníkového automatu podle gramatiky Máme překladovou gramatiku P G = (N, T, D, R, S). Sestrojíme překladový zásobníkový automat ZP A = (Q, T, Γ, D, δ, q 0, Z 0, ) Q = {q}, Γ = N T D, q 0 = q, Z 0 = S, δ funkce: Podle pravidel A α v R δ(q, ε, A) (q, α, ε) Vstupy pro každé a T δ(q, a, a) = (q, ε, ε) Výstupy pro každé a D δ(q, ε, a ) = (q, ε, a )
Rozkladová tabulka Rozkladová tabulka pro LL(1) překladovou gramatiku vypočteme potřebné množiny F IRST a F OLLOW vstupní gramatiky, ověříme, zda jde o LL(1) gramatiku (vstupní), vytvoříme rozkladovou tabulku vstupní gramatiky (výstupní symboly se nemohou objevit na vstupní pásce, podle které se řídíme).
Postup Rozkladová tabulka zjistíme množiny FIRST a FOLLOW vstupní gramatiky, ověříme, zda je vstupní gramatika typu LL(1), vytvoříme rozkladovou tabulku vstupní gramatiky (výstupní symboly se nemohou objevit na vstupní pásce, podle které se řídíme). Reakce na symboly v zásobníku 1 neterminál: expandujeme podle daného pravidla, ale číslo pravidla nezapisujeme na výstup 2 vstupní terminál: voláme proceduru (funkci) pop (podle rozkladové tabulky) 3 výstupní terminál: přeneseme na výstup
Gramatika Příklad P G = ({S, A, B, C, D}, {n, +,,, /, (, )}, { n, +,,, / }, R, S) S AB 1 A CD 2 B +A + B A B ε 3, 4, 5 C (S) i i n n 6, 7, 8 D C D /C / D ε 9, 10, 11 Rozkladová tabulka vstupní gramatiky i n + / ( ) $ S e1 e1 e1 A e2 e2 e2 B e3 e4 e5 e5 C e7 e8 e6 D e11 e11 e9 e10 e11 e11
i n + / ( ) $ S e1 e1 e1 A e2 e2 e2 B e3 e4 e5 e5 C e7 e8 e6 D e11 e11 e9 e10 e11 e11 Zpracování vstupu podle tabulky (n+i n$, S#, ε) (n+i n$, AB#, ε) (n+i n$, CDB#, ε) (n + i n$, n n DB#, ε) (+i n$, n DB#, ε) (+i n$, DB#, n ) (+i n$, B#, n ) (+i n$, +A + B#, n ) (i n$, A + B#, n ) (i n$, CD + B#, n ) (i n$, i i D + B#, n ) ( n$, i D + B#, n ) ( n$, D + B#, n i )... ($, + B#, n i n ) ($, B#, n i n + ) ($, #, n i n + )