Upload
slone
View
39
Download
3
Embed Size (px)
DESCRIPTION
Preklad a jeho špecifikácia. Prekladač a preklad. Prekladač sme si definovali ako: Program, ktorý transformuje (preloží) program V zdrojovom jazyku – zdrojový program Do cieľového jazyka – cieľový program V procese prekladu / v preklade vystupujú teda dva jazyky : zdrojový a cieľový - PowerPoint PPT Presentation
Citation preview
Preklad a jeho špecifikácia
Prekladač a preklad
Prekladač sme si definovali ako: Program, ktorý transformuje (preloží) program
– V zdrojovom jazyku – zdrojový program– Do cieľového jazyka – cieľový program
V procese prekladu / v preklade vystupujú teda dva jazyky : zdrojový a cieľový
Vstupným programom / jazykom prekladu budeme nazývať – zdrojový program / jazyk
Výstupným programom / jazykom prekladu budeme nazývať – cieľový program / jazyk
Preklad df
Nech T je vstupná a D výstupná abeceda. Potom formálnym prekladom jazyka L1 T* – zdrojového jazyka, do jazyka L2 D* – cieľového jazyka,
budeme nazývať reláciu C L1 x L2
Ak ( x, y ) C potom y nazývame výstupom alebo prekladom x.
Príklad
Ako príklady prekladov aritmetických výrazov z infixového zápisu (operátor je medzi operandami) do postfixového zápisu (operátor je za operandami) možno uviesť:
(a, a )( a + b, a b + )
( a + b * c, a b c * + )(( a + b ) * c , a b + c * )
( sin , sin )
Špecifikácia
Na špecifikáciu jazykov sme si definovali prostriedky:generatívne – gramatiky,
akceptačné – automaty.
Špecifikácia prekladu
Aj teraz hľadáme konečný mechanizmus / procedúruTeraz potrebuje špecifikovať dvojiceVieme ich však, ako jazyky, špecifikovať samostatneTúto znalosť využijeme.Hľadaný mechanizmus / procedúra bude
„kompozíciou“ špecifikácií vstupného a výstupného jazyka
Intuitívne je to OK: programu zodpovedá program, cyklu zodpovedá cyklus, podmienenému príkazu podmienený príkaz, ...
Spôsoby špecifikácie
Generatívne – bude generovať iba tie dvojice, ktoré sú prvkom danej relácie – prekladu
Akceptačne – procedúra rozhodne, či predložená dvojica je prvkom danej relácie – prekladu, alebo nie
Prostriedky špecifikácie prekladu
Generatívne – syntaxou riadené prekladové schémy SDTS
(Syntax Directed Translation Scheme)– Prekladové gramatiky
Akceptačne – prekladové automaty
SDTS
Syntaxou riadenou prekladovou schémou C (ďalej iba SDTS) budeme nazývať 5 ticu:
C = ( N, T, D, R, S )KdeN je množina neterminálov,T je množina vstupných terminálov - vstupná abecedaD je množina výstupných terminálov - výstupná
abecedaS je začiatočný symbol – je to neterminálR je množina pravidiel
Pravidlá SDTS
Pravidlá R SDTS majú tvar A , Kde : A N, ( N T)*
( N D)*
Pričom neterminály v sú permutáciou neterminálov a zodpovedajúce si neterminály v a sú jednoznačne definované hovoríme, že sú vzájomne viazané .
Prekladová forma
Analogický ako sme definovali vetnú formu, definujeme teraz prekladovú formu (zoberieme do úvahy dvojice)
Pre prekladovú schémuC = ( N, T, D, R, S )Budeme prekladovú formu definovať nad ( N T)* x ( N D)*
s jednoznačným priradením zodpovedajúcich si – viazaných - neterminálov. Definovať ju budeme rekurzívne takto:
Prekladová forma df
1. ( S, S) je prekladová forma a neterminály S si navzájom zodpovedajú – sú viazané,
2. Ak ( A, A ) je prekladová forma , v ktorej vyznačené neterminály A sú viazané a
A γ , γ je pravidlo z R, potom aj ( γ , γ ) je prekladová forma, v ktorej
neterminály v γ a γ sú viazané takým spôsobom ako v pravidle A γ , γ .
Poznámka: viazanosť neterminálov sa vyznačuje lexikograficky – v prípade nejasnosti budeme používať horný index
Derivácia
Nad prekladovým formami možno definovať reláciu derivácie takto:
Medzi prekladovými formami ( A, A ) a ( γ , γ ) platí relácia
derivácie práve vtedy, ak v pravidlách R je pravidloA γ , γPodobne ako v gramatikách zavedieme:Stupeň relácie k, reflexívny a tranzitívny uzáver * a
tranzitívny uzáver + .
Preklad špecifikovaný SDTS df
Nech C = ( N, T, D, R, S ) je SDTS. Potom preklad P(C), špecifikovaný SDTS C, je definovaný takto:
P(C) = { (x , y) / (S, S) * (x, y), x T*, y D*}
Príklad
Majme SDTS: C = ({E, T, F}, {+, *, a, (, ) }, {+, *, a}, R, E)R: E E + T, E T + E T, T T T * F, T F * T F, F F ( E ), E F a, aTáto SDTS špecifikuje preklad aritmetického výrazu z
infixového zápisu do postfixového zápisu.
Príklad prekladových foriem
(E, E) - definitoricky
(E + T, E T +) – pretože v R je pravidlo
E E + T, E T +
E E + T, E T +
E T, T
T T * F, T F *
T F, F
F ( E ), E
F a, a
Príklad derivácie
Preklad reťazca a * ( a + a ) možno získať nasledujúcou deriváciou. Ukážeme si aj viazanosť a potrebu ju vyznačiť.
(E, E) Treba rozhodnúť, ktoré pravidlo použiť
(T, T) (T * F, T F *) Viazanosť neterminálov je jasná
(F * F, F F *) Viazanosť neterminálov už nie je jasná. Vyznačíme ju.
(F1 * F2, F1 F2 *) (a * F, a F *) Viazanosť neterminálov je znova jasná
E E + T, E T +
E T, T
T T * F, T F *
T F, F
F ( E ), E
F a, a
Príklad derivácie Cont.
(a * (E) , a E *)
(a * (E + T), a E T + *)
(a * (T1 + T2) , a T1 T2 + * )
(a * (F + T) , a F T + *)
(a * (a + T) , a a T + *)
(a * (a + F) , a a F + *)
(a * (a + a) , a a a + *)
Prekladom reťazca a * (a + a) je reťazec a a a + *
E E + T, E T +
E T, T
T T * F, T F *
T F, F
F ( E ), E
F a, a
Preklad a vstupná a výstupná gramatika Vstupný a výstupný jazyk prekladu je
špecifikovaný gramatikou, ktorú tiež voláme vstupná a výstupná.
Ich vzťah k SDTS špecifikujúcej zodpovedajúci preklad je nasledujúci
SDTS a a vstupná a výstupná gramatikaNech C = ( N, T, D, R, S ) je SDTS. Potom
vstupnou / výstupnou gramatikou SDTS C nazývame gramatiky Gi , Go definované takto:
Gi = ( N, T, Pi, S)
Pi = {A / A , je v R }
Go = ( N, D, Po, S)
Po = {A / A , je v R }
Sémanticky jednoznačná SDTS
SDTS C = ( N, T, D, R, S ) je sémanticky jednoznačná, ak v R neexistujú žiadne dve pravidlá tvaru:
A , A ,
Jednoduchá SDTS
Nech C = ( N, T, D, R, S ) je SDTS. Potom SDTS C budeme nazývať jednoduchá SDTS, ak pre každé pravidlo A , platí, že viazané neterminálne symboly sú v rovnakom poradí v i v .
Preklad špecifikovaný jednoduchou SDTS nazývame jednoduchý syntaxou riadený prekld.
Poznámka: viazanosť neterminálov jednoduchej SDTS je priamočiara – daná kontextom.
Príklad
Preklad jazyka aritmetických výrazov v infixovom tvare do jazyka aritmetických výrazov v prefixovom tvare možno špecifikovať SDTS C:
C = ({E, T, F}, {+, *, a, (, ) }, {plus, krat, (, ), a}, R, E)
R: E E + T, plus (E , T) E T, T T T * F, krat (T , F ) T F, F F ( E ), E F a, a
Preklad (a + a) * a
(E, E)
(T, T)
(T * F, krat (T , F ))
(F * F, krat ( F, F))
(( E ) * F, krat ( E , F))
(( E + T) * F, krat ( (plus ( E , T) ), F))
(( T + T) * F, krat ( (plus ( T , T) ), F))
(( F + T) * F, krat ( (plus ( F , T) ), F))
E E + T, plus (E , T) E T, T T T * F, krat (T , F ) T F, F F ( E ), E F a, a
Preklad (a + a) * a Cont.
(( a + T) * F, krat ( (plus ( a , T) ), F))
(( a + F) * F, krat ( (plus ( a , F) ), F)) )
(( a + a) * F, krat ( (plus ( a , a) ), F))
(( a + a) * a, krat ( (plus ( a , a) ), a))
Regulárny preklad
Analogicky ako pri gramatikách, možno aj pri SDTS urobiť obmedzenia na pravidlá a dostať tak triedy prekladov.
Začneme tým najjednoduchším – regulárnym prekladom.
Spolu s ním zavedieme aj akceptačný spôsob špecifikácie prekladu – prekladový automat.
Aj pri prekladových automatoch budeme vychádzať zo špecifikácie jazyka.
Konečný prekladový automat
Konečným prekladovým automatom budeme nazývať šesticu
M = (Q, T, D, δ , q0 , F) kdeQ je (konečná) množina stavov,T je (konečná) množina vstupných symbolov – vstupná
abecedaD je (konečná) množina výstupných symbolov – výstupná
abeceda
q0 je začiatočný stav, q0 QF je množina koncových stavov δ je zobrazenie Q x (T { e }) 2Q x D
*
Poznámky
Konečný prekladový automat (KPA) je vo všeobecnosti nedeterministický
KPA umožňuje e-prechody – vstup sa neberie do úvahy ( nič sa ani v danom prechode zo vstupu neakceptuje)
V každom kroku (prechode) generuje na výstup reťazec výstupných terminálov, možno aj prázdny reťazec (D*)
Činnosť sa aj v tomto prípade definuje pomocou prechodového zobrazenia
Konfigurácia KPA
Nech M = (Q, T, D, δ , q0 , F) je KPA. Potom nad Q x T* x D* definujeme konfiguráciu KPA M ako trojicu (q, x, y) kde
q Q x T* , y D*
Začiatočná konfigurácia: (q0 , u, e), kde u je vstupný reťazec
Koncová konfigurácia: (qf , e, v)
kde qf F je koncový stav v je výstupný reťazec.
Relácia prechodu
Nech M = (Q, T, D, δ , q0 , F) je KPA. Potom nad množinou konfigurácií Q x T* x D* definujeme reláciu prechodu nasledujúcim spôsobom.
Ak a T { e } x T* , y D* , z D* Potom (q, ax, y) (r, x, yz)práve vtedy, ak δ(q, a) obsahuje (r, z)Analogický ako pre KA možno definovať stupeň a uzávery relácie
prechodu n , * , +
Reprezentácia relácie prechodu
Analogická ako pri KA
- prechodovou tabuľkou,
- prvky sú dvojice, prípadne množiny dvojíc
- stavovým diagramom
- ak δ(q, i) obsahuje (p, o) ohodnotenie hrany z q do p je v tvare i / o (– vstup / výstup)
Preklad špecifikovaný KPA
Nech M = (Q, T, D, δ , q0 , F) je KPA. Potom preklad P(M) špecifikovaný KPA M je definovaný nasledujúcim spôsobom:
P(M) = {(u , v) / (q0 , u, e) * (qf , e, v) ;
u T* , v D* , qf F }
Preklad špecifikovaný KPA nazývame regulárny preklad.
Príklad
Majme KPA M = ({qn , qp , qf}, {0, 1 }, {0, 1}, , qp , {qf })
e 0 1
qn {(qf , 0)} {(qn , 0)} {(qp , 1)}
qp {(qf , 1)} {(qp , 0)} {(qn , 1)}
qf
Reprezentácia stavovým diagramom
qp
qn
qf
e / 0e / 1
0 / 0 1 / 1
1 / 1
0 / 0Štart
Činnosť
KPA M zisťuje paritu binárneho reťazca. Ako výstup dáva pôvodný reťazec doplnený „0“ v prípade nepárneho počtu „1“ –tiek, „1“ v prípade párneho počtu „1“ –tiek.
Činnosť si ukážeme pre vstupné reťazce 101 a 111
(qp , 101, e) (qn , 01, 1) (qn , 1, 10) (qp , e, 101) (qf , e, 1011)
e 0 1
qn {(qf , 0)} {(qn , 0)} {(qp , 1)}
qp {(qf , 1)} {(qp , 0)} {(qn , 1)}
qf
Preklad reťazca 111
(qp , 111, e)
(qn , 11, 1)
(qp , 1, 11)
(qn , e, 111)
(qf , e, 1110)
Determinizmus KPA
KPA M = (Q, T, D, δ , q0 , F) budeme nazývať deterministickým, ak pre všetky stavy z Q platí jedna z nasledujúcich podmienok
1. δ(q, a) obsahuje nanajvýš jeden prvok pre každé a T a δ(q, e) = , alebo
2. δ(q, e) obsahuje nanajvýš jeden prvok a δ(q, a) = pre každé a T
Príklad
Majme KPA M = ({q0 , q1 }, {+, -, . , 0, 1 }, {+, -, . , 0, 1}, , q0 , {q1 })
0 1 + - .
q0 (q0, e) (q1, 1) (q0, +) (q0, -) (q1, .)
q1 (q1, 0) (q1, 1) (q1, .)
Činnosť
KPA M vynecháva nevýznamné „0“ pred číslom zapísaným v binárnom tvare. Preklad reťazca –000101.01 je:
(q0 , –000101.01, e) (q0 , 000101.01, – ) (q0 , 00101.01, – )
(q0 , 0101.01, – ) (q0 , 101.01, – ) (q1 , 01.01, –1 ) (q1 , 1.01, –10 ) (q1 ,.01, –101 ) (q1 , 01, –101. ) (q1 , 1, –101.0 ) (q1 , e, –101.01 )
0 1 + - .
q0 (q0, e) (q1, 1) (q0, +) (q0, -) (q1, .)
q1 (q1, 0) (q1, 1) (q1, .)
Viac výstupov pre jeden vstup
KPA môže dávať pre jeden vstup aj viac výstupov.
Ak M = (Q, T, D, δ , q0 , F) je KPA, potom
M(x) = { y / (x, y) P(M) }
M(L) = M( x )X L
Viazanosť KA a KPA
Nech K = (Q, T, δ , q0 , F) je KA a
M = (Q, T, D, λ , q0 , F) je KPA
Potom automaty K a M nazývame viazanými, ak pre všetky (q, a) Q x T
δ( q, a ) = { p / ( p, b ) λ( q, a ), pre b D*}.
Vzájomný vzťah SDTS a KPA
Nech C = (N, T, D, R, S) je SDTS, ktorej vstupná i výstupná gramatika sú regulárne gramatiky, teda každé pravidlo z R má jeden z tvarov
C aB, bBC a, bKde C, B sú neterminály, a je vstupný, b výstupný
terminál,
Potom možno vytvoriť KPA M = (Q, T, D, δ , q0 , F) pre ktorý platí, že P (M) = P (C)
Konštrukcia
Konštrukcia:Q = N {A}, pričom A NT = TD = D
q0 = S F = { A } : pre všetky a T, b D , B N, C N platí: ak B a , b R tak (A , b) (B, a) ak B aC , bC P tak (C , b) (B, a) (A, a) = ø
Zásobníkové prekladové automatyZásobníkovým prekladovým automatom budeme nazývať osmicu
H = (Q, T, Z, D, δ , q0 , z0, F) kdeQ je množina stavov,T je množina vstupných symbolov – vstupná abecedaZ je množina symbolov zásobníkaD je množina výstupných symbolov – výstupná abeceda
q0 je začiatočný stav, q0 Q
z0 je začiatočný symbol zásobníkaF je množina koncových stavovδ je zobrazenie Q x (T { e }) x Z 2
Q x Z* x D*
Poznámky
Zásobníkový prekladový automat (ZPA) je vo všeobecnosti nedeterministický
ZPA umožňuje e-prechody – vstup sa neberie do úvahy ( nič sa ani v danom prechode zo vstupu neakceptuje)
V každom kroku (prechode) generuje - na vrch zásobníka reťazec symbolov zásobníka, možno
aj prázdny reťazec - na výstup reťazec výstupných terminálov, možno aj
prázdny reťazecČinnosť sa aj v tomto prípade definuje pomocou
prechodového zobrazenia
Konfigurácia ZPA
Nech H = (Q, T, Z, D, δ , q0 , z0, F) je ZPA. Potom nad Q x T* x Z* x D* definujeme konfiguráciu ZPA M ako štvoricu (q, u, , v) kde
q Q u T* , Z* , v D*
Začiatočná konfigurácia: (q0, i, z0, e), kde i je vstupný reťazec
Koncová konfigurácia: (qf , e, , o)
kde qf F je koncový stav o je výstupný reťazec.
Relácia prechodu
Nech H = (Q, T, Z, D, δ , q0 , z0, F) je ZPA. Potom nad množinou konfigurácií Q x T* x Z* x D* definujeme reláciu prechodu nasledujúcim spôsobom.
Ak a T { e } ; x T*
y, w D* ; z Z ; , Z* ; Potom (q, ax, z, y) (r, x, , yw)práve vtedy, ak δ(q, a, z) obsahuje (r, , w)Analogický ako pre KPA možno definovať stupeň a uzávery relácie
prechodu n , * , +
Preklad
Nech H = (Q, T, Z, D, δ , q0 , z0, F) je ZPA. Potom preklad P(H), špecifikovaný ZPA H je definovaný takto:
P(H) = { (u, v) / (q0 , u, z0 , e) * (qf , e, , v),
qf F, u T* , Z* , v D* }Preklad s prázdnym zásobníkom
Pe(H) = { (u, v) / (q0 , u, z0 , e) * (qf , e, e , v),
qf F, u T* , v D* }Poznámka: oba prípady špecifikujú tú istú triedu
prekladov. Existuje ekvivalentný ZPA
Príklad
Majme nasledujúci ZPA H:H = ({q}, {a, +, *}, {+, *, E}, {a, +, *}, δ, q, {q}) δ: δ(q, a, E) = {(q, e, a)} δ(q, +, E) = {(q, EE+, e)}
δ(q, *, E) = {(q, EE*, e)}
δ(q, e, +) = {(q, e, +)}
δ(q, e, *) = {(q, e, *)}KPA špecifikuje preklad z prefixového zápisu do
postfixového zápisu.
Preklad reťazca +*aaa
(q, +*aaa, E, e)
(q, *aaa, EE+, e)
(q, aaa, EE*E+, e)
(q, aa, E*E+, a)
(q, a, *E+, aa)
(q, a, E+, aa*)
(q, e, +, aa*a)
(q, e, e, aa*a+)
δ: δ(q, a, E) = {(q, e, a)} δ(q, +, E) = {(q, EE+, e)} δ(q, *, E) = {(q, EE*, e)} δ(q, e, +) = {(q, e, +)} δ(q, e, *) = {(q, e, *)}
Viac výstupov pre jeden vstup
Aj pri ZPA môže k jednému vstupu existovať viac výstupov
Nech H = (Q, T, Z, D, δ , q0 , z0, F) je ZPA. Potom
H(x) = { y / (x, y) P(H) }
H(L) = H( x )X L
Viazanosť ZA a ZPA
Nech M = (Q, T, Z, δ , q0 , F) je ZA a
H = (Q, T, D, Z, λ , q0 , z0, F) je ZPA
Potom automaty M a H nazývame viazanými, ak pre všetky (q, a, z) Q x (T { e }) x Z
δ( q, a, z ) = {( p, ) / ( p, , y ) λ( q, a, z ),
pre y D*}.
Vzájomný vzťah SDTS a ZPA
Nech C = (N, T, D, R, S) je jednoduchá SDTS. Potom možno vytvoriť ZPA
H = (Q, T, Z, D, δ , q0 , z0, F)
pre ktorý platí, že P (H) = P (C)
Konštrukcia
Konštrukcia:
Q = {q}
T = T
D = D
Z = N T D ; D T = (ak nie prekódujeme)q0 = q
z0 = S
F = { q }
Konštrukcia
Keďže SDTS je jednoduchá, každé pravidlo má tvar:
A x0B1x1 ... Bnxn , y0B1y1 …Bnyn ,
kde xi T*, yi D*, BiN
: 1. Ak A x0B1x1 ... Bnxn , y0B1y1 …Bnyn R
tak (q, e, A) obsahuje
(q, e, x0y0B1x1y1 ... Bnxnyn , e)
2. (q, a, a) obsahuje (q, e, e) pre všetky a T
3. (q, b, e) obsahuje (q, e, b) pre všetky b D
Príklad
Majme SDTS:
C = ({E, T, F}, {+, *, a, (, ) }, {+’, *’, a’}, R, E)
R: E E + T, E T +’
E T, T
T T * F, T F *’
T F, F
F ( E ), E
F a, a’
Konštrukcia ZPA
: 1. (q, e, E) = {(q, e, E+T+’), (q, e, T)}
(q, e, T) = {(q, e, T*F*’), (q, e, F)}
(q, e, F) = {(q, e, (E)), (q, e, aa’)}
2. (q, x, x) = { (q, e, e)} pre x {+,*, a, (, )}
3. (q, b, e) = {(q, e, b)} pre b {+’, *’, a’}
Preklad reťazca a + a * a
SDTS C:
(E, E)
(E+T, ET+’) (T+T, TT+’) (F+T, FT+’) (a+T, a’T+’) (a+T*F, a’TF*’+’) (a+F*F, a’FF*’+’) (a+a*F, a’a’F*’+’) (a+a*a, a’a’a*’+’)’
Ako vidieť, ide skutočne o preklad z infixu do postfixu
E E + T, E T +’
E T, T
T T * F, T F *’
T F, F
F ( E ), E
F a, a’
ZPA
(q, a+a*a, E, e) (q, a+a*a, E+T+’, e) (q, a+a*a, T+T+’, e) (q, a+a*a, F+T+’, e) (q, a+a*a, aa’+T+’, e) (q, +a*a, a’+T+’, e) (q, +a*a, +T+’, a’ ) (q, a*a, T+’, a’ ) (q, a*a, T*F*’+’, a’ ) (q, a*a, F*F*’+’, a’ )
1. (q, e, E) = {(q, e, E+T+’), (q, e, T)}
(q, e, T) = {(q, e, T*F*’), (q, e, F)}
(q, e, F) = {(q, e, (E)), (q, e, aa’)}
2. (q, x, x) = { (q, e, e)} pre x {+,*, a, (, )}
3. (q, b, e) = {(q, e, b)} pre b {+’, *’, a’}
ZPA Cont
(q, a*a, aa’*F*’+’, a’ ) (q, *a, a’*F*’+’, a’ ) (q, *a, *F*’+’, a’ a’) (q, a, F*’+’, a’ a’) (q, a, aa’*’+’, a’ a’) (q, e, a’*’+’, a’ a’) (q, e, *’+’, a’ a’ a’) (q, e, +’, a’ a’ a’ *’) (q, e, e, a’ a’ a’ *’ +’) Vidíme, že výstup je aj teraz postfixom vstupného reťazca
1. (q, e, E) = {(q, e, E+T+’), (q, e, T)}
(q, e, T) = {(q, e, T*F*’), (q, e, F)}
(q, e, F) = {(q, e, (E)), (q, e, aa’)}
2. (q, x, x) = { (q, e, e)} pre x {+,*, a, (, )}
3. (q, b, e) = {(q, e, b)} pre b {+’, *’, a’}
Použitie SDTS a ZPA pri rozbore
Rozbor je jednou z reprezentácií derivácie.Rozbor je postupnosť pravidiel použitých v deriváciiVýznačné derivácie a rozbory:Ľavý rozbor – postupnosť čísel pravidiel použitých v
ľavej derivácii.Pravý rozbor – obrátená postupnosť čísel pravidiel
použitých v pravej derivácii.Poznámka: dôvod „obrátenej“ postupnosti si
vysvetlíme pri syntaktickej analýze
Konštrukcia SDTS pre špecifikáciu rozboruNech G =(N, T, P, S ) je BKG s očíslovanými
pravidlami od 1 po n. Potom možno skoštruovať SDTS C, ktorá umožňuje generovať rozbor – ľavý alebo pravý, podľa konštrukcie.
Konštrukcia SDTS pre ľavý rozbor v GG =(N, T, P, S ) –je BKG s očíslovanými
pravidlami od 1 po n.
Cl = (N, T, D, R, S)
D: {1, 2, … , n}
R: ak A je i – te pravidlo v P, potom
A , i ’ je pravidlo v R, kde ’ je s vynechanými terminálmi
Preklad špecifikovaný Cl
P(Cl ) = { (w, ) / S * w, w T*}, * je
ľavá derivácia s použitím postupnosti čísel pravidiel .
Príklad
Majme gramatiku G: G = ({E, T, F}, {+, *, a, (, ) }, P, E)P: 1. E E + T 2. E T 3. T T * F 4. T F 5. F ( E ) 6. F a
Potom zodpovedajúca SDTS Cl , pre generovanie ľavého rozboru ma tvar
SDTS pre G
Cl = ({E, T, F},{+, *, a, (, )}, {1, 2, … , n}, R, E)
R: E E + T, 1ET
E T, 2T
T T * F, 3TF
T F, 4F
F ( E ), 5E
F a, 6
Činnosť pre a *(a + a)
Ľavý rozbor v G: (číslo použitého pravidla je pri symbole derivácie)E 2T 3T*F 4F*F 6 a*F 5a*(E) 1 a*(E+T) 2 a*(T+T) 4 a*(F+T) 6 a*(a+T) 4 a*(a+F) 6 a*(a+a)Ľavý rozbor reťazca a*(a+a) je postupnosť čísel pravidiel použitých v ľavej
derivácii, teda:23465124646
E E + T, 1ET
E T, 2T
T T * F, 3TF
T F, 4F
F ( E ), 5E
F a, 6
Použitie SDTS
(E, E) (T,2T) (T*F,23TF) (F*F,234FF) (a*F,2346F) (a*(E),23465E) (a*(E+T),234651ET) (a*(T+T),2346512TT) (a*(F+T),23465124FT) (a*(a+T),234651246T) (a*(a+F),2346512464F) (a*(a+a),23465124646)
Výstupom je aj teraz ľavý rozbor
E E + T, 1ET
E T, 2T
T T * F, 3TF
T F, 4F
F ( E ), 5E
F a, 6
Ľavý rozbor ako výstup ZPA
Pre gramatiku možno vytvoriť aj ZPA, ktorý špecifikuje preklad do rozboru – ľavého i pravého, podľa konštrukcie.
ZPA pre ľavý rozbor
G =(N, T, P, S ) –je BKG s očíslovanými pravidlami od 1 po n. Potom ZPA H
Hl = ({q}, T, N T ,{1, 2, … , n}, δ , q, S, {q})
δ: δ(q, e, A) obsahuje (q, , i) ak A je i – te
pravidlo v P
δ(q, a, a) = {(q, e, e)} pre všetky a T
Preklad špecifikovaný ZPA Hl
G =(N, T, P, S ) –je BKG s očíslovanými pravidlami od 1 po n, Hl zodpovedný ZPA, potom
P(Hl) = { (w, ) / (q, w, S, e) * (q, e, e, ) , w T*, je ľavý rozbor, teda platí S * w }
Poznámka: ZPA Hl nazývame aj ľavý rozkladač pre G
Príklad
Majme gramatiku G: G = ({E, T, F}, {+, *, a, (, ) }, P, E)P: 1. E E + T 2. E T 3. T T * F 4. T F 5. F ( E ) 6. F a
Potom zodpovedajúci ZPA Hl , pre špecifikáciu ľavého rozboru ma tvar
ZPA pre G
Hl = ({q}, T, N T ,{1, 2, … , n}, δ , q, E, {q})
δ: 1. (q, e, E) = {(q, E+T, 1), (q, T, 2)}
(q, e, T) = {(q, T*F, 3), (q, F, 4)}
(q, e, F) = {(q, (E), 5), (q, a, 6)}
2. (q, x, x) = { (q, e, e)} pre x T
Činnosť pre reťazec (a + a ) * a(q, (a + a ) * a, E, e) (q, (a + a ) * a, T, 2) (q, (a + a ) * a, T*F, 23) (q, (a + a ) * a, F*F, 234) (q, (a + a ) * a, (E)*F, 2345) (q, a + a ) * a, E)*F, 2345) (q, a + a ) * a, E+T)*F, 23451) (q, a + a ) * a, T+T)*F, 234512) (q, a + a ) * a, F+T)*F, 2345124) (q, a + a ) * a, a+T)*F, 23451246)
1. (q, e, E) = {(q, E+T, 1), (q, T, 2)}
(q, e, T) = {(q, T*F, 3), (q, F, 4)}
(q, e, F) = {(q, (E), 5), (q, a, 6)}
2. (q, x, x) = { (q, e, e)} pre x T
Činnosť Cont
(q, + a ) * a, +T)*F, 23451246) (q, a ) * a, T)*F, 23451246) (q, a ) * a, F)*F, 234512464) (q, a ) * a, a)*F, 2345124646) (q, ) * a, )*F, 2345124646) (q, * a, *F, 2345124646) (q, a, F, 2345124646) (q, a, a, 23451246466) (q, e , e , 23451246466)
1. (q, e, E) = {(q, E+T, 1), (q, T, 2)}
(q, e, T) = {(q, T*F, 3), (q, F, 4)}
(q, e, F) = {(q, (E), 5), (q, a, 6)}
2. (q, x, x) = { (q, e, e)} pre x T
Rozšírený ZPA
Potrebujene ošetriť „obrátenú“ postupnosť symbolov v zásobníku (ako pri RZA)
Ide teda iba o „rozšírenie“ ZPA pre ošetrenie uvedenej potreby
RZPA bude operovať nad vrchom zásobníka, ale „vrchom“ bude prvých n symbolov na vrchu zásobníka a vrch bude v zápise vpravo
Ovizoval som potrebu pri syntaktickej analýze – tam to viac rozoberieme
Rozšírený ZPA df
Rozšíreným zásobníkovým automatom nazývame 8 – cu
H = (Q, T, Z, D, δ , q0 , z0, F)
Význam symbolov, akrem zobrazenia δ, zostáva nezmenený
Konfigurácia je tiež definovaná rovnakoZobrazenie δ je definované takto:δ: Q x (T { e }) x Z* 2
Q x Z* x D*
Relácia prechodu
Ak a T { e } ; x T*
y, w D* ; , , Z* ;
Potom
(q, ax, , y) (r, x, , yw)
práve vtedy, ak δ(q, a, ) obsahuje (r, , w)Analogický ako pre KPA možno definovať stupeň a
uzávery relácie prechodu n , * , +
RZPA pre pravý rozbor
G =(N, T, P, S ) –je BKG s očíslovanými pravidlami od 1 po n. Potom ZPA Hp
Hp = ({q}, T, N T {#} ,{1, 2, … , n}, δ , q, #, {q})Vrch zásobníka je vpravo
δ: 1. δ(q, e, ) obsahuje (q, A, i) ak A je i – te pravidlo v P 2. δ(q, a, e) = {(q, a, e)} pre všetky a T 3. δ(q, e, #S) = {(q, e, e)}
Preklad špecifikovaný RZPA Hp
G =(N, T, P, S ) –je BKG s očíslovanými pravidlami od 1 po n, Hp zodpovedajúci ZPA, potom
P(Hp) = { (w, ) / (q, w, # , e) * (q, e, e, ) , w T*, je pravý rozbor, teda platí S *w }
Poznámka: ZPA Hp nazývame aj pravý rozkladač pre G
Príklad
Majme gramatiku G: G = ({E, T, F}, {+, *, a, (, ) }, P, E)P: 1. E E + T 2. E T 3. T T * F 4. T F 5. F ( E ) 6. F a
Potom zodpovedajúci ZPA Hp , pre špecifikáciu pravého rozboru ma tvar
RZPA pre G
Hp = ({q}, T, N T {#} ,{1, 2, … , n}, δ , q, #, {q})
δ: (q, e, E+T) = {(q, E, 1)}
(q, e, T) = {(q, E, 2)}
(q, e, T*F ) = {(q, T, 3)}
(q, e, F) = {(q, T, 4)}
(q, e, (E)) = {(q, F, 5)}
(q, e, a) = {(q, F, 6)}
(q, x, e) = { (q, x, e)} pre x T
(q, e, #E) = {(q, e, e)}
Činnosť pre reťazec (a + a ) * a(q, (a + a ) * a, #, e) (q, a + a ) * a, # (, e) (q, + a ) * a, # (a, e) (q, + a ) * a, # (F, 6) (q, + a ) * a, # (T, 64) (q, + a ) * a, # (E , 642) (q, a ) * a, # (E + , 642) (q, ) * a, # (E + a , 642) (q, ) * a, # (E + F , 6426)
(q, e, E+T) = {(q, E, 1)}
(q, e, T) = {(q, E, 2)}
(q, e, T*F ) = {(q, T, 3)}
(q, e, F) = {(q, T, 4)}
(q, e, (E)) = {(q, F, 5)}
(q, e, a) = {(q, F, 6)}
(q, x, e) = { (q, x, e)} pre x T
(q, e, #E) = {(q, e, e)}
Činnosť pre reťazec (a + a ) * a Cont(q, ) * a, # (E + T , 64264) (q, ) * a, # (E , 642641) (q, * a, # (E ) , 642641)(q, * a, # F , 6426415)(q, * a, # T , 64264154)(q, a, # T *, 64264154)(q, e, # T * a, 64264154)(q, e, # T * F, 642641546)(q, e, # T , 6426415463)(q, e, # E , 64264154632)(q, e, e , 64264154632)
(q, e, E+T) = {(q, E, 1)}
(q, e, T) = {(q, E, 2)}
(q, e, T*F ) = {(q, T, 3)}
(q, e, F) = {(q, T, 4)}
(q, e, (E)) = {(q, F, 5)}
(q, e, a) = {(q, F, 6)}
(q, x, e) = { (q, x, e)} pre x T
(q, e, #E) = {(q, e, e)}
Prekladové gramatiky
Vychádzajú z predpokladov: Jednoduchej SDTSKaždé pravidlo má tvar:
A x0B1x1 ... Bnxn , y0B1y1 …Bnyn , Množiny vstupných a výstupných symbolov sú
dizjunktné T D = Potom možno každé pravidlo SDTS písať ako
pravidlo gramatiky, teda v tvare
A x0y0B1x1y1 ... Bnxnyn
Prekladové gramatiky Df
Prekladovou gramatikou (PG) budeme nazývať BKG Gp = ( N, T D, P, S ) pričom T D =
Vstupným / výstupným homomorfizmom
hi / ho prekladovej garmatiky Gp nazývame zobrazenie
hi : N T D N T {e }
ho : N T D N D {e }
Vstupný a výstupný homomorfizms hi(X) = X pre X N T ; Inak hi(X) = e
ho(X) = X pre X N D ; Inak ho(X) = e
Rozšírenie na definičné obory (N T D )*
hi(e) = ho(e) = e
hi(X) = hi(X) hi()
ho(X) = ho(X) ho()
X N T D
(N T D )*
Preklad špecifikovaný PG
Nech Gp = ( N, T D, R, S ), pričom T D = Potom preklad P(Gp) špecifikovaný Gp je definovaný ako:
P(Gp) = { (hi(w), ho(w) ) / w L (Gp)}Reaťazec w nazývane charakteristickou vetou – reťazcom
prekladu P(Gp)
Ak (x, y) P(Gp) ,
potom x T* nazývame vstupná veta alebo vstupný reťazec,
y D* nazývame výstupná veta alebo výstupný reťazec – prekladom reťazca x
Sémantická jednoznačnosť
Preklad, v ktorom každej vstupnej vete zodpovedá jediná výstupná veta nazývame jednoznačný.
Prekladová gramatika sa nazýva sémanticky jednoznačná ak neobsahuje žiadne dve pravidlá tvaru
A | Pre ktoré platí hi() = hi()
Príklad
Majme nasledujúcu prekladovú gramatiku
G = ({E, T, F}, {+, *, a, (, ) } {+’, *’, a’}, P, E)
P: E E + T +’ | T
T T * F *’ | F
F ( E ) | a a’
Preklad (derivácia) reťazca(a + a ) * aE T T * F *’ F * F *’ (E) * F *’ (E + T +’ ) * F *’ (T + T +’ ) * F *’ (F + T +’ ) * F *’ (a a’ + T +’ ) * F *’ (a a’ + F +’ ) * F *’
E E + T +’ | T
T T * F *’ | F
F ( E ) | a a’
Preklad (derivácia) reťazca(a + a ) * a; Cont.(a a’ + a a’ +’ ) * F *’
(a a’ + a a’ +’ ) * a a’ *’
Charakteristická veta: (a a’ + a a’ +’ ) * a a’ *’ Vstupná veta: (a + a) * a
Výstupná veta: a’ a’ +’ a’ *’
E E + T +’ | T
T T * F *’ | F
F ( E ) | a a’
Prekladový strom
Prekladový strom je derivačný strom, ktorý zodpovedá derivácii charakteristickej vety
Prekladový strom k prekladu reťazca (a + a ) * a
E
T
T*
F*’
F
( E )E + T +’T
F
a a’
F
a a’
a a’
OK