8.4简单赋值语句的翻译p179 ■语法1d:=E ■语义计算表达式E的值之后把值赋给变量id ■文法G[S]: S→id:=E E→E1+E2 E→E1*E2 E→-E1 E→(E) E→id 2025/4/3 章节目录可)1
2025/4/3 1 8.4 简单赋值语句的翻译 p179 语法 id := E 语义 计算表达式E的值之后把值赋给变量id 文法G[S]: S→id:=E E→E1+E2 E→E1*E2 E→-E1 E→(E1) E→id 章节目录
语义过程及属性设置p178 ■语义过程 ◆lookup(id.name)检查在符号表中是否存在 id.name的表项。 ookup(id.name)=d,entry1d.name在表y nil 否则 ◆emit(x‘:=’y‘+’z)将生成的三地址代码 x:=y+z发送到输出文件。 ◆newtemp每调用一次,生成一个临时变量。 ■属性设置 ◆存储位置place。例如E.place,T.place等 2025/413 ☒2
2025/4/3 2 语义过程及属性设置p178 语义过程 lookup(id.name)检查在符号表中是否存在 id.name的表项。 emit(x‘:=’y‘+’z) 将生成的三地址代码 x:=y+z发送到输出文件。 newtemp 每调用一次,生成一个临时变量。 属性设置 存储位置 place。例如E.place,T.place等 lookup(id.name)= id.entry id.name在表中 nil 否则
产生赋值语句三地址代码的翻译模式p180 S→id:=E{ p:=lookup (id.name); (sub1) ifp<>nil then emit(p:=,E.place)/*id在表中*/ else error/*id不在表中*/} E→E1+E2 E.place=newtemp; (sub2) emit (E.place':='E1.place'+'E2.place')} E→E1*E2 E.place=newtemp; (sub3) emit (E.place':='E1.place'*'E2.place')} E→-E1 E.place:=newtemp; (sub4) emit(E.place:=''uminus'E1.place} E→(E1) E.place:=E1.place} (sub5) E→id p:=lookup(id.name); (sub6) ifp<>nil then E.place:=p/*id在表中*/ else error/*id不在表中*/} 2025/4/3 ☑D3
2025/4/3 3 产生赋值语句三地址代码的翻译模式 p180 S→id:=E { p:=lookup(id.name); (sub1) if p<>nil then emit(p‘:=’ E.place) /*id在表中*/ else error /*id不在表中*/ } E→E1+E2 { E.place=newtemp; (sub2) emit(E.place':='E1.place'+'E2.place')} E→E1*E2 { E.place=newtemp; (sub3) emit(E.place':='E1.place'*'E2.place')} E→-E1 { E.place:=newtemp; (sub4) emit(E.place ´ := ´ ´uminus´E1.place} E→(E1) { E.place:=E1.place} (sub5) E→id { p:=lookup(id.name); (sub6) if p<>nil then E.place:=p /*id在表中*/ else error/*id不在表中*/ }
a:=-c+b*d自下而上语法制导翻译过程举例 步骤符号栈输入串动作语义值三地址代码 0#a:=-c+b*d#预备 1#1:=-c+b*d#移进 a 2#1:=-c+b*d#移进 a 3#1:=-c+b*d#移进 a 4#i:=-1 +b*d#移进 a_c 5#1:=E +b*d#归sub6a c 6#1:=E+b*d#归sub4aT1 Tl:=-c E父E米E 7#1:旰 b*d#移进 a TI 8#i:=E+1 米d#移进 a T1 b 9#1:=+E *d#归sub6aTI5 10#1:=计E* d#移进 a Tl b 0 11#i:=E+E*1 #移进 a Tl b d 12 #i:=E+E*E #归sub6aT1bd 另见: 13#i:=E+E #归sub3 a T1 T2 T2:=b*d 教材p174 图8.7 14#1:=E #归sub2aT3 T3:=T1+T2 15$ #归sub1 a:=T3 16 分析成功结束 2025/4/3 ✉)4
2025/4/3 4 a:= -c+b*d自下而上语法制导翻译过程举例 步骤 符号栈 输入串 动作 语义值 三地址代码 0 # a:=-c+b*d# 预备 i := E a S E + E - E i c E * E i b i d 1 #i :=-c+b*d# 移进 a 2 #i:= -c+b*d# 移进 a_ 3 #i:=- c+b*d# 移进 a_ _ 4 #i:=-i +b*d# 移进 a_ _c 5 #i:=-E +b*d# 归sub6 a_ _c 6 #i:=E +b*d# 归sub4 a_T1 T1:=-c 7 #i:=E+ b*d# 移进 a_T1_ 8 #i:=E+i *d# 移进 a_T1_b 9 #i:=E+E *d# 归sub6 a_T1_b 10 #i:=E+E* d# 移进 a_T1_b_ 11 #i:=E+E*i # 移进 a_T1_b_d 12 #i:=E+E*E # 归sub6 a_T1_b_d 13 #i:=E+E # 归sub3 a_T1_T2 T2:=b*d 14 #i:=E # 归sub2 a_T3 T3:=T1+T2 15 #S # 归sub1 a:=T3 16 分析成功结束 另见: 教材p174 图8.7
8.5布尔表达式的翻译p181 布尔表达式作用 ■布尔表达式文法 ■布尔表达式翻译方法 ◆数值表示法 ◆作为控制条件的布尔表达式翻译 2025/413 章节目录可D5
2025/4/3 5 8.5 布尔表达式的翻译 p181 章节目录 布尔表达式作用 布尔表达式文法 布尔表达式翻译方法 数值表示法 作为控制条件的布尔表达式翻译