SlideShare a Scribd company logo
1 of 43
编译原理


       1
教材

《编译原理》
    张晶、陈香凝、董德义、李鑫、赵
曦 编
    哈尔滨工程大学出版社
 2011 年第一版


                      2
学科地位
  编译原理是计算机专业的一门重
要专业课,旨在介绍编译程序构造
的一般原理和基本方法。
  虽然只有少数人从事编译方面的
工作,但是这门课在理论、技术、
方法上都对学生提供了系统而有效
的训练,有利于提高软件人员的素
质和能力。 
                   3
学习《编译原理》的重要性

通过学习编译程序的构造原理和实现技术

   可以了解编译程序本身的设计和实现技术;
   有助于提高对程序设计语言的理解及设计能力
    ;
   提高元级程序的设计能力;
   提高大型软件的开发能力。

                       4
主要内容
第 1 章 引论      第 6 章 LR 分析法
第 2 章 文法和语言   第 7 章 语法制导翻译

第 3 章 词法分析    和
第 4 章 自顶向下的         中间代码生成
语法             第 8 章 运行时的存储

     分析        组织
第 5 章 自底向上的   第 9 章 符号表

语法             第 10 章 代码优化

     分析        第 11 章 目标代码生   5

               成
第 1章
 引论


       6
§1.1 什么是编译程序
§1.2 编译程序的基本结构
§1.3 编译程序的组织




                 7
§1.1
 什么是
编译程序

        8
   世界上存在着多种语言,人们为了交
    流,就需要建立各种语言之间的翻译
    。

   人与计算机之间的信息交流,同样存
    在一个翻译问题。

   计算机语言 — — 机器语言
     人类语言 — — 高级程序设计语言   9
过程式语言 Fortran,Pascal,C
         函数式语言 Lisp
    高级语言 逻辑式语言 Prolog
程序设
         对象式语言 C++
计语言
                 汇编语言
    低级语言:面向机器的语
                 机器语言
     言
                            10
机器语言
   直接用计算机能够识别的二进制代码指令
    来编写程序的语言。由二进制的指令代码
    组成。
   1 + 3 表示为 10000001 00000001 00000011
   最底层的计算机语言,不需要翻译就可以
    直接被计算机硬件识别。对应不同的计算
    机硬件有不同的机器语言。
   特点:执行速度快,但编写程序的难度大
    ,修改、调试不方便,直观性差,不易移
    植。                                     11
汇编语言
   又称为符号语言。与机器语言一一对应,采
    用能帮助记忆的英文缩写符号(指令助记符
    )来代替机器语言指令中的操作码,用地址
    符号来代替地址码。用指令助记符及地址符
    号书写的指令称为汇编指令,用汇编指令编
    写的程序称为汇编语言源程序。
   将 X 、 Y 中的内容相加 表示为 ADD X Y
   机器不能直接识别汇编语言程序,必须把它
    翻译 为机器语言程序才能执行。
   特点:比机器语言直观,容易理解记忆,比
    高级语言的执行效率高,通用性和移植性较 12
    差。
高级语言
   与具体的计算机硬件无关,是面向问题的程
    序设计语言,其表达方式接近于自然语言和
    数学语言,易于人们接受和掌握。
   采用类似于数学公式的书写方式: x = 1 + 3
   特点:独立于具体的计算机硬件,程序的编
    制和调试方便,通用性和可移植性好。在计
    算机执行之前,需要通过编译程序翻译成目
    标语言程序,或需要通过解释程序边解释,
    边执行。时间与空间效率比较低。

                                13
比较    机器语言   汇编语言     高级语言
硬件识   是唯一可以   不可识别      不可识别
 别    识别的语言
是否可           不可,需汇 不可,需编译 / 解
直接执   可直接执行    编、连接   释、连接
 行
              面向机器   面向问题
                         / 对象
      面向机器  占用内存少 占用内存大
      占用内存少 执行速度快 执行速度相对慢
 特点   执行速度快 较为直观  标准化程度高
      使用不方便 与机器语言 便于程序交换,
             一一对应   使用方便

 定位   低级语言,   低级语言,   高级语言,种类
       极少使用    很少使用     多,常用
                                 14
1. 翻译程序: 将一种语言编写的程序等价
 转换成另一种语言编写的程序,实现上述
 功能的程序称为翻译程序。

2. 编译程序: 把高级语言 ( 称作源语言 ) 书
写的程序翻译成低级语言 ( 称作目标语言 ) 的
等价的程序。

3. 两者关系: 编译程序是翻译程序的子
集。

                             15
