编译原理与技术 2018/11/30 《编译原理与技术》讲义.

Slides:



Advertisements
Similar presentations
会计从业资格 初级会计电算化. 考试题型: 本章内容在考试中以单选题、多选题、判断题 形式出现; 重点理解计算机软件的概念,掌握计算机软件 的构成,了解常用软件的内容。 计算机软件.
Advertisements

A-1 A-2 A-3 A-4 A-5 A-7 A-6 A-8 A-9. B-1 B-2 B-3 B-4.
编译原理和技术 大连理工软件学院 江 贺 课 程 简 介课 程 简 介课 程 简 介课 程 简 介 教材和参考书 陈意云、张昱,编译原理,高等教育出版社, 2003 Louden, K.C, 《编译原理及实践(英文版)》. 中信出版社 Alfred V.Aho,
第一章 引 论 名词解释 编译器从逻辑上可以分成若干个阶段 每个阶段把源程序从一种表示变换成另一种表示
銀行生涯的機會與挑戰
何谓学龄期 学龄期是指6~7岁入小学起至12~14岁进入青春期为止的一个年龄段。期小儿体格生长仍稳步增长,除生殖系统外其他器官的发育到本期末已接近成人水平。 这个时期发病率较前为低,但要注意预防近视眼和龋齿,矫治慢性病灶,端正坐、立、行姿势,安排有规律的生活、学习和锻炼,保证充足的营养和休息,注意情绪和行为变化,避免思想过度紧张。
第 2 章 初探 C++.
健康選擇飲品 營養師 顏妤蓉 2017/3/13.
任课老师:戴新宇 助教: 实验一 词法分析和语法分析 任课老师:戴新宇 助教: 2014年3月20日.
编译原理和技术.
编译原理实践及应用 ----清华大学出版社.
全球暖化 想知道全球暖化的嚴重性嗎? 那就繼續看下去吧!! 組員:陳儀君60524 蘇鈺祺60526 于玉琳60528 林宥嫻60521.
第1讲 实验环境.
中国科学技术大学 计算机科学与技术学院 陈意云
基于解释性语言的手机跨平台架构 Sloan Yi. Qt MTK.
新世代計算機概論 第14章 程式語言.
计算机基础知识 丁家营镇九年制学校 徐中先.
第一章 C语言概述.
Hadoop I/O By ShiChaojie.
編譯環境介紹.
张昱 中国科学技术大学 计算机科学技术系 合肥
助教:胡光能,解定宝 编译原理讲师:戴新宇
引论 赵建华 南京大学计算机系 2009年2月.
第六章 运行时存储空间的组织和管理 术语 本章内容 讨论一个活动记录中的数据布局 程序执行过程中,所有活动记录的组织方式 过程的活动
第一章 C語言概論 本章投影片僅供本書上課教師使用,非經同意請勿拷貝或轉載.
第八章 代 码 生 成 本章内容 一个简单的代码生成算法 涉及存储管理,指令选择,寄存器分配和计算次序选择等基本问题 前端 代 码 优 化
走进编程 程序的顺序结构(二).
Zhao4zhong1 (赵中) C语言指针与汇编语言地址.
Zhao4zhong1 (赵中) C语言指针与汇编语言地址.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
第五讲 四则运算计算器(一) 精品教程《C#程序设计与应用(第2版)清华大学出版社 谭恒松 主编
编译器设计与实现 梁红瑾
第二章 Java语言基础.
Instructor:Po-Yu Kuo 教師:郭柏佑
中国科学技术大学计算机系 陈香兰(0551- ) Spring 2009
《编译原理与技术》 期末复习 计算机科学与技术学院 郑启龙 李 诚 25/12/2018.
序及第0章.
C语言程序设计 主讲教师:陆幼利.
微机系统的组成.
$9 泛型基础.
第 3 章、組合語言 作者:陳鍾誠 旗標出版社.
第1章 c++概述 1.1 C++语言的简史及特点 1.2 简单的C++程序 1.3 C++语言的基本组成
编译原理.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月13日.
实验七 安全FTP服务器实验 2019/4/28.
<编程达人入门课程> 本节内容 内存的使用 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
C语言程序设计 第一章 数据类型, 运算符与表达式 第二章 顺序程序设计 第三章 选择结构程序设计 第四章 循环控制 第五章 数组.
习题课 编译原理与技术 计算机科学与技术学院 李诚.
本节内容 内存复制指令 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第九节 赋值运算符和赋值表达式.
<编程达人入门课程> 本节内容 计算机编程语言 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
编译原理及实现技术 计算机科学与技术学院 申春
C语言程序设计基础 刘新国.
<编程达人入门课程> 本节内容 学习路线 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第二章 Java基本语法 讲师:复凡.
第二节 C语言的特点.
本节内容 通用寄存器 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
滤波减速器的体积优化 仵凡 Advanced Design Group.
编译原理 第一章 引 论 南京大学计算机科学与技术系 戴新宇.
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
编译原理 编译原理.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
基本知识 数据类型、变量、常量、运算符.
手机淘宝“变形”产品—微淘 操作流程指南 (内测版).
嵌入式Linux编程环境.
第5章 程序设计知识 5.1 程序设计语言 5.2 C语言程序设计 5.3 数据结构 5.4 编译原理.
编译原理实践 6.程序设计语言PL/0.
本节内容 this指针 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
Introduction to the C Programming Language
Presentation transcript:

编译原理与技术 2018/11/30 《编译原理与技术》讲义

第一章 引论 什么是编译程序? 翻译程序、解释程序和汇编程序 编译程序的组成结构 编译程序的生成 相关话题 2018/11/30 《编译原理与技术》讲义

语言翻译过程 算法描述,求某整数n的阶乘fact(n), n≥0 1 // n == 0 fact(n) = n * fact( n-1 ) // n! == n * (n-1)! 伪语言描述 fact(n) = if n ≤ 0 then 1 else n*fact(n-1) 2018/11/30 《编译原理与技术》讲义

语言翻译过程 高级程序设计语言描述,(如C语言) int fact( int n ) { if (n<= 0) return 1; else return ( n*fact(n-1)); } 2018/11/30 《编译原理与技术》讲义

语言翻译过程 输入命令 cc foo.c c 程序 foo.c 库函数或其它object文件 Ansi C compiler cc Object file Linker/连接程序 a.out/可执行程序 2018/11/30 《编译原理与技术》讲义

语言翻译过程 a.out/可执行程序 loader/装入程序 输入数据 计算机 计算结果 2018/11/30 《编译原理与技术》讲义

语言翻译过程 为何不设计直接运行高级语言的机器? 机器本身的指令系统(二进制) 语言本身扩展 2018/11/30 《编译原理与技术》讲义

什么是编译程序? 源程序 S (高级语言) 编译程序 C 目标程序 T (机器语言) 目标程序 T 运行系统 计算机 初始数据 计算结果 2018/11/30 《编译原理与技术》讲义

什么是编译程序? 源语言(程序)到目标语言(程序)的映射转换或者翻译过程 系列转换(翻译)过程 源语言S T1 … Tn 目标语言T 中间语言 2018/11/30 《编译原理与技术》讲义

解释程序与汇编程序 均属于翻译程序 源程序 S 初始数据 Interpreter/解释程序 计算结果 汇编程序 S’ 汇编语言 assembler/汇编程序 目标程序 T 2018/11/30 《编译原理与技术》讲义

C函数fact的汇编语言形式 .file "foo.c" .text pushl %eax .globl fact call fact .type fact,@function fact: pushl %ebp movl %esp, %ebp subl $4, %esp cmpl $0, 8(%ebp) jg .L2 movl $1, -4(%ebp) jmp .L1 .L2: subl $12, %esp movl 8(%ebp), %eax decl %eax pushl %eax call fact addl $16, %esp imull 8(%ebp), %eax movl %eax, -4(%ebp) .L1: movl -4(%ebp), %eax leave ret .Lfe1: .size fact,.Lfe1-fact .ident "GCC: (GNU) 3.2.2 20030222 (Red Hat Linux 3.2.2-5)" 2018/11/30 《编译原理与技术》讲义

编译程序的组成结构 词法分析阶段 语法分析阶段 语义分析、中间代码生成 优化阶段 目标代码生成 2018/11/30 《编译原理与技术》讲义

编译程序的组成结构 program 前端 front end 与源语言有关 scanner parser semantics 后端 back end 与目标机相关 middle end optimizer code generator 2018/11/30 《编译原理与技术》讲义

编译程序的组成结构 例子,hoo.c: main() { float position, initial, rate; } 2018/11/30 《编译原理与技术》讲义

编译程序的组成结构 词法分析阶段-scanner 字符流 -> 记号流 position = initial + rate * 60 字符流 scanner id1 = id2 + id3 * 60 记号流 标识符 赋值运算符 标识符 加运算符 标识符 乘运算符 整型常量 2018/11/30 《编译原理与技术》讲义

