第1讲编译原理

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程简介
编译技术研究对象:编译器的构造与分析
C, C++, Pascal, Delphi, VC, BC
集成开发环境
编 编 源程序 辑 译 器 器
可执行程序 .exe
操 作 系 统
Edit, Word, Notepad, Vi
解 释 器
gcc, vc, bc31 虚拟机
BASIC年代的解释器
功能:它将高级语言的源程序翻译成一种中 间语言程序,然后对中间语言程序进行解释 执行 在那个年代,编译和解释两个功能是合在一 个程序中,该程序被称为解释器
大多数程序员同时是语言的设计者,虽然是一些简单
的语言(如输入输出),本课程的学习有助于提高对 这些语言的设计水平。
课程简介
学习的意义
可以肯定地说,你们中的95%以上的人在一 辈子的生涯中都没有机会去实现一个真正的 复杂语言的编译器。但是每一个人都绝对遇 到需要使用编译技术的项目。
以下就是一些小的“编译器”.
第一章


类比:刷墙艺术中的“遍”的概念
任务:在一面墙上布置网线,并粉刷水泥, 然后贴上瓷砖
网线 水泥

瓷砖
第一章
方法一:
第一遍:布上全部网线


类比:刷墙艺术中的“遍”的概念
课程特点
强调形式化描述技术 强调对编译原理和技术的宏观理解,不把注 意力分散到枝节算法,不偏向于某种源语言 或目标机器
课程简介
学习的意义
它是计算机专业的核心课程。对编程语言的 设计和实现有深刻的理解,有利于学习编程 语言,知其然知其所以然。
if (c == 5) then … if (5 == c) then …
Java年代的解释器
解释器的上述两个功能分在两个程序中 前一个叫做编译器,它把源程序翻译成一种 叫做字节码的中间语言程序 后一个叫做解释器,它对字节码程序进行解 释执行
编译器和解释器的区别
三种奶牛三种嗜好
编译器和解释器的区别
改进后的方案
编译器和解释器的区别
牧草 = 我们的各种编程语言,C/C++/C#, Java, Pascal, PHP, Perl, Java Script等 切割机 = 各种编译器 奶牛 = 各种CPU,比如x86,ARM, MIPS等 奶牛会有吃不同形状牧草的嗜好,这个奇 怪的比喻是为了表示不同的CPU接受的不 同的机器语言。
第一章


分析和综合: 把编译过程分成分析和综合两步 分析:分析源程序以计算其特性所涉及到的 操作(词法分析、语法分析、语义分析) 综合:生成目标代码时所涉及到的操作(中 间代码生成、代码优化、代码生成) 辅助:符号表管理、出错处理 8项功能对应8个模块。
第一章
前端 后端

源程序

前端:依赖于源语 言,独立于目标机 器。
成绩评定
学期总评 = 考试成绩占70%,作业占15%, 上机实验15%
课程简介
课程要求
目标:师生共同努力,帮助大家学有所得 讲课进度较快,平时不复习并加深理解,后 面将听不懂 作业较多,要求独立完成 上机实验,不要轻视 阅读PL/0编译器,会有很大收获
课程简介
课程内容
介绍编译器构造的一般原理和基本实现方法 介绍的理论知识:形式语言和自动机理论、 语法制导的定义和属性文法、类型论等
第一章
任何一个 标识 符都是表达 式; 任何一个数都是表达式; 如果e1和e2都是表达式,那 么 e1 + e2 e1 * e2 (e1)
表达式


语法分析:词法记号(token)流-〉语法短语 任何名词都可以作宾语; 如果e1和e2都是宾语,那么 e1 和e2 e1 与e2
也都可以作宾语 如果e1是定语, e2是宾语, 那么e1 e2也可以作宾语。
目 标 机 器 n
目 标 机 器 1
目 标 机 器 2
目 标 机 器 3
目 标 机 器 n
第一章
源程序
词法分析器 语法分析器 语义分析器 符号表管理 器 出错管理器 中间代码生 成器 代码优化器 代码生成器 目标程序