编译程序的功能

编译器的输入对象             编译器的输出对象


  源程序      编译程序       目标程序
(高级语言程序    ( 编译器 )   (汇编程序)
   )

  面向人的                面向机器的

                              16
编译和解释程序:       初始数据


           编       目         计
  源
           译       标         算
  程
           程       程         结
  序
           序       序         果


               解             计
  源程序
               释             算
               程       边解释   结
 初始数据          序       边执行   果   17
                       源程序
解释程序和编译程序的区别
      功能     工作结果   实现技术上

编译   源程序的一   源程序的   把中间代码转
程序   个转换系统   目标代码   换成目标程序

解释   源程序的一   源程序的
                    执行中间代码
程序   个执行系统   执行结果

     解释程序和编译程序的根本区别:
         是否生成目标代码            18
§1.2
编译程序的
 基本结构



         19
编译过程概述
   编译程序完成从源程序到目标程序
的翻译工作,是一个复杂的整体的过程。
   从概念上讲,一个编译程序的整个
工作过程是划分成阶段进行的,每个阶段
将源程序的一种表示形式转换成另一种表
示形式。



                     20
编译阶段的经典划分方法是划分
成 6 个基本阶段。

 编译逻辑过程 : 词法分析
              语法分析
              语义分析
              中间代码生成
              代码优化
              目标代码生成

                       21
英译与编译的比较 ( 理解 5 个
     阶段 )
1. 识别出句子的一个个单   1. 词法分析
   词
                2. 语法分析
2. 分析句子的语法结构
                3. 语义分析中间代码生
3. 初步翻译句子的含义    成
4. 译文修饰         4. 代码优化
5. 写出最后译文       5. 目标代码生成


                               22
引例

   英语句子:
                             与此类似,
    I wish you success.   编译程序将首先根
                          据源语言的定义来
                          对源程序进行分析
   汉语句子:                 ,之后进行综合并
    我希望你成功。               得到与源程序等价
    (祝你成功。)               的目标程序。

                                     23
编译逻辑过程
         词法分
     析
         语法分析
         语义分析
         中间代码生
     成
         代码优化    24
1. 词法分析
          从左至右读字符流的源程序、识别出
 一个个单词(单词符号或符号)。
例 : position := initial + rate * 60;
            单词类型           单词值
           标识符 1( id 1)
           p o s itio n
           算符 ( 赋值 )        :=
           标识符 2( id 2)
           initia l
           算符 ( 加 )         +
           标识符 3( id 3)
                                       25
           ra te
           算符 ( 乘 )         *
int a;

a = a 单词类型
      + 2;       单词值
    保留字          int
   标识符 ( 变量名 )       a
   界符            ;
   标识符 ( 变量名 )       a
   算符 ( 赋值 )       =
   标识符 ( 变量名 )       a
   算符 ( 加 )              +
   整数             2
   界符             ;          26
2. 语法分析
 功能 : 在词法分析输出的单词流基础上,
依据源程序的语法规则分析该单词流是否
能正确地组成各类语法单位,并指出其中
的语法错误。
   语法分析程序与自然语言中句子的语
法分析类似。语法分析定义了程序的结构元
素及其关系。通常将语法分析的结果表示为
分析树或语法树。
     依据源程序的语法规则把源程序的
单词序列组成语法短语 ( 表示成语法
                        27
树 )。
position := initial + rate * 60 ;

  规则 < 赋值语句 >::=< 标识符 >“:=”< 表
  达式 >
    < 表达式 >::=< 表达式 >“+”< 表达式
  >
    < 表达式 >::=< 表达式 >“*”< 表达式
  >
    < 表达式 >::=“(”< 表达式 >“)”
    < 表达式 >::=< 标识符 >
    < 表达式 >::=< 整数 >
    < 表达式 >::=< 实数 >                28
赋值语句


标识符   :=   表达式



           表达式   +   表达式



           标识符   表达式   *   表达式



                 标识符        整数
                                 29
3. 语义分析
语义审查 ( 静态语义 )
 按照语法树的层次关系和先后次序,逐个
  语句地进行语义处理。
 主要任务: 进行类型审查,审查每个算
  符是否符合语言规范,不符合时应报告错
  误。
  类型匹配
  类型转换


                       30
4. 中间代码生成

源程序的内部 ( 中间 ) 表示
 三元式、四元式、波兰式、逆波兰式

 ( *              id3 t1   t2   )

 t2 = id3 * t1
 t2 := id3 * t1

                                    31
