- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 4.8 控制语句 [例2] while E3 do while E4 do S4 如何在一遍分析中确定语句中所有可能的正确转向? 解决方案:拉链与回填 * 4.8 控制语句 属性.nc:语句结束后的转向。未确定时拉链,确定后回填。 属性.begin:语句(如while)的三地址码序列首地址。 (1)M→ε {M.stat:=nextstat;} (2)S→if E then M S1 {backpatch(E.tc,M.stat); S.nc:= merge(E.fc,S1.nc);} (3)N→ε {N.nc:= mkchain(nextstat); emit(goto -);} (4)S→if E then M1 S1 N else M2 S2 {backpatch(E.tc,M1.stat); backpatch(E.fc,M2.stat); S.nc:=merge(S1.nc,merge(N.nc,S2.nc));} (5)S→while M1 E do M2 S1 {backpatch(S1.nc,M1.stat); backpatch(E.tc,M2.stat); S.nc:=E.fc; emit(goto M1.stat);} (6)S→A {S.nc := mkchain();} * 4.8 控制语句 [例4.23]if ab then while ab do a := a+b的语法制导翻译 (1) if ab goto (3) (2) goto - (3) if ab goto (5) (4) goto - (5) t1 := a+b (6) a := t1 回填(3) (7) goto (3) 回填(1) * 4.9 本章小结 重点是程序设计语言的静态语义分析,并且在语法分析的基础上生成中间代码,采用的基本方法是语法制导翻译。 语法制导翻译的基本概念 语法与语义 属性与语义规则 语义规则的两种形式 中间代码 为什么生成中间代码 常用形式:树、后缀式、三地址码(三元式、四元式) 符号表的组织 条目与信息存储(直接/间接) 作用域信息保存(线性表、散列表) * 4.9 本章小结 声明语句的翻译 定义与声明:类型定义与变量声明,过程定义与声明 变量声明:填写符号表 过程声明 左值与右值 值调用、引用调用、复写-恢复、换名调用 名字的作用域:静态作用域与最近嵌套原则 嵌套定义的过程中信息的存储 可执行语句的翻译 简单算术表达式和赋值句的翻译:类型转换 数组元素的引用 * 4.9 本章小结 布尔表达式短路计算的翻译:为什么需要短路计算,短路计算的控制流,真出口与假出口,真值链与假值链 控制语句的翻译:控制语句的分类,无条件转移与条件转移,拉链/回填技术 基本设计方法 声明性语句:需要保存什么信息,设计什么样的数据结构存放这些信息 可执行语句:生成什么样的中间代码序列,如何设计语法制导定义,如何设计翻译方案 第四章 语法制导翻译生成中间代码 作业 4.1 4.3 4.4 4.5 4.7 4.11 4.14 4.16 * 在所有声明之前需要设置offset为0,通过引入空产生式来实现 P-M D M-e * M为空产生式,N可以不用,引入PROC-proc产生式,加入语义动作即可。 * 短路计算的原理可以不讲,直接通过实例来讲解拉链回填。 (1)A之后的字母为? (2)C之前的字母为? (5)E之后的字母为? (6)G之前的字母为? (1)(2)相同 (5)(6)相同 答案相同时,需要把它们记下来 知道答案是,把答案填回去 * * 4.5 简单算术表达式与赋值句 E→E1 op E2 { T:=newtemp;E.mode:=real; if E1.mode=int then if E2.mode=int then emit(T := E1.place OPi E2.place); E.mode := int; else U:=newtemp; emit(U := itr E1.place); emit(T := U OPr E2.place); end if; else if E2.mode=int then U:=newtemp; emit(U := itr E2.place); emit(T := E1.place OPr U); else emit(T := E1.place OPr E2.place); end if; end if; E.place:=T; } 其他语义规则看教材P128-129 * 4.5 简单算术表达式与赋值句 [例4.17
您可能关注的文档
最近下载
- 中学食堂建设项目社会稳定风险评估报告(模板范文).docx
- 第9课 互传密信有诀窍 教案 义务教育人教版信息科技五年级全一册.docx VIP
- 根本原因分析精神病人自杀RCA.pptx VIP
- SL523-2024 水土保持监理规范.docx VIP
- 路面结构层厚度评定表(代表值自动计算).xls VIP
- 雨虹防水质保合同范本Word模板.docx VIP
- 旅游产品策划与设计422全书教学课件电子教案.ppt
- Toll样受体信号通路中MyD88的研究进展_吴燕燕.pdf VIP
- 2024水土保持工程施工监理规范.docx VIP
- 义务教育版(2024)五年级全一册 第1课 生活处处有算法 教案.docx VIP
文档评论(0)