syntax í řízený překlad
DESCRIPTION
Syntax í řízený překlad. Miroslav Beneš Dušan Kolář. Překlad. Defini ce: Překlad je relace TRAN: L 1 -> L 2 L 1 * - vstupní abeceda L 2 * - výstupní abeceda Příklad L 1 – jazyk infix ových výrazů L 2 – jazyk postfix ových výrazů. Překladová gramatika. - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Syntax í řízený překlad](https://reader036.vdocuments.site/reader036/viewer/2022062308/5681332d550346895d9a266e/html5/thumbnails/1.jpg)
Syntaxí řízený překlad
Miroslav BenešDušan Kolář
![Page 2: Syntax í řízený překlad](https://reader036.vdocuments.site/reader036/viewer/2022062308/5681332d550346895d9a266e/html5/thumbnails/2.jpg)
Syntaxí řízený překlad 2
Překlad
Definice: Překlad je relaceTRAN: L1 -> L2
L1* - vstupní abecedaL2 * - výstupní abeceda
Příklad L1 – jazyk infixových výrazů
L2 – jazyk postfixových výrazů
![Page 3: Syntax í řízený překlad](https://reader036.vdocuments.site/reader036/viewer/2022062308/5681332d550346895d9a266e/html5/thumbnails/3.jpg)
Syntaxí řízený překlad 3
Překladová gramatika
Definice: Překladová párová gramatikaV = (N, , , P, S)
N - neterminály - vstupní abeceda - výstupní abecedaP – přepisovací pravidlaS – startovací neterminál
P: A -> , (N)*, (N)*Neterminály z jsou permutacemi neterminálů z
![Page 4: Syntax í řízený překlad](https://reader036.vdocuments.site/reader036/viewer/2022062308/5681332d550346895d9a266e/html5/thumbnails/4.jpg)
Syntaxí řízený překlad 4
Příklad
E -> E+T, ET+E -> T, TT -> T*F, TF*T -> F, FF -> (E), EF -> i, i
![Page 5: Syntax í řízený překlad](https://reader036.vdocuments.site/reader036/viewer/2022062308/5681332d550346895d9a266e/html5/thumbnails/5.jpg)
Syntaxí řízený překlad 5
Příklad - derivace
[E,E] => [E+T, ET+] => [T+T, TT+] => [F+T, FT+] => [i+T, iT+] => [i+T*F, iTF*+] => [i+F*F, iFF*+] => [i+i*F, iiF*+] => [i+i*i, iii*+]
![Page 6: Syntax í řízený překlad](https://reader036.vdocuments.site/reader036/viewer/2022062308/5681332d550346895d9a266e/html5/thumbnails/6.jpg)
Syntaxí řízený překlad 6
Překladová gramatika
Jsou-li neterminály ve vstupní i výstupní části pravé strany ve stejném pořadí, můžeme obě části spojit => překladová gramatika
Musíme ale odlišit vstupní a výstupní symboly
![Page 7: Syntax í řízený překlad](https://reader036.vdocuments.site/reader036/viewer/2022062308/5681332d550346895d9a266e/html5/thumbnails/7.jpg)
Syntaxí řízený překlad 7
Příklad
E → E + T + (E → E + T )E → TT → T * F *T → FF → ( E )F → i i
![Page 8: Syntax í řízený překlad](https://reader036.vdocuments.site/reader036/viewer/2022062308/5681332d550346895d9a266e/html5/thumbnails/8.jpg)
Syntaxí řízený překlad 8
Příklad - derivace
E => E + T + => T + T + => F + T + => i i + T + => i i + T * F * + => i i + F * F * + => i i + i i * F * + => i i + i i * i i * +
![Page 9: Syntax í řízený překlad](https://reader036.vdocuments.site/reader036/viewer/2022062308/5681332d550346895d9a266e/html5/thumbnails/9.jpg)
Syntaxí řízený překlad 9
Homomorfismy
Vstupní homomorfismus:(x) = x, x (N )
= , x
Výstupní homomorfismus:(x) = x, x (N )
= , x
![Page 10: Syntax í řízený překlad](https://reader036.vdocuments.site/reader036/viewer/2022062308/5681332d550346895d9a266e/html5/thumbnails/10.jpg)
Syntaxí řízený překlad 10
Příklad
(E + T +) = E + T(E + T +) = E T +
(i i + i i * i i * +) = i + i * i (i i + i i * i i * +) = i i i * +
![Page 11: Syntax í řízený překlad](https://reader036.vdocuments.site/reader036/viewer/2022062308/5681332d550346895d9a266e/html5/thumbnails/11.jpg)
Syntaxí řízený překlad 11
Překlad
Definice: Překlad generovaný překladovou gramatikou:
T(G) = {(x,y) | S =>* z, z ()*, x = (z), vstupní věta y = (z)} výstupní věta
![Page 12: Syntax í řízený překlad](https://reader036.vdocuments.site/reader036/viewer/2022062308/5681332d550346895d9a266e/html5/thumbnails/12.jpg)
Syntaxí řízený překlad 12
Atributovaný překlad
Rozšíření bezkontextové gramatiky o kontextové vlastnosti → „gramatika s parametry“
Jednotlivé symboly mohou mít přiřazeny parametry – atributy
Atributy se předávají podobně jako vstupní a výstupní argumenty funkcí
![Page 13: Syntax í řízený překlad](https://reader036.vdocuments.site/reader036/viewer/2022062308/5681332d550346895d9a266e/html5/thumbnails/13.jpg)
Syntaxí řízený překlad 13
Atributová gramatika
Definice: Atributová překladová gramatika GAT = (GT, A, F)GT – překladová gramatika
(= -> atributová gramatika)A – množina atributůF – sémantická pravidla (pravidla pro výpočet hodnot atributů)
![Page 14: Syntax í řízený překlad](https://reader036.vdocuments.site/reader036/viewer/2022062308/5681332d550346895d9a266e/html5/thumbnails/14.jpg)
Syntaxí řízený překlad 14
Množina atributů
X (N) I(X) - množina dědičných atributů S(X) - množina syntetizovaných atributů
Dědičné atributy startovacího neterminálu jsou zadány předem.
Syntetizované atributy terminálních symbolů jsou zadány předem (lexikální analyzátor)
![Page 15: Syntax í řízený překlad](https://reader036.vdocuments.site/reader036/viewer/2022062308/5681332d550346895d9a266e/html5/thumbnails/15.jpg)
Syntaxí řízený překlad 15
Sémantická pravidla
pr: X0 -> X1X2 … Xn X0N, Xi(N)
a) d=frd,k(a1,a2,… ,an) dI(Xk), 1kn
b) s=frs,0(a1,a2,… ,an) sS(X0)
c) s=frs,k(a1,a2,… ,an) sS(Xk), Xk
a,b) ai je atribut symbolu Xj, 0jn
c) ai je dědičný atr. symbolu Xf, Xf
![Page 16: Syntax í řízený překlad](https://reader036.vdocuments.site/reader036/viewer/2022062308/5681332d550346895d9a266e/html5/thumbnails/16.jpg)
Syntaxí řízený překlad 16
Sémantická pravidla
a) Dědičné atributy symbolu na pravé straně pravidla
b) Syntetizované atributy neterminálního symbolu na levé straně pravidla
c) Syntetizované atributy výstupních symbolů na pravé straně pravidla
![Page 17: Syntax í řízený překlad](https://reader036.vdocuments.site/reader036/viewer/2022062308/5681332d550346895d9a266e/html5/thumbnails/17.jpg)
Syntaxí řízený překlad 17
Příklad – výpočet hodnoty výrazu
Syntetizované atributy: E.val - hodnota výrazu T.val - hodnota podvýrazu F.val - hodnota operandu
num.lexval – hodnota číselné konstanty
![Page 18: Syntax í řízený překlad](https://reader036.vdocuments.site/reader036/viewer/2022062308/5681332d550346895d9a266e/html5/thumbnails/18.jpg)
Syntaxí řízený překlad 18
Příklad
Gramatika
E -> E’ + TE -> TT -> T’ * FT -> FF -> (E)F -> num
Sémantická pravidla
E.val = E’.val + T.valE.val = T.valT.val = T’.val * F.valT.val = F.valF.val = E.valF.val = num.lexval
![Page 19: Syntax í řízený překlad](https://reader036.vdocuments.site/reader036/viewer/2022062308/5681332d550346895d9a266e/html5/thumbnails/19.jpg)
Syntaxí řízený překlad 19
Příklad
3*5+4E.val = 19
E.val = 15
T.val = 15
T.val = 3
T.val = 3
num.val = 3
F.val = 5
num.val = 5
T.val = 4
F.val = 4
num.val = 4
+
*
Ohodnocený derivační strom
![Page 20: Syntax í řízený překlad](https://reader036.vdocuments.site/reader036/viewer/2022062308/5681332d550346895d9a266e/html5/thumbnails/20.jpg)
Syntaxí řízený překlad 20
Poznámky
sémantické funkce v atributové gramatice nemohou mít vedlejší efekty vstup/výstup (např. generovaného kódu) globální proměnné (např. tabulka symbolů)
syntaxí řízená definice – bez omezení
![Page 21: Syntax í řízený překlad](https://reader036.vdocuments.site/reader036/viewer/2022062308/5681332d550346895d9a266e/html5/thumbnails/21.jpg)
Syntaxí řízený překlad 21
Příklad – deklarace proměnných
(1) D -> T L
(2) T -> int
(3) T -> real
(4) L -> L’ , id
(5) L -> id
L.type := T.type
T.type := integer
T.type := real
L’.type := L.typedcl(id.ptr, L.type)
dcl(id.ptr, L.type)
![Page 22: Syntax í řízený překlad](https://reader036.vdocuments.site/reader036/viewer/2022062308/5681332d550346895d9a266e/html5/thumbnails/22.jpg)
Syntaxí řízený překlad 22
Příklad
Dědičné atributy: L.type Syntetizované atributy: T.type, id.ptr
T.type = real L.type = real
L.type = real
L.type = real
id1
id2
id3real
D
,
,
real id1,id2,id3
![Page 23: Syntax í řízený překlad](https://reader036.vdocuments.site/reader036/viewer/2022062308/5681332d550346895d9a266e/html5/thumbnails/23.jpg)
Syntaxí řízený překlad 23
Definice
L-atributová definiceA -> X1 … Xn
Dědičné atributy symbolu Xj závisejí jen na:
atributech symbolů X1, … ,Xj-1
(tj. symbolech z téhož pravidla vlevo od symbolu Xj )
dědičných atributech symbolu A(tj. symbolu na levé straně pravidla)
Použití: LL(1) překlad
![Page 24: Syntax í řízený překlad](https://reader036.vdocuments.site/reader036/viewer/2022062308/5681332d550346895d9a266e/html5/thumbnails/24.jpg)
Syntaxí řízený překlad 24
Překladové schéma
Syntaxí řízená definice se sémantickými akcemi umístěnými kdekoliv na pravé straně pravidla
Posloupnost sémantických akcí je přesně definována
![Page 25: Syntax í řízený překlad](https://reader036.vdocuments.site/reader036/viewer/2022062308/5681332d550346895d9a266e/html5/thumbnails/25.jpg)
Syntaxí řízený překlad 25
Příklad
E -> T R
R -> + T { print(‘+’); } R’ |
T -> num { print(num.val); }
![Page 26: Syntax í řízený překlad](https://reader036.vdocuments.site/reader036/viewer/2022062308/5681332d550346895d9a266e/html5/thumbnails/26.jpg)
Syntaxí řízený překlad 26
Návrh překladového schematu
Dědičný atribut symbolu na pravé straně vypočte akce umístěna před ním.
Akce nesmí používat syntetizované atributy symbolů vpravo od ní.
Hodnota syntetizovaného atributu neterminálu na levé straně pravidla se vypočte až po určení všech atributů, na které se odkazuje- obvykle až na konci pravidla
![Page 27: Syntax í řízený překlad](https://reader036.vdocuments.site/reader036/viewer/2022062308/5681332d550346895d9a266e/html5/thumbnails/27.jpg)
Syntaxí řízený překlad 27
Překlad při analýze rekurzivním sestupem Syntaktický zásobník - řízení překladu
Atributový zásobník - ukládání atributů explicitní vs. implicitní zásobník
implicitní zásobník – rekurze, lokální proměnné
Atributy parametry podprogramů (N) globální proměnné
![Page 28: Syntax í řízený překlad](https://reader036.vdocuments.site/reader036/viewer/2022062308/5681332d550346895d9a266e/html5/thumbnails/28.jpg)
Syntaxí řízený překlad 28
Překlad při analýze rekurzivním sestupem Atributy
dědičné - vstupní parametrysyntetizované - výstupní parametry
Sémantické akcePřímo na odpovídajících místech
v podprogramech pro analýzu pravidel Hodnoty syntetizovaných atributů musí být
definovány! (e-pravidla, zotavení)
![Page 29: Syntax í řízený překlad](https://reader036.vdocuments.site/reader036/viewer/2022062308/5681332d550346895d9a266e/html5/thumbnails/29.jpg)
Syntaxí řízený překlad 29
Příklad
E -> T {R.i := T.val} R {E.val := R.s}R -> addop T
{if addop.op=add then R1.i := R.i+T.val
else R1.i := R.i-T.val } R1 {R.s := R1.s}
| {R.s := R.i}T -> num {T.val := num.val}
![Page 30: Syntax í řízený překlad](https://reader036.vdocuments.site/reader036/viewer/2022062308/5681332d550346895d9a266e/html5/thumbnails/30.jpg)
Syntaxí řízený překlad 30
Příklad
addop.op … var lexop:char; ‘+’/‘-’num.val … lexval:integer;
R.i - dědičný atribut (levý operand)R.s - dočasný výsledek, synt. atributT.val - syntetizovaný attribute
![Page 31: Syntax í řízený překlad](https://reader036.vdocuments.site/reader036/viewer/2022062308/5681332d550346895d9a266e/html5/thumbnails/31.jpg)
Syntaxí řízený překlad 31
Příklad
void E(int& val) {
int val1; T(val1); R(val1, val);}
![Page 32: Syntax í řízený překlad](https://reader036.vdocuments.site/reader036/viewer/2022062308/5681332d550346895d9a266e/html5/thumbnails/32.jpg)
Syntaxí řízený překlad 32
Příklad
void R(int i, int& s) { if( sym == ‘+’ || sym == ‘-’ ) {
char op=lexop; int val; T(val); if( op==‘+’ ) R(i+val,s) else R(i-val,s); } else s = i;}
![Page 33: Syntax í řízený překlad](https://reader036.vdocuments.site/reader036/viewer/2022062308/5681332d550346895d9a266e/html5/thumbnails/33.jpg)
Syntaxí řízený překlad 33
Příklad
void T(int& val) { if( sym == num ) { val=lexval; // nestačí expect(num) lex(); } else { error(); // po zotavení musí
val=0; // být val definováno }}