id1:= id2 + id3 * 60
(1)   (inttoreal, 60    -    t1    )
(2)   (*    ,     id3   t1   t2    )
(3)   (+    ,     id2   t2   t3    )
(4)   (:=   ,     t3    -    id1   )




                                       32
5. 代码优化
   对中间代码进行变换,使目标代码更
为高效。(节省时间和空间)
      id1:= id2 + id3 * 60
(1)   (inttoreal     60      -     t1    )
(2)   ( *            id3     t1    t2    )
(3)   ( +            id2     t2    t3    )
(4)   ( :=           t3      -     id1   )
               变换
               ( 1) (        *     id3   60.0   t1
      )
                                                     33
      ( 2 )(        +        id2   t1    id1    )
6. 目标代码生成
 (*    ,       id3   60.0 t1    )
 (+    ,       id2   t1   id1   )


      movf   id3,R2
      mulf   #60.0,R2
      movf   id2,R1
      addf   R2,R1
      movf   R1,id1                 34
符号表管理
   记录源程序中使用的名字;
   收集每个名字的各种属性信息:
     类型、作用域、分配存储信息


    Const1 常量   值: 35
    Var1 变量 类型:实   层次: 2


                           35
出错处理
   检查错误;
     词法分析程序发现某单词的拼写错误
     语法分析程序发现语法错误,如括号不配
      对
     语义分析程序发现语法错误,如某运算符
      与其运算对象的类型不相容
 报告出错信息;
 排错,恢复编译工作。
                           36
编译程序的结构
   词法分析程序
   语法分析程序
   语义分析程序
   中间代码生成程序
   代码优化程序
   目标代码生成程序
   符号表管理程序
   出错处理程序

                37
词法分析程序

     语法分析程序
表              出

格    语义分析程序    错

管   中间代码生成程序   处

理    代码优化程序    理

    目标代码生成程序
                   38
§1.3
编译程序的
  组织



         39
上一节给出了编译程序的各个组
成部分机器相互之间的逻辑关系,那么,
如何组织编译程序?

 编译程序是按 “ 遍 ” 工作的。




                      40
前端与后端

   编译的前端( fro nt e nd ): 此部分
    工作的特点是不依赖于具体机器。
   编译的后端( b a c k e nd ): 此部分
    对中间代码和目标机有较高的依赖性,而
    一般不依赖于源程序代码。




                                 41
遍

   遍(趟):从头到尾扫描源程序
    (各种形式)一遍 ( p a s s ) 。




                             42
小结

  本章没有难以理解的内容 , 重点对
编译程序的功能和结构做一综述 , 要说
难点的是 : 了解编译程序各个成分在编
译阶段的逻辑关系以及他们怎样作为
一个整体完成编译任务的。


                      43

More Related Content

Viewers also liked

美しいモバイルUXの理解と実践〜10の法則:試作・プロトタイピング編 先生:安藤 幸央
美しいモバイルUXの理解と実践〜10の法則:試作・プロトタイピング編 先生:安藤 幸央美しいモバイルUXの理解と実践〜10の法則:試作・プロトタイピング編 先生:安藤 幸央
美しいモバイルUXの理解と実践〜10の法則:試作・プロトタイピング編 先生:安藤 幸央schoowebcampus
 
Sxem 2.2 shablonlar
Sxem 2.2 shablonlarSxem 2.2 shablonlar
Sxem 2.2 shablonlarlachin1978
 
эта книга посвящается всем женщинам
эта книга посвящается всем женщинамэта книга посвящается всем женщинам
эта книга посвящается всем женщинамЕлена Семенец
 
The Paleo Diet
The Paleo Diet The Paleo Diet
The Paleo Diet Hopey78
 
Biofuels: A Guide for Coordinating a Fryer to Fuel Collection Program in Sant...
Biofuels: A Guide for Coordinating a Fryer to Fuel Collection Program in Sant...Biofuels: A Guide for Coordinating a Fryer to Fuel Collection Program in Sant...
Biofuels: A Guide for Coordinating a Fryer to Fuel Collection Program in Sant...ZX7
 
Photoshoot temporada 3
Photoshoot temporada 3Photoshoot temporada 3
Photoshoot temporada 3pll-latam
 
Web设计 5 “动感新势力”(css3 html5 以及 web_gl)
Web设计 5 “动感新势力”(css3 html5 以及 web_gl)Web设计 5 “动感新势力”(css3 html5 以及 web_gl)
Web设计 5 “动感新势力”(css3 html5 以及 web_gl)ziggear
 
Impact library adelaide q3 2012
Impact library adelaide q3 2012Impact library adelaide q3 2012
Impact library adelaide q3 2012Guy Turner
 