编译的几个阶段常用一遍 (pass)扫描实现,一 遍扫描包括读一个输入文 件和写一个输出文件。
宾语
也都是表达式
定语
表达式
宾语
名词 (大工学子)
+
表达式
表达式 表达式 形容词 (优秀的)
标识符 (initial)
*
标识符 (rate) 数
(60)
第一章
id, 1 = id, 2 + id, 3 60


词典 你们 ... 1 2 大工学子 . . . ... 3
You are excellent DLUTers
第一章
temp1 := id3 * 60.0 id1 := id2 + temp1


You are excellent DLUTers
代码生成器
日语文本生成
MOVF id3, R2 MULF #60.0, R2 MOVF id2, R1 ADDF R2, R1 MOVF R1, id1
编译原理和技术
大连理工大学软件学院
贾棋 jiaqi7166@gmail.com 87571603
编译原理课程在计算机科学技术中的地位:
程序设计语 言
离散数学 数据结构
编译原理 系统软件 操作系统
信息系统
电子商务
应用软件
软件工程
课程简介
编译理论与方法
计算机科学与技术中理论和实践相结合的最好 典范 ACM 图灵奖,授予在计算机技术领域作出突出 贡献的科学家
语法分析:词法记号(token)流-〉语法短语
名词1 动词 形容词 名词2
语法分析器
语法分析
:=
id1 id2
符号表 1 position . . . 2 initial . . . ... 3 rate
语句
+ * id3 60
名词 (你们) 动词 (是) 定语 形容词 (优秀的) 主语 谓语 宾语 宾语
if (c = 5) then…
编译器不报错, 但实际上错了
if (5 = c) then…
编译器报错
课程简介
学习的意义
从软件工程看,编译器是一个很好的实例(基本设 计、模块划分等), 所介绍的概念和技术能应用到 一般的软件设计之中。编译器也许是大家在本科阶 段分析最透彻的实例了。从本课程的学习也能了解 到软件工程中的一些技术(如基于事件驱动的编 程)。本课程所介绍的概念和技术能应用到一般的 软件设计之中。
编译器和解释器的区别
编译器和解释器的区别
编译器与解释器的区别
编译器是把源程序的每一条语句都编译成 机器语言,并保存成二进制文件,这样运行时 计算机可以直接以机器语言来运行此程序, 速度很快; 而解释器则是只在执行程序时,才一条一条 的解释成机器语言给计算机来执行,所以运 行速度是不如编译后的程序运行的快的.
第一章
position = initial + rate 60


你们是优秀的大工学子。
词法分析:源程序 -〉词法记号(token)流
词法分析
词法分析器 名词1 动词 形容词 名词2
id, 1 = id, 2 + id, 3 60
符号表 1 position . . . 2 initial . . . ... 3 rate 词典 你们 ... 1 2 大工学子 . . . ... 3
第一章


翻译器:把一种语言变换到另外一种语 言的软件。这两种语言分别称为源语言 和目标语言。 编译器:一种翻译器,它的目标语言比 源语言低级。
第一章
源程序


翻译家
编译器从逻辑上可以分成若 干阶段,每个阶段把源程序 从一种表示变换成另一种表 示
汉语文本
编译器
词法分析器
词法分析
语法分析器
语法分析
君たちは大連理工大学の 優秀な学生なんです。
第一章

源程序

后三个阶 段对源程 序进行综 合
出错管理器
词法分析器
语法分析器
语义分析器
符号表管理器
中间代码生成器
代码优化器
代码生成器 目标程序
第一章

源程序

词法分析器
语法分析器
语义分析器
符号表管理器
中间代码生成器
出错管理器
代码优化器
代码生成器 目标程序
名词 (大工学子)
第一章


语义分析:检查程序的语义正确性,如类型检查等
:= id1 id2 id3 语义分析器 := id1 + + * 60 你们是一个优秀的大工学子。
你们是优秀的大工学子
id2 id3
* inttoreal
60
第一章

