编译原理第7章(刘磊 机械工业出版社)
第 7 章 中间代码生成常用的中间代码结构 语法制导方法概论 类型检查和类型转换 中间代码生成中的几个问题
7.1 常用的中间代码结构后缀式----逆波兰式 后缀式----逆波兰式 ---抽象语法树和有向无环图——AGT和 DAG AGT和 抽象语法树和有向无环图 AGT 三地址中间代码(三元式、四元式) 三地址中间代码(三元式、四元式)
7.1.1 后缀式按操作符与其运算分量的位置,表达式可分为: 按操作符与其运算分量的位置,表达式可分为: 1. 前缀式:运算符在前,如+ AB 前缀式:运算符在前, 2. 中缀式 运算符在中间,如 A+ B 中缀式: 运算符在中间, 3. 后缀式 后缀式——逆波兰式 , 运算符在后,如 A B + 逆波兰式 运算符在后, 中缀式 a:=b*c+b/d 对应的后缀式 abc*bd/+:=
7.1.2 抽象语法树和有向无环图抽象语法树: 抽象语法树: Abstract Grammer 有向无环图: 有向无环图: Directed Acyclic 设有c:=a*b+a*b, c:=a*b+a*b,对应的 设有c:=a*b+a*b,对应的 AGT 和:= c * a b a + * b a DAG c
Tree ; AGT Graph ;DAG 如下。 DAG 如下。:= + * b
AGT
7.1.3 三地址中间代码三元式: OP,operand1,operand2) 三元式: (OP,operand1,operand2) 四元式: OP, 四元式:( OP, operand1, operand2 ,result)
b×c+b× 如:a:= b×c+b×d三元式 (×, b, c) × (×, b, d) × (+, (1), (2)) (:=, (3), a) 四元式 (×, b, c, t1) × (×, b, d, t2) × (+, t1, t2, t3) (:=, t3, a, -)
(1) (2) (3) (4)
(1) (2) (3) (4)
7.2 语法制导方法概论语法制导方法: 语法制导方法: (1)基于文法结构 (2)在每个产生式的右部增加语义动作 在分析语法的过程中,如遇到语义动作, (3)在分析语法的过程中,如遇到语义动作,就 完成相应的处理。 完成相应的处理。 语法制导方法的构成: 语法制导方法的构成: 抽象描述部分: 抽象描述部分:带有动作的文法描述 实现部分: 实现部分:语法分析的同时处理语义
语法制导方法的分类: 语法制导方法的分类: (1)自顶向下语法制导:以LL(1)分析为基础 )自顶向下语法制导: 分析为基础 (2)自底向上语法制导:以LR (1)分析为基础 )自底向上语法制导: 分析为基础
LL(1)文法: LL(1)文法: 文法 G: S → A B A → a A|b B → b B|c 的动作文法: G的动作文法: S → #Init# A B A → a A|b #Add # B → b #Add# B|c #Out_Val#
各动作符对应的语义子程序: 各动作符对应的语义子程序:
Init: m:=0 Add : m:=m+1 m≠ Out_Val: if m≠0 then begin print(m); m:=0; end
处理abbc的过程 的过程 处理 符号栈 S #Init# A B aAB AB b #Add #B #Add #B b #Add #B #Add #B B c #Out_Val# #Out_Val# 输入流 abbc# abbc# abbc# bbc# bbc# bc# bc# c# c# c# # # 语义动作 m:=0 匹配 匹配 m:=m+1 匹配 m:=m+1 匹配 print(m); m:=0; 成功结束
7.3 类型检查和
类型转换
把类型检查的工作放在中间代码生成时 进行。 进行。
类型检查类型和类型检查的语法单位类型相容性检查项目各种条件表达式的类型是否是布尔类型 运算符的运算分量是否相容 赋值语句的左、 赋值语句的左、右部类型是否相容 实参与形参的类型是否相容 下标表达式的类型是否为所允许的类型 函数说明中的函数类型与返回值的类型是 否一致
类型检查的语 法单位if语句、while语 if语句、while语 语句 repeat语句 句、repeat语句 表达式 赋值语句 过程调用语句、 过程调用语句、 函数调用语句 下标变量 赋值语句
7.4 中间代码生成中的几个问题语义信息的获取与保存 语义栈sem sem及其操作 语义栈sem及其操作 常用的语义子程序 1.申请临时单元 1.申请临时单元 2.存放中间代码的子程序 存放中间代码的子程序Generate 2.存放中间代码的子程序Generate 3.产生一条中间代码子程序GenCode。 产生一条中间代码子程序GenCode 3.产生一条中间代码子程序GenCode。
…… 此处隐藏:327字,全部文档内容请下载后查看。喜欢就下载吧 ……相关推荐:
- [外语考试]管理学 第13章 沟通
- [外语考试]07、中高端客户销售流程--分类、筛选讲
- [外语考试]2015-2020年中国高筋饺子粉市场发展现
- [外语考试]“十三五”重点项目-汽车燃油表生产建
- [外语考试]雅培奶粉培乐系列适用年龄及特点
- [外语考试]九三学社入社申请人调查问卷
- [外语考试]等级薪酬体系职等职级表
- [外语考试]货物买卖合同纠纷起诉状(范本一)
- [外语考试]青海省实施消防法办法
- [外语考试]公交车语音自动报站系统的设计第3稿11
- [外语考试]logistic回归模型在ROC分析中的应用
- [外语考试]2017-2021年中国隔膜泵行业发展研究与
- [外语考试]神经内科下半年专科考试及答案
- [外语考试]园林景观设计规范标准
- [外语考试]2018八年级语文下册第一单元4合欢树习
- [外语考试]分布式发电及微网运行控制技术应用
- [外语考试]三人行历史学笔记:中世纪人文主义思想
- [外语考试]2010届高考复习5年高考3年联考精品历史
- [外语考试]挖掘机驾驶员安全生产责任书
- [外语考试]某211高校MBA硕士毕业论文开题报告(范
- 用三层交换机实现大中型企业VLAN方案
- 斯格配套系种猪饲养管理
- 涂层测厚仪厂家直销
- 研究生学校排行榜
- 鄱阳湖湿地景观格局变化及其驱动力分析
- 医学基础知识试题库
- 2010山西省高考历年语文试卷精选考试技
- 脉冲宽度法测量电容
- 谈高职院校ESP教师的角色调整问题
- 低压配电网电力线载波通信相关技术研究
- 余额宝和城市商业银行的转型研究
- 篮球行进间运球教案
- 气候突变的定义和检测方法
- 财经大学基坑开挖应急预案
- 高大支模架培训演示
- 一种改进的稳健自适应波束形成算法
- 2-3-鼎视通核心人员薪酬股权激励管理手
- 我国电阻焊设备和工艺的应用现状与发展
- MTK手机基本功能覆盖测试案例
- 七年级地理教学课件上册第四章第一节