Implementation Of Integrated Project Management And Resource Management System
Implementation Of Integrated Project Management And Resource Management SystemImplementation Of Integrated Project Management And Resource Management System
Implementation Of Integrated Project Management And Resource Management Systemkdelcol
 
Clasificacion de flujos de fluidos power
Clasificacion de flujos de fluidos powerClasificacion de flujos de fluidos power
Clasificacion de flujos de fluidos powerpedro sanchez
 
E人e本产品简介
E人e本产品简介E人e本产品简介
E人e本产品简介power9000
 
ethical hacking tips
 ethical hacking tips ethical hacking tips
ethical hacking tipsmathewjose228
 
Gestor de proyecto educativo tic editable
Gestor de proyecto educativo tic editableGestor de proyecto educativo tic editable
Gestor de proyecto educativo tic editableErika Montes
 

Viewers also liked (20)

美しいモバイルUXの理解と実践〜10の法則:試作・プロトタイピング編 先生:安藤 幸央
美しいモバイルUXの理解と実践〜10の法則:試作・プロトタイピング編 先生:安藤 幸央美しいモバイルUXの理解と実践〜10の法則:試作・プロトタイピング編 先生:安藤 幸央
美しいモバイルUXの理解と実践〜10の法則:試作・プロトタイピング編 先生:安藤 幸央
 
Sxem 2.2 shablonlar
Sxem 2.2 shablonlarSxem 2.2 shablonlar
Sxem 2.2 shablonlar
 
эта книга посвящается всем женщинам
эта книга посвящается всем женщинамэта книга посвящается всем женщинам
эта книга посвящается всем женщинам
 
Lisa's routine
Lisa's routineLisa's routine
Lisa's routine
 
The Paleo Diet
The Paleo Diet The Paleo Diet
The Paleo Diet
 
Biofuels: A Guide for Coordinating a Fryer to Fuel Collection Program in Sant...
Biofuels: A Guide for Coordinating a Fryer to Fuel Collection Program in Sant...Biofuels: A Guide for Coordinating a Fryer to Fuel Collection Program in Sant...
Biofuels: A Guide for Coordinating a Fryer to Fuel Collection Program in Sant...
 
SMBtweet
SMBtweetSMBtweet
SMBtweet
 
модель
модельмодель
модель
 
Jof V 2016
Jof V 2016Jof V 2016
Jof V 2016
 
Pragmatics
PragmaticsPragmatics
Pragmatics
 
Photoshoot temporada 3
Photoshoot temporada 3Photoshoot temporada 3
Photoshoot temporada 3
 
Web设计 5 “动感新势力”(css3 html5 以及 web_gl)
Web设计 5 “动感新势力”(css3 html5 以及 web_gl)Web设计 5 “动感新势力”(css3 html5 以及 web_gl)
Web设计 5 “动感新势力”(css3 html5 以及 web_gl)
 
Impact library adelaide q3 2012
Impact library adelaide q3 2012Impact library adelaide q3 2012
Impact library adelaide q3 2012
 
Sky Sox Deliverable
Sky Sox DeliverableSky Sox Deliverable
Sky Sox Deliverable
 
Implementation Of Integrated Project Management And Resource Management System
Implementation Of Integrated Project Management And Resource Management SystemImplementation Of Integrated Project Management And Resource Management System
Implementation Of Integrated Project Management And Resource Management System
 
Clasificacion de flujos de fluidos power
Clasificacion de flujos de fluidos powerClasificacion de flujos de fluidos power
Clasificacion de flujos de fluidos power
 
E人e本产品简介
E人e本产品简介E人e本产品简介
E人e本产品简介
 
Foss11 lugb
Foss11  lugbFoss11  lugb
Foss11 lugb
 
ethical hacking tips
 ethical hacking tips ethical hacking tips
ethical hacking tips
 
Gestor de proyecto educativo tic editable
Gestor de proyecto educativo tic editableGestor de proyecto educativo tic editable
Gestor de proyecto educativo tic editable
 

Similar to 第1章 概论

软件工程 第七章
软件工程 第七章软件工程 第七章
软件工程 第七章浒 刘
 
软件工程
软件工程软件工程
软件工程bill0077
 
Chapter 2 程式設計基本流程
Chapter 2 程式設計基本流程Chapter 2 程式設計基本流程
Chapter 2 程式設計基本流程hhliu
 
函数调用关系工具-2011-孙光福
函数调用关系工具-2011-孙光福函数调用关系工具-2011-孙光福
函数调用关系工具-2011-孙光福Wu Liang
 