编译程序的组成结构 语法分析阶段-parser 记号流 -> 分析树(语法树) id1 = id2 + id3 * 60 记号流 2018/11/30 《编译原理与技术》讲义

编译程序的组成结构 语义分析 语义树-带有语义信息的分析树(语法树) = id1 + id2 * id3 60 进行类型转换 int  float 60 2018/11/30 《编译原理与技术》讲义

编译程序的组成结构 中间代码生成 形式多样 - 三地址码,p-code等 t1 := int_to_float( 60 ) t2 := id3 * t1 t3 := id2 + t2 id1 := t3 2018/11/30 《编译原理与技术》讲义

编译程序的组成结构 代码优化 得到“优化”后的中间代码;也可以在最后的代码生成阶段实施“优化” t1 := rate * 60.0 // 直接用浮点数60.0 position := initial + t1 // 去除多余的 // 临时变量 较优化前,减少2条中间代码 2018/11/30 《编译原理与技术》讲义

编译程序的组成结构 代码生成 与目标机器有密切联系,如指令选择,寄存器的使用等。 movf rate, R1 mulf #60.0, R1 movf initial, R2 addf R2, R1 movf R1, position 2018/11/30 《编译原理与技术》讲义

编译程序的组成结构 符号表管理 名称 类型 … position float initial rate 编译程序中使用的符号表 2018/11/30 《编译原理与技术》讲义

编译程序的组成结构 出错处理 程序错误分类 出错处理的目标与方法 1) if ( n <= 0 return 1; // missing “)” 2) if ( n <= 0 ) return 1 // missing “;” else return ( n * fact(n-1) ); 2018/11/30 《编译原理与技术》讲义

编译程序的组成结构 scanner parser 符号表管理 出错处理 semantics optimizer code generator 2018/11/30 《编译原理与技术》讲义

编译程序生成 手工编写 耗时,“效率”问题。 自动生成 各个阶段基本上有相应的自动生成工具,如 lex、yacc。 自展(bootstrapping) 2018/11/30 《编译原理与技术》讲义

编译程序生成 编译程序的自展/自编译 T型图 目标语言T S T 源语言S I 编译程序的实现语言I 2018/11/30 《编译原理与技术》讲义

编译程序生成 编译程序的自展/自编译 我们的目标是在机器A(目标语言)上,用语言A(实现语言)构造高级语言L(源语言)的编译程序。 L A 2018/11/30 《编译原理与技术》讲义

编译程序生成 编译程序的自展/自编译 Step1: 我们可以考虑源语言L的子集语言S, S L。在机器A(目标语言)上,用语言A(实现语言)构造语言S的编译程序。 S A A 2018/11/30 《编译原理与技术》讲义

编译程序生成 编译程序的自展/自编译 Step2: 在机器A(目标语言)上,用语言S(实现语言)构造语言L的编译程序。 L A S 2018/11/30 《编译原理与技术》讲义

编译程序生成 编译程序的自展/自编译 Step3: L A S L A A S A A 2018/11/30 《编译原理与技术》讲义

编译程序生成 编译程序的移植/交叉编译 考虑将A机器上语言L的编译实现移植到机器B上,即我们的目标是: L B B 2018/11/30 《编译原理与技术》讲义

编译程序生成 编译程序的移植/交叉编译 我们已有的编译程序是: L A A 2018/11/30 《编译原理与技术》讲义

得到机器A上(实现语言)语言L到语言B的编译程序 编译程序生成 编译程序的移植/交叉编译 Step1: L B L L B A L A A 得到机器A上(实现语言)语言L到语言B的编译程序 用语言L编写的语言L到语言B的编译程序 借助已有的A机器上语言L的编译程序 2018/11/30 《编译原理与技术》讲义

得到机器B上(实现语言)语言L到语言B的编译程序 编译程序生成 编译程序的移植/交叉编译 Step2: L B L L B B L B A 用语言L编写的语言L到语言B的编译程序 得到机器B上(实现语言)语言L到语言B的编译程序 新的A机器上语言L到语言B的编译程序 2018/11/30 《编译原理与技术》讲义

编译程序相关的软件 预处理程序-preprocessor 汇编程序-assembler 解释程序-interpreter 宏替换-macro 包含文件展开-include files 汇编程序-assembler 两趟扫描 解释程序-interpreter 连接程序-linker 装入程序-loader 重定位 2018/11/30 《编译原理与技术》讲义

编译程序相关的软件 调试程序-debugger 描述程序-profiler cc 编译器中 –g 选项;与-O的关系 性能分析 2018/11/30 《编译原理与技术》讲义