- 1、本文档共85页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
TJNU-COCIE-WJW 编译原理——第七章 语义分析和中间代码产生 王金伟 计算机与信息工程学院 天津师范大学 第七章 语义分析和中间代码产生 在词法分析和语法分析之后的阶段就是语义分析和中间代码生成 本章把第六章介绍的有关语法制导翻译的相关方法和技术用在中间代码生成和语义分析上 主要工作 静态语义检查 翻译 静态语义检查 类型检查:如果操作符作用于不相容的操作数,编译程序必须报告出错信息。 例如,在C语言中”.”因该作用与结构体变量,若作用于指针变量应用“-” 控制流检查:控制流语句必须使控制转移到合法的地方。 例如,在C语言中break语句使控制跳离包括语句的最小while、for或switch语句。如果不存在包括它的这样的语句应该报错。 静态语义检查 一致性检查:很多场合要求对象只能被定义一次 例如,Pascal语言规定同一标识符在一个分程序中只能被说明一次,同一case语句的标号不能相同,枚举类型的元素不能重复出现等等。 相关名字检查:有时,同一名字必须出现两次或多次。 例如,Ada语言程序中,循环或程序块可以有一个名字,它出现在这些结构的开头和结尾,编译程序必须检查这两个地方用的名字是相同的。 其他:如名字的作用域分析等。 翻译(产生中间代码) 采用独立于机器的中间代码的好处: 便于进行与机器无关的代码优化工作 使编译程序改变目标机更容易 使编译程序的结构在逻辑上更为简单明确。以中间语言为界面,编译前端和后端的接口更清晰 第七章 语义分析和中间代码产生 7.1中间语言 中间语言 源程序的中间表示方法 中间语言的形式 后缀式 图表示法 三地址代码 一、后缀式 把运算量(操作数)写在前面,把算符写在后面。 例如: 原式 后缀式 a+b, ab+ a*b, ab* 1.表达式E的后缀表示递归定义 如果E是变量和常数,则E的后缀表示是E本身 如果E是形如E1 op E2的表达式,其中op是任意的二元算符,则E的后缀表示是E1’ E2’ op,其中E1’和E2’分别是E1和E2的后缀表示 如果E是形如op E1的表达式,其中op是一元算符,则E的后缀表示是E1’ op,其中E1’ 是E1的后缀表示 如果E是形如(E1)的表达式,则E1的后缀表示也是E的后缀表示 注意:后缀式不需要括号 例:赋值语句 a := b *(- c)+ b *( - 34) 的后缀式: 二、图表示法 1.特点和形式 描述了源程序的自然层次结构 语法树(抽象语法树) 有向无环图(DAG) 例:a := b * - c + b * - c 后缀式是抽象语法树的线性表示 后根序遍历 a b c uminus * b c uminus * + := 2.产生赋值语句抽象语法树的属性文法 产生式 语义规则 S→ id := E S.nptr := mknode(‘:=’, mkleaf(id, id.place), E.nptr ) E→ E1 + E2 E.nptr := mknode(‘+’, E1.nptr, E2.nptr ) E→ E1 * E2 E.nptr := mknode(‘*’, E1.nptr, E2.nptr ) E→ -E1 E.nptr := mknode(‘uminus’, E1.nptr ) E→ ( E1 ) E.nptr := E1.nptr E→ id E.nptr := mkleaf(id , id.place ) 三、三地址代码 1.一般形式 包含三个地址:两个操作数,一个结果 x := y op z 一系列的上述形式 x, y, z是名字、常数和编译器产生的临时变量 op是算符,定点、浮点、逻辑,只能有一个 例:x + y * z翻译成 t1 := y * z t2 := x + t1 1.一般形式(续) 三地址代码是AST或DAG的线性化表示 DAG图对应的三地址代码可能比相应的AST对应的三地址代码要优化,因为可以复用中间结果 2.三地址代码的种类 (1)赋值语句: x := y op z,op是二元算术算符或逻辑算符 (2)赋值语句: x := op z,op是一元算符,如:负号,逻辑非not等 (3)复写语句: x := y 2.三地址代码的种类(续1) (4)无条件转移: goto L,L是下一步要执行的三地址语句的标号 (5)条件转移语句: if x relop y goto L 根据逻辑运算的结果决定是否执行转移 if a goto L a为真跳到L执行,否则执行if后边的语句 2.三地址代码的种类(续2) (6)过程调用语句: param
您可能关注的文档
- 编程基础第9章界面设计教材分析.ppt
- 编导合集(写作部分)教材分析.ppt
- 编辑:人的生殖》教材分析.ppt
- 编录员的基本要求4教材分析.ppt
- 编码chapter1教材分析.ppt
- 编制注水泥塞施工方案教材分析.ppt
- 编纂民法典视野下的法人制度(修改4-19)教材分析.doc
- 肠_粘_膜_屏_障教材分析.ppt
- 肠出血性大肠杆菌0104:H4调查过程及防控策略教材分析.ppt
- 肠穿孔xiugai2教材分析.ppt
- springbooot+vue基于java的房屋维修系统毕业论文.doc
- 中国消防救援学院《单片机系统实验》2023-2024学年第一学期期末试卷.doc
- 2025年溧阳纺织化学品项目申请.pptx
- 景区门票包销合同模板(3篇).docx
- 【股票技术指标学习指南】第七章第三节货币需要量的测算.doc
- 2025春 _ 人教版七年级英语下册【unit4】看音标写单词.doc
- 2025春 _ 人教版七年级英语下册【unit5】看音标写单词.doc
- 2025春 _ 人教版七年级英语下册【unit6】看音标写单词.doc
- 2025春 _ 人教版七年级英语下册【unit7】看音标写单词.doc
- 2025春 _ 人教版七年级英语下册【unit8】看音标写单词.doc
最近下载
- 2.1 走进化学实验室(第1课时)(课件)八年级化学全一册(沪科版五四学制2024).pptx VIP
- 部编版二年级上册语文第二单元教案.pdf VIP
- 2024广西高质量共建“一带一路”谱写人类命运共同体新篇章公需课答案.docx VIP
- 公务员考试-2019公考核心政策解读1.doc VIP
- 部编版二年级上册语文第二单元教案.docx VIP
- 贵州省2023-2024学年高一上学期期末英语试题(含答案).pdf VIP
- DND法术列表分析和总结.pdf VIP
- 安利索ACVF门机变频器调试说明书(中文版).doc
- 高中数学 导数的概念及其几何意义讲义 新人教版选修2-2.doc VIP
- 电机拖动与电气控制 第6章 电气控制电路的基本控制环节.pptx VIP
文档评论(0)