100 likes | 232 Views
Preklad logického výrazu. Gramatika PGB 2. Hodnota logick ého výrazu ako vonkajšia adresa. V príkaze if b then P1 else P2 hodnota „ b “ „určuje“ miesto – adresu príkazu, ktorý sa bude realizovať v ďalšom kroku. Toto použitie možno opísať prekladovou gramatikou Využíva vlastnosti
E N D
Preklad logického výrazu Gramatika PGB2
Hodnota logického výrazu ako vonkajšia adresa • V príkaze if b then P1 else P2 hodnota „ b “ „určuje“ miesto – adresu príkazu, ktorý sa bude realizovať v ďalšom kroku. • Toto použitie možno opísať prekladovou gramatikou • Využíva vlastnosti • X or Y = if X then true else Y • X and Y = if X then Y else false
Atribúty • da, sa • adr • true – zoznam adries inštrukcie TL, do ktorých treba doplniť cieľovú adresu, ktorá zodpovedá hodnote booleovského výrazu true. • false - zoznam adries inštrukcie TL, do ktorých treba doplniť cieľovú adresu, ktorá zodpovedá hodnote booleovského výrazu false.
Funkcie • f1 (x) – vytvorí zoznam z argumentu x • f2 (x, y) – vytvorí zoznam spojením zoznamov x a y • f3 (x, y, z) - hodnotou f unkcie je x - do všetkých inštrukcií na adresách uvedených v zozname y sa doplní adresa z.
Atrib. Preklad. Gramatika Syntaktické pravidlá Sémantické pravidlá E E or T or E1. da := E0. da T .da := E1 . sa - - a b E0. sa := T . sa + 1 + + E0.true := f2(E1.true, T.true) + E0.false := f3(T.false, E1.false, E1.sa) E T T.da := E.da E.sa := T.sa E.true := T.true E.false := T.false
Atrib. Preklad. G - Cont. Syntaktické pravidlá Sémantické pravidlá T T and F and da, sa - ako E E or Toraž na symboly + + a b T0.true:=f3(F.true, T1.true, T1.sa) - - T0.false:= f2(T1.false, F.false) - Ako E T až na symboly T F da, sa - ako E T až na symboly F not F not F0. true := F2. false F0. false := F2. true
Atrib. Preklad. G - Cont. Syntaktické pravidlá Sémantické pravidlá F (E) Ako E T až na symboly F id TADRTLJIFT TLJU TA. adr := id.adr F.sa := F.da + 6 F.true := f1 (F.da + 2) F.false := f1 (F.da + 4)
Atrib. Preklad. G - Cont. Syntaktické pravidlá Sémantické pravidlá F A relop A relop A1.da := F.da TLJIFTTLJU A3.da := A1.sa F.sa := A3.sa + 5 F.true := f1 (A3.sa + 1) F.false := f1 (A3.sa + 3) TA. adr := id.adr A id TA DR A.sa := A.da + 2