Recycle Open Source Projects
Recycle Open Source ProjectsRecycle Open Source Projects
Recycle Open Source ProjectsGeorge Ang
 
2006 recycle opensourceprojects
2006 recycle opensourceprojects2006 recycle opensourceprojects
2006 recycle opensourceprojectsGeorge Ang
 
函数调用关系工具-Lite
函数调用关系工具-Lite函数调用关系工具-Lite
函数调用关系工具-LiteWu Liang
 
Hcsm lect-20120913
Hcsm lect-20120913Hcsm lect-20120913
Hcsm lect-20120913lusecheng
 
Java DSL与动态代码生成技术的应用 (上集:DSL部分)
Java DSL与动态代码生成技术的应用 (上集:DSL部分)Java DSL与动态代码生成技术的应用 (上集:DSL部分)
Java DSL与动态代码生成技术的应用 (上集:DSL部分)悦 温
 
常用JAVA代码质量静态检查工具
常用JAVA代码质量静态检查工具常用JAVA代码质量静态检查工具
常用JAVA代码质量静态检查工具dearhwj
 
Baidu LSP and DISQL for Log Analysis
Baidu LSP and DISQL for Log AnalysisBaidu LSP and DISQL for Log Analysis
Baidu LSP and DISQL for Log AnalysisXiaoming Chen
 
基于嵌入式系统的Avs P10编码系统设计
基于嵌入式系统的Avs P10编码系统设计基于嵌入式系统的Avs P10编码系统设计
基于嵌入式系统的Avs P10编码系统设计Hengyi
 
Google protocol buffers简析
Google protocol buffers简析Google protocol buffers简析
Google protocol buffers简析wavefly
 

Similar to 第1章 概论 (20)

软件工程 第七章
软件工程 第七章软件工程 第七章
软件工程 第七章
 
Test
TestTest
Test
 
软件工程
软件工程软件工程
软件工程
 
Chapter 2 程式設計基本流程
Chapter 2 程式設計基本流程Chapter 2 程式設計基本流程
Chapter 2 程式設計基本流程
 
函数调用关系工具-2011-孙光福
函数调用关系工具-2011-孙光福函数调用关系工具-2011-孙光福
函数调用关系工具-2011-孙光福
 
Recycle Open Source Projects
Recycle Open Source ProjectsRecycle Open Source Projects
Recycle Open Source Projects
 
2006 recycle opensourceprojects
2006 recycle opensourceprojects2006 recycle opensourceprojects
2006 recycle opensourceprojects
 
函数调用关系工具-Lite
函数调用关系工具-Lite函数调用关系工具-Lite
函数调用关系工具-Lite
 
Hcsm lect-20120913
Hcsm lect-20120913Hcsm lect-20120913
Hcsm lect-20120913
 
Java DSL与动态代码生成技术的应用 (上集:DSL部分)
Java DSL与动态代码生成技术的应用 (上集:DSL部分)Java DSL与动态代码生成技术的应用 (上集:DSL部分)
Java DSL与动态代码生成技术的应用 (上集:DSL部分)
 
系統程式
系統程式系統程式
系統程式
 
常用JAVA代码质量静态检查工具
常用JAVA代码质量静态检查工具常用JAVA代码质量静态检查工具
常用JAVA代码质量静态检查工具
 
Baidu LSP and DISQL for Log Analysis
Baidu LSP and DISQL for Log AnalysisBaidu LSP and DISQL for Log Analysis
Baidu LSP and DISQL for Log Analysis
 
C+
C+C+
C+
 
C#
C#C#
C#
 
C語言應用前置處理
C語言應用前置處理C語言應用前置處理
C語言應用前置處理
 
基于嵌入式系统的Avs P10编码系统设计
基于嵌入式系统的Avs P10编码系统设计基于嵌入式系统的Avs P10编码系统设计
基于嵌入式系统的Avs P10编码系统设计
 
Google protocol buffers简析
Google protocol buffers简析Google protocol buffers简析
Google protocol buffers简析
 
getPDF.aspx
getPDF.aspxgetPDF.aspx
getPDF.aspx
 
getPDF.aspx
getPDF.aspxgetPDF.aspx
getPDF.aspx
 

More from tjpucompiler

第6章 自底向上的lr分析法
第6章 自底向上的lr分析法第6章 自底向上的lr分析法
第6章 自底向上的lr分析法tjpucompiler
 
第11章 目标代码生成
第11章 目标代码生成第11章 目标代码生成
第11章 目标代码生成tjpucompiler
 
