版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、编译原理 n第一章 概述 n第二章 PL/0编译系统 n第三章词法分析程序 的自动构造 n第四章文法和语言 n第五章自顶向下语法 分析 LL(1)文法 n第六章自底向上语法分 析 LR分析程序及其自动构造 n第七章 语法制导翻译和 中间代码生成 n第八章 运行时的存储组 织和管理 n第九章 代码优化 n第十章代码生成 第一章 概述 n1.1什麽是编译程序 n1.2编译过程和编译程序的结构 n1.3 编译技术的发展和应用 n 参考书 什么是编译程序(compiler) 编译程序是现代计算机系统的基本组成部 分. 从功能上看,一个编译程序就是一个语言 翻译程序,它把一种语言(称作源语言)书 写的程
2、序翻译成另一种语言(称作目标语 言)的等价的程序. 1.1 n功能 术语术语 编译程序的源语言 (源程序) 编译程序的目标语 言(目标程序) 编译程序的实现语 言 S O I 高级语言 书写的程序 编译程序低级语言程序 S T I 什么是编译程序 n分类 软件 系统软件 语言处理系统 操作系统 编译系 统 裸机 分类 n软件:计算机系统中 的程序及其文档 n系统软件:居于计算 机系统中最靠近硬件 的一层,其他软件一 般都通过系统软件发 挥作用。他和具体的 应用领域无关,如编 译系统和操作系统等。 n语言处理系统:把软 件语言书写的各种程 序处理成可在计算机 上执行的程序。 n软件语言:用于书写
3、 软件的语言。它主要 包括需求定义语言, 功能性语言,设计性 语言,程序设计语言 以及文档语言。 n 预处理器 编译器 汇编器 装配连接编辑 骨架程序 源程序 目标汇编程序 可重定位机器代码 绝对机器码 可重定位目标文件库 语言处理过程语言处理过程 什么是编译程序 n语言转(变)换系统 C+编译器 C+ C Java Bytecode Java编译器 术语 n编译程序(compiler) n编译程序的源语言(源程序) (source language)(source program) n编译程序的目标语言(目标程序) (object or target language)(object or
4、target program) n编译程序的实现语言(implementation language) n语言处理程序(language processor) n语言转(变)换(language transformation) 1.2 编译过程和编译程序的结构 n编译逻辑过程 词法分析 语法分析 语义分析 中间代码生成 代码优化 目标代码生成 词法分析 n从左至右读字符流的源程序、识别(拼)单词 例: position := initial + rate * 60; 词法分析 position := initial + rate * 60; 单词类型单词类型单词值单词值 标识符1(id1) p
5、osition 算符(赋值) := 标识符2(id2) initial 算符(加) + 标识符3(id3) rate 算符(乘) * 整数 60 分号 ; 又如一个C源程序片断: int a; a = a + 2; 词法分析后可能返回: 单词类型单词类型单词值单词值 保留字 int 标识符(变量名) a 界符 ; 标识符(变量名) a 算符(赋值) = 标识符(变量名) a 算符(加) + 整数 2 界符 ; 有关术语 n词法分析(lexical analysis or scanning) -The stream of characters making up a source program
6、 is read from left to right and grouped into tokens,which are sequences of characters that have a collective meaning. n单词-token n保留字-reserved word n标识符 -identifier(user-defined name) 语法分析 n功能:层次分析.依据依据源程序的语法规则语法规则把源程 序的单词序列组成语法短语(表示成语法树). position := initial + rate * 60 ; 规则规则 :=“:=” :=“+” :=“*” :=“
7、(”“)” := := := 赋值语句 标识符表达式 表达式+ 表达式表达式 标识符整数 标识符 := 表达式 * id1:=id2+id3*N := + N 60 * id1 Position id2 initial id3 rate 术语 n语法分析(syntax analysis or parsing) The purpose of syntax analysis is to determine the source programs phrase structure.This process is also called parsing.The source program is pa
8、rsed to check whether it conforms to the source languages syntax,and to construct a suitable representation of its phrase structure. n语法树(推导树)(parse tree or derivation tree) 语义分析 语义审查(静态语义) 上下文相关性 类型匹配 类型转换 例:Program p(); Var rate:real; procedure initial; position := initial + rate * 60 /* error */
9、/* error */ /* warning */; 又如: n int arr 2,abc; n abc = arr * 10; nProgram p(); nVar rate:real; n Var initial :real; n Var position :real ; n n position := initial + rate * 60 语义分析 60 := + * Id1 position Id2 initial Id3 rate inttoreal 术语 n语义分析(semantic analysis) The parsed program is further analyze
10、d to determine whether it conforms to the source languages contextual constraints:scope rules, type rules e.g. To relate each applied occurrence of an identifier in the source program to the corresponding declaration. 中间代码生成 源程序的内部(中间)表示 三元式、四元式、P-Code、C-Code、 U-Code、bytecode ( * id3t1t2) t2 = id3 *
11、 t1 t2 := id3 * t1 中间代码生成 id1:= id2 + id3 * 60 (1)(inttoreal,60-t1) (2)(*,id3t1t2) (3)(+,id2t2t3) (4)(:=,t3-id1) 中间代码生成(intermediate code generation) This is where the intermediate representation of the source program is created.We want this representation to be easy to generate,and easy to translat
12、e into the target program.The representation can have a variety of forms,but a common one is called three-address code or 4- tuple code. 代码优化 id1:= id2 + id3 * 60 (1)(inttoreal60-t1) (2)( * id3t1t2) (3)( +id2t2t3) (4)( :=t3-id1) 变换变换 (1) ( *id360.0t1) ( 2)( + id2 t1id1) 代码优化 t1 = b* c t1 = b* c t2 =
13、 t1+ 0 t2 = t1 + t1 t3 = b* c a = t2 t4 = t2 + t3 a = t4 代码优化(code optimization) nIntermediate code optimization The optimizer accepts input in the intermediate representation and output a version still in the intermediate representation .In this phase,the compiler attempts to produce the smallest,f
14、astest and most efficient running result by applying various techniques. nObject code optimization 目标代码生成 (*,id360.0t1) (+,id2t1id1) movfid3,R2 mulf#60.0,R2 movfid2,R1 addfR2,R1 movfR1,id1 符号表管理 n记录源程序中使用的名字 n收集每个名字的各种属性信息 类型、作用域、分配存储信息 Const1常量值:35 Var1变量类型:实层次:2 符号表(symbol table) nSymbol table is
15、a data structure which is employed to associate identifiers with their attributes . nAn identifiers attribute consists of information relevant to contextual analysis,and is obtained from the identifiers declaration. 出错处理 n检查错误、报告出错信息、排错、恢复 编译工作 出错处理(error handling)(error reporting and error recovery
16、) nThe compiler should report the location of each error,together with some explanation. The major categories of compile-time error: syntax error, scope error, type error. nAfter detecting and reporting an error,the compiler should attempt error recovery,means that the compiler should try to get its
17、elf into a state where analysis of the source program can continue as normally as possible. 编译程序结构(components) n词法分析程序 n语法分析程序 n语义分析程序 n中间代码生成程序 n代码优化程序 n目标代码生成程序 n符号表管理程序 n出错处理程序 出 错 处 理 语法分析程序 语义分析程序 目标代码生成程序 词法分析程序 中间代码生成程序 代码优化程序 表 格 管 理 编译阶段的组合 n分析,综合(synthesis) 源程序的分析 线性分析 层次分析 语义分析 目标程序的综合 n编
18、译的前端(front end) n编译的后端(back end) n遍(趟)遍(趟)从头到尾扫描源程序(各种形 式)一遍遍(pass) 高级语言解释系统(interpreter) n功能 让计算机执行高级语言(basic,lisp,prolog) n与编译程序的不同 1)不生成目标代码 n 2)能支持交互环境 n (同增量式编译系统) n源 程 序 n n初始数据 解释程序计算结果 解释系统 n直接对源程序中的语句进行分析,执行其隐含的操作。 n如: n b := 2 ; n a := b+2 ; 编译程序 n write a ; n n解释程序直接将4的值输出(显示) Int 2 St b
19、Ld b add 2 St a 生成代码 编译阶段和运行阶段存储结构 n 编译时 运行时 名字表 目标代码缓冲区 编译用源程序中 间表示各种表格 目标代码区 数据区 源程序缓冲区 解释系统存储结构 解释系统 源程序 工作单元 名字表 标号表 缓冲区 (输入输出) 栈区 1.3 编译技术的发展和应用 n功能:程序 集成环境 n实现方式 手工 机器语言 汇编 系统程序设计语言 自动构造工具lex yacc gcc S O I 编译程序的发展 Human- oriented language Computer- oriented language 计算模式,语 言范式 语言应用领域 编译程序 万诺曼
20、机体系 结构 并行体系结构 嵌入系统 编译程序的发展 n语言范型(paradigms) 命令式(imperative language) 应用式(applicative) 基于规则的(rule-based) 面向对象的(object-oriented) n编译程序执行环境 批处理 交互环境 嵌入系统环境 语言范型(支持的计算模式) n 命令式: n程序特点: 语言执行的解释: 编译技术发展快: n语句1; 改变机器状态 系统语言 n语句2; 内存 自动化生成技术 n语句3; 各种寄存器 的内容 n 外存 与万诺曼机的 体系结构一般 应用式(函数式): 程序特点: Function n(fune
21、tion2(funetion1(data) 程序执行: 执行一个个函数施用在数据上的变换最终得到的结果 编译: 语法分析容易; 语义处理复杂; 基于规则的语言(prolog,yacc): 程序特点: 使能条件1 动作1 使能条件2 动作2 使能条件3 动作3 面向对象语言: 抽象数据类型,继承机制 编译: 动态绑定; 执行环境 n批处理环境:将源程序作为整体处理 n 排除程序错误不能依靠用户的外部帮助 n交互环境:解释 n 增量式编译 n嵌入式系统环境:交叉编译 n分布并行环境:并行编译 n程序创建和测试环境: 独立编译 n 编译和调试同时设计考虑 编译技术的发展和应用 n结构化编译器 n程序
22、分析工具 静态分析 n 动态分析 n 度量工具 结构度量 n 模块接口复杂度 n c分析工具(source insight) n广泛的语言领域 数据库系统查询 n 脚本语言 n 置标语言(SGML.HTML.XML) 研究领域 n并行编译技术 n交叉编译技术 n硬件描述语言及其编译技术 并行化编译技术 n目的:提高并行计算机体系结构的性能。 n超大规模计算的日益增长的需求 高性能计算机 n 并行软件 并行体系结构 单机速度 并行体系结构 途 径 1 途 径 2 并行体系结构 编译技术支持 串行程序并行化 编译技术支持 并行程序设计语言编译 依赖于目标机的优化(低层) 性 能 发 挥 并行算法复
23、杂,难掌握,难编程 开发并行 软件的困难 并行程序的不确定行为,难调 试,验证 设计新的并行算法 修改已有串行程序尽量 (直接用并行程序 并行化(研究算法和 设计语言和并行程 应用的人同时工作) 序库实现。). HPF.Occom. PVM 途 径 12 嵌入式 嵌入式操作系统 宿主机操作系统及支撑环境 编辑器 连接器 交叉调试器 仿真器 下载器 交叉编译器 代码优化器 嵌入式应用 交叉编译器 由于目标机指令系统与宿主机的指令系统不同,编译由于目标机指令系统与宿主机的指令系统不同,编译 时将应用程序的源程序在宿主机上生成目标机代码,时将应用程序的源程序在宿主机上生成目标机代码, 称为交叉编译。称为交叉编译。 SO I O AB 硬件描述语言及其编译技术 n电路设计依据 n验证结果 如:VHDL 第一章 小结 n内容 n1 什么是编译程序 n2 编译过程和编译程序的结构 n3 为什么要学习编译程序 n本
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年质量管理体系建立与实施指南
- 企业人力资源管理与企业绩效评估指南
- 商业购物中心无乐不造3活动策划方案
- 民航安全管理规范与流程(标准版)
- 物业管理公司服务标准与流程手册(标准版)
- 城市道路施工质量保证制度
- 车站设备维修保养制度
- DB61T 2084-2025农村水电站标识标志标线设置及设备着色规范
- 财务资金回收与坏账处理制度
- 办公室投诉与反馈处理制度
- 上海市松江区2026届初三一模英语试题(含答案)
- 2026年孝昌县供水有限公司公开招聘正式员工备考题库及参考答案详解一套
- 光伏系统并网调试施工方案
- 《2024消费者金融知识学习偏好及行业宣教洞察报告》
- 中国高血压防治指南(2024年修订版)解读课件
- 科研项目数据保护应急预案
- 2024年土地转租的合同范本
- 附件2:慢病管理中心评审实施细则2024年修订版
- DL∕T 5776-2018 水平定向钻敷设电力管线技术规定
- 国防装备全寿命周期管理
- 2023年高考英语应用文模板、范文大全
评论
0/150
提交评论