●生成三地址代码时,临时变量的名字对 应抽象语法树的内部结点 did: =E 对表达式E求值并置于变量T中值 ● id place:=T
生成三地址代码时,临时变量的名字对 应抽象语法树的内部结点 id:=E ⚫ 对表达式E求值并置于变量T中值 ⚫ id.place:=T
从赋值语句生成三地址代码的s属性文法 非终结符号S有综合属性 S code,它代表 赋值语句S的三地址代码。 ●非终结符号E有如下两个属性 E place表示存放E值的名字 ● Ecode表示对E求值的三地址语句序列 函数 newtemp的功能是,每次调用它时,将 返回一个不同临时变量名字,如T1,T2
从赋值语句生成三地址代码的S-属性文法 非终结符号S有综合属性S.code,它代表 赋值语句S的三地址代码。 非终结符号E有如下两个属性: ⚫ E.place表示存放E值的名字。 ⚫ E.code表示对E求值的三地址语句序列。 ⚫ 函数newtemp的功能是,每次调用它时,将 返回一个不同临时变量名字,如T1 ,T2 ,…
为赋值语句生成三地址代码的S-属性文法定义 产生式 语义规则 S→id:= E S code:=E.code‖gen(d. place Eplace) E E E place: newtem E code: =E,. code/ E> code lI gen(EpCe=飞1 place/+ E2. place E2 Eplace: =newtemp Ecode:=E, Code E,code gen(E place": ="Er.place E2place) E→E Eplace: =newtemp E.code:=E1code‖ gen (E place": =uminus' E1place E→(E1) E place:= E1.place; E code:=E. code E→id E place -id place, E code=
为赋值语句生成三地址代码的S-属性文法定义 产生式 语义规则 S→id:=E S.code:=E.code || gen(id.place ‘:=’ E.place) E→E1+E2 E.place:=newtemp; E.code:=E1 .code || E2 .code || gen(E.place ‘:=’ E1 .place ‘+’ E2 .place) E→E1 *E2 E.place:=newtemp; E.code:=E1 .code || E2 .code || gen(E.place ‘:=’ E1 .place ‘*’ E2 .place) E→-E1 E.place:=newtemp; E.code:=E1 .code || gen(E.place ‘:=’ ‘uminus’ E1 .place) E→ (E1 ) E.place:=E1 .place; E.code:=E1 .code E→id E.place:=id.place; E.code=‘ ’
地址语句的实现 四元式 三元式 ●间接三元式
三地址语句的实现 四元式 三元式 间接三元式
地址语句的实现 四元式 个带有四个城的记录结构,这四个域分别称为op arg1,arg2及 result op arg 1 arg2 result 0) minus 123 T minus cbcbT 3 (4) (5) a a:=b*(c)+b*(-c)的四元式
三地址语句的实现 四元式 ⚫ 一个带有四个域的记录结构,这四个域分别称为op, arg1, arg2及result op arg1 arg2 result (0) uminus c T1 (1) * b T1 T2 (2) uminus c T3 (3) * b T3 T4 (4) + T2 T4 T5 (5) := T5 a a:=b*(-c)+b*(-c)的四元式