1 / 103

Preklad a jeho špecifikácia

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ý

slone
Download Presentation

Preklad a jeho špecifikácia

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Preklad a jeho špecifikácia

  2. 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

  3. 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.

  4. 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 )

  5. Špecifikácia Na špecifikáciu jazykov sme si definovali prostriedky:generatívne – gramatiky, akceptačné – automaty.

  6. Špecifikácia prekladu Aj teraz hľadáme konečný mechanizmus / procedúru Teraz potrebuje špecifikovať dvojice Vieme ich však, ako jazyky, špecifikovať samostatne Tú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, ...

  7. 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

  8. Prostriedky špecifikácie prekladu • Generatívne • syntaxou riadené prekladové schémy SDTS (Syntax Directed Translation Scheme) • Prekladové gramatiky • Akceptačne – prekladové automaty

  9. SDTS Syntaxou riadenou prekladovou schémou C (ďalej iba SDTS) budeme nazývať 5 ticu: C = ( N, T, D, R, S ) Kde N je množina neterminálov, T je množina vstupných terminálov - vstupná abeceda D je množina výstupných terminálov - výstupná abeceda S je začiatočný symbol – je to neterminál R je množina pravidiel

  10. 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é .

  11. Prekladová forma Analogický ako sme definovali vetnú formu, definujeme teraz prekladovú formu (zoberieme do úvahy dvojice) Pre prekladovú schému C = ( 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:

  12. Prekladová forma df • ( S, S) je prekladová forma a neterminály S si navzájom zodpovedajú – sú viazané, • 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

  13. 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 pravidlo A  γ , γ Podobne ako v gramatikách zavedieme: Stupeň relácie k, reflexívny a tranzitívny uzáver * a tranzitívny uzáver + .

  14. 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*}

  15. 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 Táto SDTS špecifikuje preklad aritmetického výrazu z infixového zápisu do postfixového zápisu.

  16. E  E + T, E T + E  T, T T  T * F, T F * T  F, F F  ( E ), E F  a, a Príklad prekladových foriem (E, E) - definitoricky (E + T, E T +) – pretože v R je pravidlo E  E + T, E T +

  17. 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á

  18. 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 + *

  19. 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

  20. SDTS a a vstupná a výstupná gramatika Nech 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 }

  21. 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   , 

  22. 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.

  23. 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

  24. Preklad (a + a) * a E  E + T, plus (E , T) E  T, T T  T * F, krat (T , F ) T  F, F F  ( E ), E F  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))

  25. 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))

  26. 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.

  27. Konečný prekladový automat Konečným prekladovým automatom budeme nazývať šesticu M = (Q, T, D, δ , q0, F) kde Q je (konečná) množina stavov, T je (konečná) množina vstupných symbolov – vstupná abeceda D je (konečná) množina výstupných symbolov – výstupná abeceda q0 je začiatočný stav, q0 Q F je množina koncových stavov δje zobrazenie Q x (T  { e })  2Q x D *

  28. 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

  29. 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.

  30. 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 , * , +

  31. 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)

  32. 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.

  33. Príklad Majme KPA M = ({qn , qp , qf}, {0, 1 }, {0, 1},  , qp , {qf })

  34. Reprezentácia stavovým diagramom 0 / 0 1 / 1 0 / 0 qp Štart qn 1 / 1 e / 0 e / 1 qf

  35. Č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) 

  36. Preklad reťazca 111 (qp , 111, e)  (qn , 11, 1)  (qp , 1, 11)  (qn , e, 111)  (qf , e, 1110) 

  37. 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 • δ(q, a) obsahuje nanajvýš jeden prvok pre každé a  T a δ(q, e) = , alebo • δ(q, e) obsahuje nanajvýš jeden prvok a δ(q, a) =  pre každé a  T

  38. Príklad Majme KPA M = ({q0 , q1 }, {+, -, . , 0, 1 }, {+, -, . , 0, 1},  , q0 , {q1 })

  39. Č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 ) 

  40. 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

  41. 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*}.

  42. 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, bB C  a, b Kde 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)

  43. Konštrukcia Konštrukcia: Q = N  {A}, pričom A  N T = T D = 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) = ø

  44. Zásobníkové prekladové automaty Zásobníkovým prekladovým automatom budeme nazývať osmicu H = (Q, T, Z, D, δ , q0, z0, F) kde Q je množina stavov, T je množina vstupných symbolov – vstupná abeceda Z je množina symbolov zásobníka D 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íka F je množina koncových stavov δje zobrazenie Q x (T  { e }) x Z 2 Q x Z* x D*

  45. 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

  46. 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.

  47. 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 , * , +

  48. 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

  49. 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.

  50. Preklad reťazca +*aaa δ: δ(q, a, E) = {(q, e, a)} δ(q, +, E) = {(q, EE+, e)} δ(q, *, E) = {(q, EE*, e)} δ(q, e, +) = {(q, e, +)} δ(q, e, *) = {(q, e, *)} (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+) 

More Related