SETHI (1131564), страница 2
Текст из файла (страница 2)
/ \
Left=0 /Label-->Left\
/\ /\ Reg<0>:=if (Left<0>=Label<0>)
/ \ / \ &(Left<0>#0)
/ \ / \ then Label<0>+1
/ \ /\ /\ else Label<0>
/ \ / \ / \
---------- ---- ----
�¨á. 8.19.
�ਢ¥¤¥ë¥ á®®¡à ¦¥¨ï ॠ«¨§ãîâáï á«¥¤ãî饩 âਡã⮩ á奬®©:
RULE
Expr ::= IntExpr
SEMANTICS
Code<0>:=Code<1>; Left<1>:=true.
RULE
IntExpr ::= Term AddOp IntExpr
SEMANTICS
Left<1>:=true; Left<3>:=false;
Label<0>:=if Label<1>=Label<3>
then Label<1>+1
else Max(Label<1>,Label<3>);
Code<0>:=if Label<3> > Label<1> then
if Label<1>=0 then
Code<3>||Code<2>||Code<1>
||","||Label<3>
else Code<3>||Code<1>||Code<2>||
Label<1>||","||Label<3>
else if Label<3> < Label<1> then
Code<1>||Code<3>||Code<2>||
Label<1>||","||Label<3>||
"MOVE"||Label<3>||","||
Label<1>
else {Label<3>=Label<1>}
Code<3>||"MOVE"||Label<3>||
","||Label<3>+1||Code<1>||
Code<2>||Label<1>||","||
Label<1>+1.
RULE
IntExpr ::= Term
SEMANTICS
Left<1>:=Left<0>; Code<0>:=Code<1>;
Label<0>:=Label<1>.
RULE
Term ::= Factor MultOp Term
SEMANTICS
Left<1>:=true; Left<3>:=false;
Label<0>:=if Label<1>=Label<3>
then Label<1>+1
else Max(Label<1>,Label<3>);
Code<0>:=if Label<3> > Label<1> then
if Label<1>=0 then
Code<3>||Code<2>||Code<1>
||","||Label<3>
else Code<3>||Code<1>||Code<2>||
Label<1>||","||Label<3>
else if Label<3> < Label<1> then
Code<1>||Code<3>||Code<2>||
Label<1>||","||Label<3>||
"MOVE"||Label<3>||","||
Label<1>
else {Label<3>=Label<1>}
Code<3>||"MOVE"||Label<3>||
","||Label<3>+1||Code<1>||
Code<2>||Label<1>||","||
Label<1>+1.
RULE
Term ::= Factor
SEMANTICS
Left<1>:=Left<0>; Code<0>:=Code<1>;
Label<0>:=Label<1>.
RULE
Factor ::= Ident
SEMANTICS
Label<0>:=if Left<0> then 0 else 1;
Code<0>:=if Left<0> then Val<1>
else "LOAD"||Val<1>||"R1".
RULE
Factor ::= ( IntExpr )
SEMANTICS
Left<2>:=Left<0>; Code<0>:=Code<2>;
Label<0>:=Label<2>.
RULE
AddOp ::= '+'
SEMANTICS
Code<0>:="ADD".
RULE
AddOp ::= '-'
SEMANTICS
Code<0>:="SUB".
RULE
MultOp ::= '*'
SEMANTICS
Code<0>:="MUL".
RULE
MultOp ::= '/'
SEMANTICS
Code<0>:="DIV".
Š®¬ ¤ë ¯¥à¥á뫪¨ âॡãîâáï ¤«ï ᮣ« ᮢ ¨ï ®¬¥à®¢ ॣ¨áâ஢, ¢ ª®â®àëå ®áãé¥á⢫ï¥âáï ¢ë¯®«¥¨¥ ®¯¥à 樨, á ॣ¨áâà ¬¨, ¢ ª®â®àëå ¤®«¦¥ ¡ëâì ¢ë¤ à¥§ã«ìâ â. �â® ¨¬¥¥â á¬ëá«, ª®£¤ í⨠ॣ¨áâàë à §ë¥. �®«ãç¨âìáï íâ® ¬®¦¥â ¨§-§ ⮣®, çâ® ¯® ¯à¨¢¥¤¥®© á奬¥ १ã«ìâ ⠢믮«¥¨ï ®¯¥à 樨 ¢á¥£¤ 室¨âáï ¢ ॣ¨áâà¥ á ®¬¥à®¬ ¬¥âª¨, ¬¥âª¨ «¥¢®£® ¨ ¯à ¢®£® ¯®¤¤¥à¥¢ì¥¢ ¬®£ãâ ᮢ¯ ¤ âì.
„«ï ¢ëà ¦¥¨ï A*B+C*(D+E) ¡ã¤¥â ᣥ¥à¨à®¢ á«¥¤ãî騩 ª®¤:
LOAD E,R1 - § £à㧨âì E 1 ॣ¨áâà
ADD D,R1 - á«®¦¨âì D ¨ E ¨ १ã«ìâ â § á« âì ¢ 1 ॣ¨áâà
MUL C,R1 - 㬮¦¨âì C D+E á १ã«ìâ ⮬ ¢ 1 ॣ¨áâà¥
MOVE R1,R2 - ¯¥à¥á« âì १ã«ìâ â ¢ ॣ¨áâà R2
LOAD B,R1- § £à㧨âì B ¢ 1 ॣ¨áâà
MUL A,R1 - 㬮¦¨âì A B á १ã«ìâ ⮬ ¢ 1 ॣ¨áâà¥
ADD R1,R2 - á«®¦¨âì A*B ¨ C*(D+E) ¨ १ã«ìâ â § á« âì ¢® 2
ॣ¨áâà
‚ ¯à¨¢¥¤¥ëå âਡãâëå á奬 å ¯à¥¤¯®« £ «®áì, ç⮠ॣ¨áâ஢ ¤®áâ â®ç®, çâ®¡ë ¯à ¢¨«ì® áâà ᫨஢ âì «î¡®¥ ¢ëà ¦¥¨¥. …᫨ íâ® ¥ â ª, ¯à¨å®¤¨âáï ãá«®¦ïâì á奬ã âà á«ï樨 ¨ ¯à¨ ¥®¡å®¤¨¬®á⨠á¡à áë¢ âì ᮤ¥à¦¨¬®¥ ॣ¨áâ஢ ¢ ¯ ¬ïâì (¨«¨ ¬ £ §¨).















