编译原理基础精选文档.ppt
《编译原理基础精选文档.ppt》由会员分享,可在线阅读,更多相关《编译原理基础精选文档.ppt(50页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、编译原理基础本讲稿第一页,共五十页第第6章章 编译原理基础编译原理基础Principles of Compilation中原工学院软件学院中原工学院软件学院韩玉民韩玉民本讲稿第二页,共五十页编译程序是高级语言的支撑基础,是计算机系统中重要的系统软件之一。第第6章章 编译原理编译原理本讲稿第三页,共五十页6.1 6.1 程序设计语言的编译与解释程序设计语言的编译与解释程序设计语言的编译与解释程序设计语言的编译与解释6.2 6.2 形式语言形式语言形式语言形式语言6.3 6.3 第一阶段第一阶段第一阶段第一阶段 词法分析词法分析词法分析词法分析6.4 6.4 第二阶段第二阶段第二阶段第二阶段 语法
2、分析语法分析语法分析语法分析6.5 6.5 第三阶段第三阶段第三阶段第三阶段 语义分析与中间代码生成语义分析与中间代码生成语义分析与中间代码生成语义分析与中间代码生成6.6 6.6 第四阶段第四阶段第四阶段第四阶段 代码优化代码优化代码优化代码优化6.7 6.7 符号表管理和错误处理符号表管理和错误处理符号表管理和错误处理符号表管理和错误处理6.8 6.8 第五阶段第五阶段第五阶段第五阶段 目标代码生成目标代码生成目标代码生成目标代码生成 第第6章章 编译原理编译原理本讲稿第四页,共五十页程序设计语言分成两大类:n低级语言低级语言:包括机器语言和汇编语言,主要是面向机器的。n高级语言高级语言:
3、高级语言则是面向应用的,分成很多种,如FORTRAN、Pascal、C、C#、VB、Java等。6.1 程序设计语言的编译与解释程序设计语言的编译与解释6.1.1 6.1.1 程序设计语言程序设计语言程序设计语言程序设计语言本讲稿第五页,共五十页n机器语言本身是有由0和1组成的,符合计算机的硬件特性,因此能够直接执行。但用机器语言编写程序很不方便且容易出错,因此就用助记符代替机器语言,产生了汇编语言。n汇编语言比机器语言在可读性方面有了进步,但是其依赖具体机器的特性无法改变,给程序设计语言增添了难度。6.1.2 6.1.2 程序的编译与解释程序的编译与解释程序的编译与解释程序的编译与解释6.1
4、 程序设计语言的编译与解释程序设计语言的编译与解释本讲稿第六页,共五十页n高级语言不能直接在机器上运行,它不是面向机器,而是面向应用的,因此,要想让高级语言运行必须有编译程序。n n编译程序编译程序就是这样的一种程序,它能将高级语言编写的源程序转换成与之在逻辑上等价的低级语言形式的目标程序。1.1.编译方式编译方式编译方式编译方式 6.1 程序设计语言的编译与解释程序设计语言的编译与解释本讲稿第七页,共五十页n高级语言程序的执行通常分为两个阶段,即编译阶段和运行阶段,源程序的运行过程如图1-1所示。#includeMain()For(;)Printf(“Hello World!n”);源程序编
5、译程序01101001100101011001001110101010101011000011111001011111110010101010001010001111101101目标程序编译初始数据目标程序、运行系统计算结果输入处理输出程序的编译 程序的执行 6.1 程序设计语言的编译与解释程序设计语言的编译与解释本讲稿第八页,共五十页n编译阶段将源程序变换成目标程序;运行阶段则由所生成的目标程序连同运行系统(数据空间分配子程序、标准函数程序等)接受程序的初始数据作为输入,运行后输出计算结果。n如果目标程序是汇编语言的形式,则需要在编译阶段和运行阶段之间加一个汇编阶段。#includeMain
6、()For(;)Printf(“Hello World!n”);源程序汇编程序011010011001010010101011000011111011机器语言程序ADD A,BMOV B,C编译程序汇编语言程序 编译汇编6.1 程序设计语言的编译与解释程序设计语言的编译与解释本讲稿第九页,共五十页高级语言编写的程序除了可以通过编译方式外,还可以通过解释程序执行。所谓解释程序是一种语言翻译程序,按动态顺序,读入一条语句,解释一条语句,执行一条语句,即边翻译边执行。源程序解释程序计算结果源程序、输入解释执行输出数 据 2.2.解释方式解释方式解释方式解释方式 6.1 程序设计语言的编译与解释程序设
7、计语言的编译与解释本讲稿第十页,共五十页n高级语言源程序经编译程序编译的经过目标代码还可以是待装配高级语言源程序经编译程序编译的经过目标代码还可以是待装配的目标代码(相对目标代码),这种形式的目标程序通常由多个的目标代码(相对目标代码),这种形式的目标程序通常由多个目标模块组成,各目标模块由相应的源程序模块经编译生成,必目标模块组成,各目标模块由相应的源程序模块经编译生成,必须将相关的多个目标模块组装成到一个可执行目标程序中,才能须将相关的多个目标模块组装成到一个可执行目标程序中,才能运行。完成集成工作的程序称为连接程序。运行。完成集成工作的程序称为连接程序。n连接程序还连接目标程序和用于标准
8、库函数的代码,以及连接连接程序还连接目标程序和用于标准库函数的代码,以及连接目标程序和由计算机的操作系统提供的资源(例如,存储分配目标程序和由计算机的操作系统提供的资源(例如,存储分配程序及输入与输出设备)。程序及输入与输出设备)。3.3.连接程序(连接程序(连接程序(连接程序(linkerlinker)6.1 程序设计语言的编译与解释程序设计语言的编译与解释本讲稿第十一页,共五十页n解释程序与编译程序的主要区别是:解释程序与编译程序的主要区别是:l编译程序将源程序翻译成目标程序后再执行目标程序.l解释程序是逐条读出源程序中的语句并执行,即在解释程序的执行过程中并不产生目标程序。6.1 程序设
9、计语言的编译与解释程序设计语言的编译与解释本讲稿第十二页,共五十页6.1.3 6.1.3 编译程序的编译过程和编译程序的结构编译程序的编译过程和编译程序的结构编译程序的编译过程和编译程序的结构编译程序的编译过程和编译程序的结构 编译程序的功能是将用高级语言编写的源程序翻译成等价的低级语言(汇编语言或机器语言)目标程序。编译的过程就是一个不同语言翻译的过程,所以其过程类似于自然语言的翻译。本讲稿第十三页,共五十页6.1.3 6.1.3 编译程序的编译过程和编译程序的结构编译程序的编译过程和编译程序的结构编译程序的编译过程和编译程序的结构编译程序的编译过程和编译程序的结构 步骤完 成 的 工 作自
10、然语言翻译(英语翻译成汉语)编译程序(源程序翻译成机器目标代码)1根据英文单词拼写规则,识别出各个单词和标点符号等,并检查单词是否有拼写错误。这就是词法分析对源程序进行词法分析,检查有无拼写错误,识别出其中的单词(关键字、标识符等)2根据英文语法规则,对词法分析中得到的各个单词和标点符号等进行分析、检查,看是否能组成一个符合语法规则的句子。因此,该步骤称为语法分析进行语法分析,检查单词串是否组成符合语法的正确的程序语句,如表达式是否正确等3对语法分析后得到的符合英文语法规则的句子进行分析,理解句子的含义,初步翻译成中文。该步骤称为语义分析分析翻译语句要完成的操作,是将源程序初步翻译成目标程序(
11、一种中间代码)。这是为了方便编译过程的实现,同时也便于进行代码优化4对初步翻译的中文进行修饰、润色等代码优化5将英文翻译成最终的中文将优化后的中间代码转换成特定机器上的机器语言程序或汇编语言程序自然语言的翻译自然语言的翻译本讲稿第十四页,共五十页6.1.3 6.1.3 编译程序的编译过程和编译程序的结构编译程序的编译过程和编译程序的结构编译程序的编译过程和编译程序的结构编译程序的编译过程和编译程序的结构 源程序词法分析语法分析语义分析和中间代码生成代码优化生成目标代码出错处理表格管理目标程序编译过程编译过程编译程序结构编译程序结构编译程序结构编译程序结构词法分析程序语法分析程序语义分析和中间代
12、码生成程序代码优化程序生成目标代码编译过程可以划分成五个阶段编译过程可以划分成五个阶段1.1.编译过程编译过程编译过程编译过程本讲稿第十五页,共五十页n编译程序的功能是把高级语言源程序翻译成等价的低级语言目标程序。n源程序是由一些基本符号构成的,我们在运行这个程序时,先编译,若某处有错误,就报错,无错误就运行。编译程序在编译时,先将程序中的单词一个个分离出来,登记在一个表中,这叫词法分析,然后检查语句格式,叫做语法分析。然后检查类型是否一致,计算表达式的值叫语义分析。这些功能都是由编译程序相应的程序完成的。6.1.3 6.1.3 编译程序的编译过程和编译程序的结构编译程序的编译过程和编译程序的
13、结构编译程序的编译过程和编译程序的结构编译程序的编译过程和编译程序的结构 本讲稿第十六页,共五十页n一般来说,整个编译过程可以划分成五个阶段:l词法分析阶段l语法分析阶段l语义分析和中间代码生成阶段l中间代码的优化l目标代码的生成。6.1.3 6.1.3 编译程序的编译过程和编译程序的结构编译程序的编译过程和编译程序的结构编译程序的编译过程和编译程序的结构编译程序的编译过程和编译程序的结构 1.1.编译过程编译过程编译过程编译过程本讲稿第十七页,共五十页6.1.3 6.1.3 编译程序的编译过程和编译程序的结构编译程序的编译过程和编译程序的结构编译程序的编译过程和编译程序的结构编译程序的编译过
14、程和编译程序的结构 2.2.一遍与多遍编译一遍与多遍编译一遍与多遍编译一遍与多遍编译 编译程序还采用“分遍”的形式,即编译过程可通过一遍或多遍编译来完成。所谓编译的“一遍”(pass)是指下述过程:对于源程序或中间代码,从头到尾扫描一遍,并完成规定的处理任务,生成新的源程序的中间代码代码或目标代码。在单遍编译中,编译程序包括了编译程序的各个阶段的任务,所有的阶段由一遍完成,其结果是编译得很好,但通常代码效率差。本讲稿第十八页,共五十页6.1.3 6.1.3 编译程序的编译过程和编译程序的结构编译程序的编译过程和编译程序的结构编译程序的编译过程和编译程序的结构编译程序的编译过程和编译程序的结构
15、2.2.一遍与多遍编译一遍与多遍编译一遍与多遍编译一遍与多遍编译 在多遍扫描的编译程序中,每一遍完成一个或几个相关逻辑的工作,一个阶段的工作也可以分多遍来完成。例如,将词法分析作为第一编,语法分析和语义分析作为第二遍等。本讲稿第十九页,共五十页6.2 6.2 形式语言形式语言形式语言形式语言 程序设计语言的语法描述程序设计语言的语法描述程序设计语言的语法描述程序设计语言的语法描述n 程序和自然语言一样,也有其语法规则,要对程序进行语法分析,就要先了解程序的语法规则。程序的语法规则称为文法,即文法是描述语言的形式规则(语法规则)。n n用一组数学符号和规则来描述的语言称为形式语言。用一组数学符号
16、和规则来描述的语言称为形式语言。用一组数学符号和规则来描述的语言称为形式语言。用一组数学符号和规则来描述的语言称为形式语言。n 目前程序设计语言都是用形式语言来描述,形式语言是编译原理的理论基础。1.1.什么是形式语言什么是形式语言什么是形式语言什么是形式语言?本讲稿第二十页,共五十页6.2 6.2 形式语言形式语言形式语言形式语言 程序设计语言的语法描述程序设计语言的语法描述程序设计语言的语法描述程序设计语言的语法描述程序和自然语言一样,也有其语法规则,要对程序进行语法分析,就要先了解程序的语法规则。程序的语法规则称为文法,即文法是描述语言的形式规则(语法规则)。这种规则要能够描述程序语言各
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 基础 精选 文档
限制150内