文档详情

【编译原理课件】cha8 语法制导翻译和中间代码生成.ppt

发布:2018-01-17约2.59万字共97页下载文档
文本预览下载声明
* * 关于x:=A[y,z]的带注释的分析树 Elist.place=T1 m=2 S L := E id x L Elist ] Elist , E A [ E L y L z ①sub6 L.place=x L.offset=null ②sub6 L.place=y L.offset=null ③sub4 E.place=y Elist.place=y Elist.ndim=1 Elist.array=A ④sub8 ⑤sub6 L.place=z L.offset=null ⑥sub4 E.place=z ⑦sub7 T1=y * 20 T1=T1 + z Elist.ndim=2 Elist.array=A ⑧sub5 L.place=T2 T2=A - C L.offset=T3 T3=4 * T1 ⑨sub4 E.place=T4 T4=T2[T3] ⑩sub1 x=T4 84 章节目录 * * 作业 p203 1 2 3 5 补充1 写出下列语句的四元式序列。 if A and B and C D then if A B then F:=1 else F:=0 else G:=G+1; 补充2 写出下列语句的四元式序列。 while AC and BD do if A=1 then C:=C+1 else while A=D do A:=A+2; 章节目录 * * 作为控制条件布尔表达式应用举例 例 while a<b or c<d and e<f do x:=y+z 回填E.truelist 回填E.falselist 100(j,a,b, 0 ) 101(j,_,_, 102) 102(j,c,d,104) 103(j,_,_, 0 ) 104(j,e,f, 100 ) 105(j,_,_, 103 ) E.falselist E.truelist 106(+,y,z,T1) 107(:=,T1,_,x) E.true 106 106 S.next 108(j,_,_,100) S.begin 109 E.false 109 109 S.next S.begin S.begin 节目录 * * 8.6 控制结构的翻译 p186 8.6.1 条件转移 if语句 while语句 8.6.6 过程调用 章节目录 * * if_then语句的代码结构 p183 语法 S→if E then S1 语义 如果E的值为true, 那么执行S1 举例 if cd then a:=b+2 翻译成四元式序列为: E.code S1.code E.true: E.false: ... to E.true to E.false 100 (j,c,d, 0) E.true 101 (j,_,_, 0) E.false E.f E.t 102 (+,b,2,T1) 103 (:=,T1,_,a) 104 E.true E.false 102 104 * * if_then_else的代码结构 语法 S→if E then S1 else S2 语义 如果E的值为true,那么执行S1;否则执行S2 举例if cd then x:=y+z else x:=y-z 翻译成四元式序列为: E.code S1.code E.true: S2.code E.false: goto S.next ... S.next: to E.true to E.false 100 (j,c,d, 0) 101 (j,_,_, 0) E.true E.false E.f E.t 102 (+,y,z,T1) 103 (:=,T1,_,x) E.true 102 104 (j,_,_, 0) S.next 105 (-,y,z,T2) 106 (:=,T2,_,x) 107 E.false 105 S.next 107 * * 嵌套if_then_else的翻译练习 if ab then if cd then x:=y+z else x:=y-z else a:=b+2 E1.true E1.false E1 E2 S1 S2 S3 100 (j,a,b, 0) 101 (j,_,_, 0) E1.
显示全部
相似文档