第10章 代码优化
第10章 代码优化第10章 代码优化
第10章 代码优化tjpucompiler
 
第8章 运行时的存储管理
第8章 运行时的存储管理第8章 运行时的存储管理
第8章 运行时的存储管理tjpucompiler
 
第7章 语法制导翻译和中间代码生成
第7章 语法制导翻译和中间代码生成第7章 语法制导翻译和中间代码生成
第7章 语法制导翻译和中间代码生成tjpucompiler
 
第6章 自底向上的lr分析法
第6章 自底向上的lr分析法第6章 自底向上的lr分析法
第6章 自底向上的lr分析法tjpucompiler
 
第5章 自底向上的语法分析
第5章 自底向上的语法分析第5章 自底向上的语法分析
第5章 自底向上的语法分析tjpucompiler
 
第2章 文法和语言
第2章 文法和语言第2章 文法和语言
第2章 文法和语言tjpucompiler
 
第3章 词法分析
第3章 词法分析第3章 词法分析
第3章 词法分析tjpucompiler
 
第4章 自顶向下的语法分析
第4章 自顶向下的语法分析第4章 自顶向下的语法分析
第4章 自顶向下的语法分析tjpucompiler
 

More from tjpucompiler (11)

第6章 自底向上的lr分析法
第6章 自底向上的lr分析法第6章 自底向上的lr分析法
第6章 自底向上的lr分析法
 
第11章 目标代码生成
第11章 目标代码生成第11章 目标代码生成
第11章 目标代码生成
 
第10章 代码优化
第10章 代码优化第10章 代码优化
第10章 代码优化
 
第9章 符号表
第9章 符号表第9章 符号表
第9章 符号表
 
第8章 运行时的存储管理
第8章 运行时的存储管理第8章 运行时的存储管理
第8章 运行时的存储管理
 
第7章 语法制导翻译和中间代码生成
第7章 语法制导翻译和中间代码生成第7章 语法制导翻译和中间代码生成
第7章 语法制导翻译和中间代码生成
 
第6章 自底向上的lr分析法
第6章 自底向上的lr分析法第6章 自底向上的lr分析法
第6章 自底向上的lr分析法
 
第5章 自底向上的语法分析
第5章 自底向上的语法分析第5章 自底向上的语法分析
第5章 自底向上的语法分析
 
第2章 文法和语言
第2章 文法和语言第2章 文法和语言
第2章 文法和语言
 
第3章 词法分析
第3章 词法分析第3章 词法分析
第3章 词法分析
 
第4章 自顶向下的语法分析
第4章 自顶向下的语法分析第4章 自顶向下的语法分析
第4章 自顶向下的语法分析
 

