网站大量收购独家精品文档,联系QQ:2885784924

[文学研究]编译技术中控制结构的语义分析.ppt

[文学研究]编译技术中控制结构的语义分析.ppt

  1. 1、本文档共56页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[文学研究]编译技术中控制结构的语义分析

编译技术中控制结构的语义分析 电子科技大学 编译原理课程组 引言 编译原理教学的几个难点 LR分析法 语义分析(控制结构的语义分析) 运行时存储空间分配(活动记录) 讨论内容 1. 控制结构 高级程序设计语言的语句级控制结构及其抽象性。 2. 控制结构的显示化描述 以伪代码的方式给出控制结构的显示化描述,为语义分析奠定基础。 3. 应用实例 一个典型的控制结构在一个真实编译器中的语义分析实例。 1. 控制结构 高级程序设计语言提供了描述程序执行顺序的机制,通常把这些机制称为控制结构。控制结构包括单元级控制结构和语句级控制结构。 语句级控制结构是高级程序设计语言用来构造各种语句执行顺序的机制。 传统的高级程序设计语言包括3种语句级控制结构:顺序、选择和重复。 1.1 顺序结构 顺序结构是高级程序设计语言可用的最简单的控制结构,例如 S1 ;S2 表明语句S1执行之后,紧接着执行语句S2。其中“;”是用来分隔语句并对语句定序的控制算符,称为顺序运算符。 1.2 选择结构 选择控制结构允许程序员在某些可选择的语句中做出一种选择来执行。可以分为3种情况: 条件选择(if then) 二选一(if then else) 多选一(嵌套if、switch) 1.3 重复结构 重复控制结构允许程序员规定在某些语句上进行循环。 循环次数已知:计数器循环 循环次数未知:条件循环 1.4 控制结构的抽象性 顺序、选择和重复可以帮助程序员组织语句的控制流程,是基本的控制工具。 顺序是按计算机程序计数器(硬件)提供的顺序获得指令的一种抽象。 选择和重复是显式修改计算机程序计数器(硬件)的值,实现无条件转移和条件转移的抽象。 抽象控制结构比显式控制转移修改指令计数器的低级控制机制更好些,它更面向问题,程序员通过使用顺序、选择和重复的一般模式就能较好地表达他们的意图。 高级程序设计语言最终还是要翻译成传统计算机的条件转移和无条件转移机器代码,但这已与程序员无关,将由编译器生成有效的机器代码,因而采用高度抽象概念有利于程序设计。 2. 控制结构的显示化描述 针对典型的控制结构,可以以伪代码方式显示化的表达控制结构,有助于更加清楚的了解语义分析的目标,为后续语义分析方法(语义子程序)的讲解奠定基础。 顺序控制结构 选择控制结构(条件选择、二选一) 循环控制结构(条件循环、计数器循环) 2.1 顺序控制结构 抽象表示:S1; S2 显示化表示: S1; S2 代码实例 a = 1; b = a + b; c = -a*(b+c); 显示化的控制结构(源代码) a = 1; b = a + b; c = -a*(b+c); 中间代码(三地址码) a = 1 t1 = a + b b = t1 t2 = -a t3 = b + c t4 = t2 * t3 c = t4 目标代码(汇编码) mov a, 1 /* a = 1 */ mov r1, a add r1, b mov b, r1 /* b = a + b */ mov r1, 0 sub r1, a mov r2, b add r2, c mul r1, r2 mov c, r1 /* c = -a*(b+c) */ 2.2 选择控制结构 2.2.1 条件选择 抽象表示:if B then S 显示化表示: S.START: if B goto B.TURE /* B.TURE == S.START+2 */ B.FALSE: goto S.END /* S.END == ? */ B.TURE: S S.END: 代码实例 if ab then a=a+b 显示化的控制结构(源代码) S.START if ab goto B.TURE B.FALSE: goto S.END B.TURE: a:=a+b S.END: 中间代码(三地址码) 100: if a b goto 102 101: goto 104 102: t1= a+b 103: a = t1 104: 目标代码(汇编码) mov r1, a sub r1, b jl L1 /* if ab */ jmp L2 L1: mov r1, a add r1, b /* a = a + b */ L2: 2.2.2 二选一 抽象表示:if B then S1 else S2(二选一) 显示化表示: S.START: if B goto B.TURE /* B.TURE == S.START+2 */ B.FALSE: goto S.ELSE /* S.ELSE == ? */ B.TURE: S1 goto S.END

文档评论(0)

jiupshaieuk12 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:6212135231000003

1亿VIP精品文档

相关文档