第1课 第1章_编译原理概述.ppt_第1页
第1课 第1章_编译原理概述.ppt_第2页
第1课 第1章_编译原理概述.ppt_第3页
第1课 第1章_编译原理概述.ppt_第4页
第1课 第1章_编译原理概述.ppt_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、编译原理,湖南师范大学数学与计算机科学学院,2,什么是编译,把一种语言等价翻译成另外一种语言,源语言 Source language,目标语言 Object language,编译就是翻译,编译,编译程序 compiler,面向人的语言 Human-oriented language,面向机器的语言 Computer-oriented language,3,4,编译的过程,词法分析 语法分析 语义分析 中间代码生成 代码优化 目标代码生成,5,词法分析,从左到右以字符为单位扫描源程序,从而识别出每个单词符号 单词是指逻辑上机密相连的一组字符,具有集体的含义,比如标识符。,6,词法分析,单词种类

2、: 一类是特殊的单词,如保留字、运算符、分界符等,这些都是源语言所提供的; 另一类是普通单词,如用户在源程序中定义的标识符、常数等。,7,词法分析,例如:程序段 int x,a,b; x=a+b*50; 词法分析后的结果为 (1)保留字 int (2)标识符 x (3)界限符 , (4)标识符 a (5)界限符 , (6)标识符 b (7)界限符 ; (8)标识符 x (9)运算符 = (10)标识符 a (11)运算符 + (12)标识符 b (13)运算符 * (14)整常数 50 (15)界限符 ;,8,语法分析,在词法分析的基础上,按照源语言的规则将单词序列组合成语法短语 依据是语言的

3、语法规则,即描述程序结构的规则,通常采用递归结构 【如何描述语法规则呢?一般形式化,使用如语法树等工具;根据应用不同,可以有不同工具】 词法分析与语法分析:分析源程序的结构;词法分析采用线性扫描,但是线性扫描不适合递归语法,9,语法分析,语法分析有两种方法: 推导(Derive)和归约(Reduce) 语法分析对说明语句填写符号表,一般语句构造语法树 例如:赋值语句a=b+c*10经语法分析生成语法树,10,语义分析,进行语义审查以判断是否有语义错误。 例如:上下文相关性,类型匹配,类型转换,11,中间代码生成,源程序的内部(中间)表示结构简单、含义明确的记号系统, 介于高级语言与低级语言之间

4、, 与目标机无关,便于优化、移植并容易生成目标代码。 通常的中间代码有三元式、四元式、树结构或适合相应语言的中间代码。,12,代码优化,对中间代码进行变换或进行改造,目的使生成目标代码更为高效,即省时间/省空间 如删除公共子表达式、合并已知量、删除无用赋值、循环优化、算符规约等等,13,目标代码生成,把中间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码。 是编译的最后阶段,与硬件系统结构、指令含义等有关,14,出 错 处 理 程 序,表 格 管 理 程 序,编译程序的结构,15,表格管理,什么是表,记录源程序中使用的名字 收集每个名字的各种属性信息 类型、作用域、分配存储

5、信息,符号表,Symbol table,16,出错处理(error handling),检查错误、报告出错信息、排错、恢复编译工作 检查词法、语法和语义中的错误(静态)。 编译程序的处理能力,如存储空间越界(动态) 报告出错信息和位置 处理和恢复,17,编译阶段的组合,编译的前端(front end):主要依赖源语言、与目标机器无关;包括词法分析、语法分析、语义分析、中间代码生成以及代码优化(部分) 编译的后端(back end):依赖目标机、不依赖于源语言,只与中间代码有关的那些阶段,18,源代码,中间代码,目标代码,前端,后端,仅依赖于源语言,仅依赖于目标机器,19,源程序,第一遍输出文件

6、,遍,第二遍输入文件,遍,第(N-1)遍输出文件,第N遍输入文件,遍,目标代码,遍(趟)对源程序或其等价的中间语言程序从头道尾扫视并完成规定任务的过程,20,Compiler与interpreter,解释程序:不生成可执行文件,不能独立执行;接受某个语言的程序并立即运行的过程。一个个地获取、分析并执行源程序的语句。 编译程序:生成可执行文件,可以独立执行;编译和运行是两个独立分开的阶段。 著名的解释程序Basic、Lisp、Unix命令、SQL、JAVA,21,处理源程序的软件工具,语言结构化编辑器 语言程序调试工具 程序格式化工具 语言程序测试工具 高级语言之间的转换工具,22,程序设计语言

7、范型,1.强制(命令)式语言过程语言 C、Pascal:面向动作,一个计算过程看作一系列动作 2. 函数式语言 ML、Lisp:注重程序表示的功能 .基于规则(逻辑)的语言 Prolog:检查一定的使能条件,满足时执行动作 4. 面向对象语言 Ada、C+、Java,23,编译技术在计算机学科中的地位,编译技术的复杂性 直接使用离散数学关于集合论、图论、形式语言自动机等理论知识,编写编译程序时必然要使用到多种算法和数据结构 编译技术与计算机其他学科的交叉性 系统结构、人工智能、离散数学、高级语言、数据结构、汇编语言等课程 编译技术的成熟性 编译技术是计算机科学中发展最迅速、最成熟的分枝之一,24,学习编译原理的意义,编译器可能有一万行,也可能有

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论