源程序

前三个阶段 完成对源程 序的分析
词法分析器
语法分析器
You are good DLUTers.
第一章
temp1 := inttoreal(60) temp2 := id3 * temp1 temp3 := id2 + temp2 id1 := temp3


You are good DLUTers.
代码优化器
英语文本改进
temp1 := id3 * 60.0 id1 := id2 + temp1
Leabharlann Baidu
语义分析器 符号表 管理器 中间代码 生成器 出错管理器 词典
语义分析 出错纪录 英语文本生成
代码优化器
英语文本改进
代码生成器
日语文本生成
目标程序
日语文本
第一章


FORTRAN (FORmula TRANslation)
第一个实用的高级语言 擅长于数学函数运算 常用于科学计算中
第一个编译器
历史上第一个实用的编译器(John Backus):
语义分析器
符号表管理器
中间代码生成器
出错管理器
代码优化器
代码生成器 目标程序
第一章
:= id1 id2 id3 + * inttoreal 60 中间代码生成器

主语 名词 (你们)
语句 谓语

宾语 定语 形容词 (优秀的) 宾语
动词 (是)
名词 (大工学子)
英语文本生成
temp1 := inttoreal(60) temp2 := id3 * temp1 temp3 := id2 + temp2 id1 := temp3
课程简介
学习的意义
普通计算器 可编程计算器
课程简介
学习的意义
自动聊天机器人
课程简介
学习的意义
各种数据库查询语言及专家系统
select 课程 from table 课程表 where 任课老师=贾棋
课程简介
学习的意义
在计算机专业考研或者各大公司招聘时,必 考内容。
在x86/Linux工作站上,以下两个结构的size分别是20和16, 为什么不一样? typedef struct _a{ typedef struct _b{ char c1; char c1; long i; char c2; char c2; long i; double f; double f; }a; }b;
词法分析器
语法分析器
语义分析器
符号表管理器
中间代码生成器
出错管理器
代码优化器
代码生成器 目标程序
后端:依赖于 目标机器,独 立于源语言。
第一章


前端和后端: 把编译过程分成前端和后端两部分 前端:只依赖于源程序,独立于目标机器 (生成中间代码) 后端:依赖于目标机器,与源程序无关,只与中间 语言有关(从中间代码生成目标代码) 好处:提高开发编译器的效率
程序设计语言、编译理论与方法约占1/3
课程简介
教材和参考书
陈意云、张昱,编译原理,高等教育出版社, 2008年第二版 Alfred V.Aho, Ravi Sethi, Jeffrey D.Ullman, . 《编译原理 技术与工具(英文版)》 人民邮 电出版社. 中文版:机械工业出版社
课程简介
vc结果vs Linux下gcc的结果
vc6中的编译选项有 /Zp[1|2|4|8|16] ,/Zp1表示 以1字节边界对齐,相应的,/Zpn表示以n字节边 界对齐。n字节边界对齐的意思是说,一个成员 的地址必须安排在成员的尺寸的整数倍地址上或 者是n的整数倍地址上,取它们中的最小值。 要使用这个选项,可以在vc6中打开工程属性页, c/c++页,选择Code Generation分类,在Struct member alignment可以选择。
Fortran compiler for the IBM 704/709/7090/7094
John Backus,引入了编译器的“阶段”或 称为“遍”的概念,是编译设计的模块化的开 始
编译器从逻辑上可以分成若干阶段 每个阶段把源程序从一种表示变换成另一 种表示 本章通过描述编译器的各个阶段来介绍编 译这个课题
取一个编译器的前端,重写它的后端以产生同一源语言在 另一机器上的编译器 不同的前端使用同一个后端,从而得到一个机器上的几个 编译器(采用同一中间语言)
第一章
不区分前端和后端的编译器


源程序
编译器前端 编译器后端
区分前端和后端的编译器
源程序
编译器
目 标 机 器 1
目 标 机 器 2
目 标 机 器 3
相关文档
最新文档