第1章 概论

  • 2. 教材 《编译原理》 张晶、陈香凝、董德义、李鑫、赵 曦 编 哈尔滨工程大学出版社 2011 年第一版 2
  • 3. 学科地位 编译原理是计算机专业的一门重 要专业课,旨在介绍编译程序构造 的一般原理和基本方法。 虽然只有少数人从事编译方面的 工作,但是这门课在理论、技术、 方法上都对学生提供了系统而有效 的训练,有利于提高软件人员的素 质和能力。  3
  • 4. 学习《编译原理》的重要性 通过学习编译程序的构造原理和实现技术  可以了解编译程序本身的设计和实现技术;  有助于提高对程序设计语言的理解及设计能力 ;  提高元级程序的设计能力;  提高大型软件的开发能力。 4
  • 5. 主要内容 第 1 章 引论 第 6 章 LR 分析法 第 2 章 文法和语言 第 7 章 语法制导翻译 第 3 章 词法分析 和 第 4 章 自顶向下的 中间代码生成 语法 第 8 章 运行时的存储 分析 组织 第 5 章 自底向上的 第 9 章 符号表 语法 第 10 章 代码优化 分析 第 11 章 目标代码生 5 成
  • 9. 世界上存在着多种语言,人们为了交 流,就需要建立各种语言之间的翻译 。  人与计算机之间的信息交流,同样存 在一个翻译问题。  计算机语言 — — 机器语言 人类语言 — — 高级程序设计语言 9
  • 10. 过程式语言 Fortran,Pascal,C 函数式语言 Lisp 高级语言 逻辑式语言 Prolog 程序设 对象式语言 C++ 计语言         汇编语言 低级语言:面向机器的语         机器语言 言 10
  • 11. 机器语言  直接用计算机能够识别的二进制代码指令 来编写程序的语言。由二进制的指令代码 组成。  1 + 3 表示为 10000001 00000001 00000011  最底层的计算机语言,不需要翻译就可以 直接被计算机硬件识别。对应不同的计算 机硬件有不同的机器语言。  特点:执行速度快,但编写程序的难度大 ,修改、调试不方便,直观性差,不易移 植。 11
  • 12. 汇编语言  又称为符号语言。与机器语言一一对应,采 用能帮助记忆的英文缩写符号(指令助记符 )来代替机器语言指令中的操作码,用地址 符号来代替地址码。用指令助记符及地址符 号书写的指令称为汇编指令,用汇编指令编 写的程序称为汇编语言源程序。  将 X 、 Y 中的内容相加 表示为 ADD X Y  机器不能直接识别汇编语言程序,必须把它 翻译 为机器语言程序才能执行。  特点:比机器语言直观,容易理解记忆,比 高级语言的执行效率高,通用性和移植性较 12 差。
  • 13. 高级语言  与具体的计算机硬件无关,是面向问题的程 序设计语言,其表达方式接近于自然语言和 数学语言,易于人们接受和掌握。  采用类似于数学公式的书写方式: x = 1 + 3  特点:独立于具体的计算机硬件,程序的编 制和调试方便,通用性和可移植性好。在计 算机执行之前,需要通过编译程序翻译成目 标语言程序,或需要通过解释程序边解释, 边执行。时间与空间效率比较低。 13
  • 14. 比较 机器语言 汇编语言 高级语言 硬件识 是唯一可以 不可识别 不可识别 别 识别的语言 是否可 不可,需汇 不可,需编译 / 解 直接执 可直接执行 编、连接 释、连接 行 面向机器 面向问题 / 对象 面向机器 占用内存少 占用内存大 占用内存少 执行速度快 执行速度相对慢 特点 执行速度快 较为直观 标准化程度高 使用不方便 与机器语言 便于程序交换, 一一对应 使用方便 定位 低级语言, 低级语言, 高级语言,种类 极少使用 很少使用 多,常用 14
  • 15. 1. 翻译程序: 将一种语言编写的程序等价 转换成另一种语言编写的程序,实现上述 功能的程序称为翻译程序。 2. 编译程序: 把高级语言 ( 称作源语言 ) 书 写的程序翻译成低级语言 ( 称作目标语言 ) 的 等价的程序。 3. 两者关系: 编译程序是翻译程序的子 集。 15
  • 16. 编译程序的功能 编译器的输入对象 编译器的输出对象 源程序 编译程序 目标程序 (高级语言程序 ( 编译器 ) (汇编程序) ) 面向人的 面向机器的 16
  • 17. 编译和解释程序: 初始数据 编 目 计 源 译 标 算 程 程 程 结 序 序 序 果 解 计 源程序 释 算 程 边解释 结 初始数据 序 边执行 果 17 源程序
  • 18. 解释程序和编译程序的区别 功能 工作结果 实现技术上 编译 源程序的一 源程序的 把中间代码转 程序 个转换系统 目标代码 换成目标程序 解释 源程序的一 源程序的 执行中间代码 程序 个执行系统 执行结果 解释程序和编译程序的根本区别: 是否生成目标代码 18
  • 20. 编译过程概述 编译程序完成从源程序到目标程序 的翻译工作,是一个复杂的整体的过程。 从概念上讲,一个编译程序的整个 工作过程是划分成阶段进行的,每个阶段 将源程序的一种表示形式转换成另一种表 示形式。 20
  • 21. 编译阶段的经典划分方法是划分 成 6 个基本阶段。 编译逻辑过程 : 词法分析 语法分析 语义分析 中间代码生成 代码优化 目标代码生成 21
  • 22. 英译与编译的比较 ( 理解 5 个 阶段 ) 1. 识别出句子的一个个单 1. 词法分析 词 2. 语法分析 2. 分析句子的语法结构 3. 语义分析中间代码生 3. 初步翻译句子的含义 成 4. 译文修饰 4. 代码优化 5. 写出最后译文 5. 目标代码生成 22
  • 23. 引例  英语句子: 与此类似, I wish you success. 编译程序将首先根 据源语言的定义来 对源程序进行分析  汉语句子: ,之后进行综合并 我希望你成功。 得到与源程序等价 (祝你成功。) 的目标程序。 23
  • 24. 编译逻辑过程  词法分 析 语法分析 语义分析 中间代码生 成 代码优化 24
  • 25. 1. 词法分析 从左至右读字符流的源程序、识别出 一个个单词(单词符号或符号)。 例 : position := initial + rate * 60; 单词类型 单词值 标识符 1( id 1) p o s itio n 算符 ( 赋值 ) := 标识符 2( id 2) initia l 算符 ( 加 ) + 标识符 3( id 3) 25 ra te 算符 ( 乘 ) *
  • 26. int a; a = a 单词类型 + 2; 单词值 保留字 int 标识符 ( 变量名 ) a 界符 ; 标识符 ( 变量名 ) a 算符 ( 赋值 ) = 标识符 ( 变量名 ) a 算符 ( 加 ) + 整数 2 界符 ; 26
  • 27. 2. 语法分析 功能 : 在词法分析输出的单词流基础上, 依据源程序的语法规则分析该单词流是否 能正确地组成各类语法单位,并指出其中 的语法错误。 语法分析程序与自然语言中句子的语 法分析类似。语法分析定义了程序的结构元 素及其关系。通常将语法分析的结果表示为 分析树或语法树。 依据源程序的语法规则把源程序的 单词序列组成语法短语 ( 表示成语法 27 树 )。
  • 28. position := initial + rate * 60 ; 规则 < 赋值语句 >::=< 标识符 >“:=”< 表 达式 > < 表达式 >::=< 表达式 >“+”< 表达式 > < 表达式 >::=< 表达式 >“*”< 表达式 > < 表达式 >::=“(”< 表达式 >“)” < 表达式 >::=< 标识符 > < 表达式 >::=< 整数 > < 表达式 >::=< 实数 > 28
  • 29. 赋值语句 标识符 := 表达式 表达式 + 表达式 标识符 表达式 * 表达式 标识符 整数 29
  • 30. 3. 语义分析 语义审查 ( 静态语义 )  按照语法树的层次关系和先后次序,逐个 语句地进行语义处理。  主要任务: 进行类型审查,审查每个算 符是否符合语言规范,不符合时应报告错 误。  类型匹配  类型转换 30
  • 31. 4. 中间代码生成 源程序的内部 ( 中间 ) 表示 三元式、四元式、波兰式、逆波兰式 ( * id3 t1 t2 ) t2 = id3 * t1 t2 := id3 * t1 31
  • 32. id1:= id2 + id3 * 60 (1) (inttoreal, 60 - t1 ) (2) (* , id3 t1 t2 ) (3) (+ , id2 t2 t3 ) (4) (:= , t3 - id1 ) 32
  • 33. 5. 代码优化 对中间代码进行变换,使目标代码更 为高效。(节省时间和空间) id1:= id2 + id3 * 60 (1) (inttoreal 60 - t1 ) (2) ( * id3 t1 t2 ) (3) ( + id2 t2 t3 ) (4) ( := t3 - id1 ) 变换 ( 1) ( * id3 60.0 t1 ) 33 ( 2 )( + id2 t1 id1 )
  • 34. 6. 目标代码生成 (* , id3 60.0 t1 ) (+ , id2 t1 id1 ) movf id3,R2 mulf #60.0,R2 movf id2,R1 addf R2,R1 movf R1,id1 34
  • 35. 符号表管理  记录源程序中使用的名字;  收集每个名字的各种属性信息: 类型、作用域、分配存储信息 Const1 常量 值: 35 Var1 变量 类型:实 层次: 2 35
  • 36. 出错处理  检查错误; 词法分析程序发现某单词的拼写错误 语法分析程序发现语法错误,如括号不配 对 语义分析程序发现语法错误,如某运算符 与其运算对象的类型不相容  报告出错信息;  排错,恢复编译工作。 36
  • 37. 编译程序的结构  词法分析程序  语法分析程序  语义分析程序  中间代码生成程序  代码优化程序  目标代码生成程序  符号表管理程序  出错处理程序 37
  • 38. 词法分析程序 语法分析程序 表 出 格 语义分析程序 错 管 中间代码生成程序 处 理 代码优化程序 理 目标代码生成程序 38
  • 41. 前端与后端  编译的前端( fro nt e nd ): 此部分 工作的特点是不依赖于具体机器。  编译的后端( b a c k e nd ): 此部分 对中间代码和目标机有较高的依赖性,而 一般不依赖于源程序代码。 41
  • 42. 遍  遍(趟):从头到尾扫描源程序 (各种形式)一遍 ( p a s s ) 。 42
  • 43. 小结 本章没有难以理解的内容 , 重点对 编译程序的功能和结构做一综述 , 要说 难点的是 : 了解编译程序各个成分在编 译阶段的逻辑关系以及他们怎样作为 一个整体完成编译任务的。 43