编译原理ppt
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
源程序
词法分析程序
单词符号
表
语法分析程序
出
格
语法单位
错
管
语义分析程序与中间代码生成程序 处
中间代码
理
代码优化程序
理
中间代码
目标代码生成程序 目标代码
1.2 编译过程和编译程序的结构
1、词法分析(lexical analysis or scanning)
--The stream of characters making up a source program is read from left to right and grouped into tokens,which are sequences of characters that have a collective meaning.
电子工业出版社
刘铭 徐兰芳 骆婷 编著
编译原理
主讲:郭京蕾 E_mail:jingleiguo@
一、教学目的
▪ 讲述编译系统的结构、工作流程及编译程序各组成部分 的设计原理和实现技术
▪ 通过学习课程,既掌握编译理论和方法方面的基本知识, 也应具有设计、分析和维护编译程序等方面的初步能力
▪ 学习应该以思考为主
▪ 思考由问题和答案组成。提问使人进步。提问和答案一样 重要
▪ 基础知识是研究的工具 ▪ 敢于犯错误 ▪ 注重实验环节,多做程序
▪ 源程序是源泉 ▪ 把每个阶段放到整个编译程序背景中学习 ▪ 认真做程序
▪ 独立、认真完成作业
六、考核评分标准 平时作业 10% 上机实验 20% 实验报告 10% 闭卷考试 60%
的非实质性字符 删除注释 进行词法检查,报告所发现的错误
1.2 编译过程和编译程序的结构
例:源程序 PROGRAM Source; {this little source program is used to illustrate compiling procedure} var sum, first, count: real ; BEGIN
8、错误处理 进行各种错误的检查、报告、纠正以及相应
的续编译处理。
对中间代码进行优化处理:对代码进行等价变换 以求提高执行效率——提高运行效率和节省存储空 间
编译程序所产生的目标代码的质量高低,主要取 决于这一阶段代码优化功能的强弱
1.2 编译过程和编译程序的结构
6、目标代码生成 功能:把中间代码变换成机器上的绝对指令代码
或可重定位的指令代码或汇编指令代码 要求:所生成的目标代码尽可能短
功能:分析由语法分析器给出的语法单位的语义
获取标识符的属性:类型、作用域等 语义检查:运算的合法性、取值范围等 子程序的静态绑定:代码的相对地址 变量的静态绑定:数据的相对地址
1.2 编译过程和编译程序的结构
3、语义分析
例: int arr [2],abc; abc = arr * 10;
参考书
1、吕映芝,张素琴,蒋维杜编. 编译原理. 清华大学出版社
2. 蒋立源等. 编译原理. 西北工业大学出版社
3. 陈火旺, 刘春林等. 程序设计语言编译原理.国防工业 出版社
4.ALFRED V. AHO, RAVISETHI, JEFFREY D. ULLMAN, Compilers Principles, Techniques and Tools ADDISSON-WESLEY
ST I
1.1 什么是编译程序(COMPILER)
三、编译系统
按编译方式在计算机上执行高级语言编写的程序需
经过两个阶段:
编译系
1、编译阶段
统
2、运行阶段
操作系统
裸机
编译程序与运行系统合称为编译系统
需预处理的源程序
预处理程序
源程序
编译程序
可重定位目标文件库
目标汇编程序
汇编程序
可重定位机器代码 装配连接编辑
例: Program p(); Var rate:real; procedure initial;
… position := initial + /* error */ /* error */
rate * 60 /* warning */;
1.2 编译过程和编译程序的结构
4、中间代码生成(intermediate code generation)
高级语言、汇编语言被计算机所“理解”的途径:
翻译方式 解释方式
1.1 什么是编译程序(COMPILER)
二、编译程序 翻译程序:在计算机中放置一个能由计算机直接执 行的翻译程序。它以某一程序设计语言(源语言) 所编写的程序(源程序)作为翻译或加工的对象。 当计算机执行翻译程序时就将它翻译为与之等价的 另一语言(目标语言)的程序(目标程序)。
▪ 能完成一个相当规模的系统的设计
▪ 编译原理是计算机专业最为恰当、有效的载体之一。
编译原理是一门综合应用的课程。编译程序的设计与构造过程中 需要用到许多前导课程的知识,比如离散数学中的语言与自动机的 知识,数据结构中各种结构的知识,高级程序设计语言的结构与功 能的知识,汇编语言的知识,计算机组成的知识等。因此编译原理 课程是提高学生综合能力的一门关键课程,学好这门课程将使学生 获得相当程度的成就感。使学生能切实感受到用户可以指挥计算机 去完成相当复杂的问题。
有的编译程序将源程序变成一种内部表示形式,这种内部 表示形式叫做中间语言或中间代码
中间代码是一种结构简单、含义明确的记号系统
设计原则:(1)容易生成 (2)易翻译成目标代码
许多编译程序采用了一种“四元式”中间代码
1.2 编译过程和编译程序的结构
5、代码优化(Intermediate code optimization) The optimizer accepts input in the
This is where the intermediate representation of the source program is created.We want this representation to be easy to generate,and easy to translate into the target program .The representation can have a variety of forms,but a common one is called three-address code or 4tuple code.
高级语言处理过程
绝对机器码
术语
编译程序(compiler)
编译程序的源语言(源程序) (source language)(source program)
编译程序的目标语言(目标程序) (object or target language)(object or target program)
编译程序的实现语言(implementation language)
编译程序:如果一个翻译程序的源语言是某种高级 语言,其目标语言是相应于某一计算机的汇编语言 或机器语言,这种翻译程序称为编译程序
1.1 什么是编译程序(COMPILER)
高级语言 书写的程序
编译程序
低级语言程序
术语
编译程序的源语言 (源程序)
编译程序的目标语 言(目标程序)
编译程序的实现语 言
SO I
本章重点介绍编译程序的基本概念。
8
第一章 编译概述
1.1 什么是编译程序 1.2 编译过程概述 1.3 编译程序的结构 1.4 编译阶段的组合
1.1 什么是编译程序(COMPILER)
一、程序设计语言 程序设计语言是用来编写程序的工具 程序设计语言的分类: 低级语言:机器语言、汇编语言等
高级语言:如:C、PASCAL、DELPHI、VC等
1.2 编译过程和编译程序的结构
3、语义分析 (semantic analysis)
The parsed program is further analyzed to determine whether it conforms to the source language’s contextual constraints : scope rules, type rules
充分发挥计算机可用资源
1.2 编译过程和编译程序的结构
7、表格管理 记录源程序中使用的名字 收集每个名字的各种属性信息
类型、作用域、分配存储信息
符号表(SYMBOL TABLE)
Symbol table is a data structure which is employed to associate identifiers with their attributes .
An identifier’s attribute consists of information relevant to contextual analysis ,and is obtained from the identifier’s declaration.
1.2 编译过程和编译程序的结构
二、学习成果
理解和掌握编译过程各个阶段的工作原理 理解标准编译器各个组成部分的任务 熟悉编译过程各阶段所要解决的问题及其采用的方法和技术 应用一些标准的技术解决编译器构造过程中所产生的相关问
题
三、学时分配 授课学时36学时,实验12学时 实验一:词法分析器 实验二:语法分析器
五、学习方法
语言处理程序(language processor)
语言转(变)换(language transformation)
1.2 编译过程和编译程序的结构
例:外文翻译和编译工作的比较
分析 综合
翻译外文 阅读原文 识别单词 分析句子 修辞加工 写出译文
编译源程序 输入并扫描源程序
词法分析 语法分析 代码优化 目标代码生成
intermediate representation and output a version still in the intermediate representation . In this phase,the compiler attempts to produce the smallest,fastest and most efficient running result by applying various techniques.
单词---token 保留字---reserved word 标识符 ---identifier(user-defined
1、词法分析
词法分析器的工作任务:
识别出源程序中的各种语法单位(单词或语法符号) 删除无用的空白字符、回车字符及其它与输入介质相关
这是最经典的一本编译参考书
5.Keneth C.Louden Compiler Construction Principles and Practice
2020/3/2 编译原理
第一章 编译概述
编译程序是计算机系统中重要的 系统软件,是高级语言的支撑基础。编 译原理这门课程主要介绍设计和构造 编译程序的基本原理和常用的技术和 方法。
语法树(推导树):parse tree (derivation tree)
1.2 编译过程和编译程序的结构
赋值语句语法规则
<赋值语句>::=<标识符>“:=”<表达式> <表达式>::=<表达式>“+”<表达式> <表达式>::=<表达式>“*”<表达式> <表达式>::=“(”<表达式>“)” <表达式>::=<标识符> <表达式>::=<整数> <表达式>::=<实数>
sum:=first+count*10; END.
1.2 编译过程和编译程序的结构
2、语法分析(syntax analysis or parsing)
The purpose of syntax analysis is to determine the source program’s phrase structure. This process is also called parsing.The source program is parsed to check whether it conforms to the source language’s syntax ,and to construct a suitable representation of its phrase structure.