《第1章编译程序概论精选文档.ppt》由会员分享,可在线阅读,更多相关《第1章编译程序概论精选文档.ppt(35页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第1章编译程序概论本讲稿第一页,共三十五页第一章 编译程序概论本讲稿第二页,共三十五页本章学习目标v编译程序是高级语言的支撑基础,是计算机系统中重要的系统软件之一,本章主要内容:v编译程序的功能v编译程序的体系结构v编译程序的工作过程v编译程序的设计本讲稿第三页,共三十五页1.1 程序设计语言v程序设计语言分成两大类,一类是高级语言,一类是低级语言。低级语言又包括机器语言和汇编语言,主要是面向机器的。高级语言则是面向应用的,分成很多种,如FORTRAN、Pascal、C、Ada、Java等。本讲稿第四页,共三十五页v机器语言本身是有由0和1组成的,符合计算机的硬件特性,因此能够直接执行。但用机
2、器语言编写程序很不方便且容易出错,因此就用助记符代替机器语言,产生了汇编语言。v汇编语言比机器语言在可读性方面有了进步,但是其依赖具体机器的特性无法改变,给程序设计语言增添了难度。本讲稿第五页,共三十五页v高级语言不能直接在机器上运行,它不是面向机器,而是面向应用的,因此,要想让高级语言运行必须有编译程序。编译程序就是这样的一种程序,它能将高级语言编写的源程序转换成与之在逻辑上等价的低级语言形式的目标程序。v高级语言程序的执行通常分为两个阶段,即编译阶段和运行阶段,源程序的运行过程如图1-1所示。编译阶段将源程序变换成目标程序;运行阶段则由所生成的目标程序连同运行系统(数据空间分配子程序、标准
3、函数程序等)接受程序的初始数据作为输入,运行后输出计算结果。如果目标程序是汇编语言的形式,则需要在编译阶段和运行阶段之间加一个汇编阶段。本讲稿第六页,共三十五页源程序目标程序机器语言计算结果编译程序汇编程序图1-1源程序的编译、汇编和运行阶段本讲稿第七页,共三十五页v高级语言编写的程序除了可以通过编译方式外,还可以通过解释程序执行。所谓解释程序是一种语言翻译程序,读入一条语句,解释一条语句,执行一条语句,边读入边执行。本讲稿第八页,共三十五页v解释程序与编译程序的主要区别是:编译程序将源程序翻译成目标程序后再执行目标程序,而解释程序是逐条读出源程序中的语句并执行,即在解释程序的执行过程中并不产
4、生目标程序。本讲稿第九页,共三十五页1.2编译程序的编译过程和结构v编译程序的功能是把高级语言源程序翻译成等价的低级语言目标程序。源程序是由一些基本符号构成的,我们在运行这个程序时,先编译,若某处有错误,就报错,无错误就运行。编译程序在编译时,先将程序中的单词一个个分离出来,登记在一个表中,这叫词法分析,然后检查语句格式,叫做语法分析。然后检查类型是否一致,计算表达式的值叫语义分析。这些功能都是由编译程序相应的程序完成的。本讲稿第十页,共三十五页v一般来说,整个编译过程可以划分成五个阶段:词法分析阶段、语法分析阶段、语义分析和中间代码生成阶段、中间代码的优化和目标代码的生成。本讲稿第十一页,共
5、三十五页1.词法分析阶段v词法分析是编译过程的基础,其任务是扫描源程序,根据语言的词法规则,分解和识别出每个单词,并把单词翻译成相应的机内表示。当然,词法分析在识别单词的过程中,同时也做了词法检查。本讲稿第十二页,共三十五页v在高级语言中,所谓单词,就是指逻辑上紧密相连的一组字符,这些字符具有集体含义。单词是语言中最小的语义单位,如语言中的关键字、标识符、运算符和界限符。词法分析的依据是词的构造。单词的构造规则在高级语言中有明确的规定,比如哪些为保留字、变量如何定义、常量如何构造、分界符有哪些等。本讲稿第十三页,共三十五页v例如,用C 语言编写的程序段如下:vmain()vvfloat x=2
6、,y=3,s;vs=x+y*5;vv识别出的单词序列为表1-1所示本讲稿第十四页,共三十五页表1-1词法分析程序类型名单词类型名单词保留字main左括号(右括号)花括号保留字float标识符x等号=常量2逗号,标识符y等号=常量3逗号,标识符s分号;标识符s等号=标识符x运算符+标识符y运算符*常量5分号;花括号本讲稿第十五页,共三十五页2.语法分析v语法分析是在词法分析的 基础上进行的,是编译过程的第二个阶段。语法分析的任务是根据语言的语法规则,把单词符号串分解成各类语法单位,如表达式、语句等。通过语法分析,可以确定整个输入符号串是否构成一个正确的程序。本讲稿第十六页,共三十五页3语义分析和
7、中间代码的生成v语义分析的任务是对各种不同语句进行翻译,包括两方面的工作:一是对每种语法范畴进行语义检查,如变量是否定义、类型是否正确等;二是在语义检查正确的情况下,进行中间代码的翻译。中间代码是介于高级语言语句和低级语言语句之间的一种独立于具体硬件的记号系统,它既有一定程度的抽象,又和低级语言十分接近,因此,转换成目标代码很容易。本讲稿第十七页,共三十五页v中间代码的表示形式有很多种,常见的有四元式、三元式、间接三元式和逆波兰式。其中四元式的形式为(运算符,运算对象1,运算对象2,结果)本讲稿第十八页,共三十五页4.中间代码优化v中间代码优化通过调整和改变中间代码中某些操作次序,以最终产生更
8、加高效的目标代码。优化的主要手段有删除冗余运算、删除无用赋值、合并已知量、循环优化等。本讲稿第十九页,共三十五页5目标代码的生成v这一阶段的任务是对前一阶段的中间代码变换成特定机器上的机器语言或汇编语言程序,实现机器的最终翻译。最后阶段的工作因为目标语言的关系而十分依赖机器的硬件系统,即如何充分利用机器现存的寄存器,合理的选择指令,生成尽可能短的目标代码,这与机器的硬件有关。本讲稿第二十页,共三十五页v编译过程可以划分成五个阶段,这种划分是编译程序的逻辑组织形式。实际上,编译过程往往分成前端和后端。前端包括词法分析、语法分析、语义分析、中间代码生成和中间代码优化,主要依赖于源程序;后端包括目标
9、代码生成,依赖于计算机硬件系统和机器指令系统。这种组织方式,便于编译程序的移植,若要将编译程序移植到不同类型的机器,只需要修改编译程序的后端即可。本讲稿第二十一页,共三十五页v编译程序还采用“分遍”的形式,即编译过程可以由一遍或多遍编译程序来完成。对于源程序或中间代码,从头到尾扫描一次并完成所规定的工作称为一遍。在一遍中,可以完成一个或相连几个逻辑步骤的工作。例如可以把词法分析作为第一遍;语法分析和语义分析作为第二遍;代码优化和存储分配作为第三遍;代码生成作为第四遍;从而构成一个四遍扫描的编译程序。本讲稿第二十二页,共三十五页词法分析器语法分析器语义分析器中间代码生成器中间代码的优化目标代码生
10、成器源程序表格管理出错处理目标程序图1-3编译程序结构示意图本讲稿第二十三页,共三十五页1.3编译程序的设计技术v编译程序的任务是把源程序翻译成某台计算机上的目标程序。因此编程人员首先要熟悉源程序语言,对源程序语言的语法和语义要准确无误的理解,同时要确定开发方案。同时还要选择合适的语言编写编译程序,目前一般采用PASCAL、C、ADA等高级语言编写,不仅减少了开发的工作量,缩短了开发周期。最后,开发人员还要熟悉目标机的特点,产生质量较高的目标代码。本讲稿第二十四页,共三十五页v1高级语言的自编译技术v用某种高级语言书写自己的编译程序称为自编译。v2.交叉编译v交叉编译是指用A机器上的编译程序来
11、产生可在B机器上运行的目标代码。例如,若A机器上已有C程序可以运行,则可以用A机器上的C程序书写一个编译程序,它的源程序是C语言程序,而产生的目标程序则是基于B机器上的,即能够在B机器上执行的低级语言程序。本讲稿第二十五页,共三十五页v3编译程序的自展技术vL=LnL1L0图1-4编译系统的自展过程v自展的方法是:首先确定一个非常简单的核心语言L0,然后用机器语言或汇编语言书写它的编译程序T0;再把语言L0扩充到L1,此时有L0属于L1,并用L0编写出L1的编译程序T1,然后再把语言L1扩充为L2,此时,L1属于L2,并用L1编写L2的编译程序T2,这样不断的扩展下去,直到完成所要求的编译程序
12、为止。自展技术的使用如图1-4所示。本讲稿第二十六页,共三十五页图1-4 编译系统的自展过程本讲稿第二十七页,共三十五页v4编译程序的移植技术v编译程序可以通过移植得到,即可以将一个机器(宿主机)上的一个具有自编译性的高级语言编译程序移植到另一个机器(目标机)上。v5编译程序的自动化v在编译程序的自动化开发过程中,开发较早的是词法分析程序生成器和语法分析程序生成器。使用的工具是在UNIX 操作系统下的软件工具LEX和YACC。本讲稿第二十八页,共三十五页1.4形式语言和编译实现技术v形式语言是一种不考虑含义的符号语言,形式语言的理论研究的是组成这种符号语言的符号串集合、它们的表示法、结构和特性
13、。按Chomsky文法分类法,文法可以分成四大类,即短语结构文法、上下文有关文法、上下文无关文法和正则文法。通常的程序设计语言,其符号的定义和正则文法相关联,语法定义和上下文无关文法相关联,而语义一般需要上下文有关文法来定义。本讲稿第二十九页,共三十五页v形式语言理论采用数学那样的符号形式表示,数学那样的严格推理。采用形式语言方式讨论程序设计语言及其编译程序的构造,可以使我们不仅了解一些编译实现技术如何应用,而且还可以理解如此做的原因。v对编译程序的设计中所采用的技术,不但要知其然,而且还要知道所以然。从理论高度上去掌握编译技术。可以用下列公式来表示一种关系,即:v编译原理=形式语言理论+编译
14、技术本讲稿第三十页,共三十五页小结v自FORTRAN语言产生后,计算机高级语言得到了迅速发展。高级语言的种类越来越多。但计算机只能执行机器语言,不能直接执行高级语言编写的程序。要执行高级语言程序,必须提供该高级语言的翻译程序。翻译有编译和解释两种方式。编译程序将源程序翻译成目标程序,然后再执行目标程序。解释方式则是边翻译边执行。本讲稿第三十一页,共三十五页v编译程序一般包括词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、代码优化程序、目标代码生成程序和出错处理程序等。v编译过程可以分遍编译。编译程序的构造有多种技术。主要有自编译、移植、交叉编译、自展和自动化技术。vLEX是一个具有
15、代表性的词法分析程序生成器。YACC是一个基于LALR(1)分析法的语法分析程序生成器。本讲稿第三十二页,共三十五页习题v v1.1完成下列选择题v(1)构造编译程序应掌握 。va.源程序 b.目标语言v c.编译方法 d.以上三项都是 v(2)编译程序绝大多数时间花在 。va.出错处理 b.词法分析v c.目标代码生成 d.表格管理v(3)编译程序是对 。va.汇编语言的翻译 b.高级语言程序的解释执行v c.机器语言的执行 d.高级语言的翻译 v(4)高级语言程序设计是根据 定义的。va.词法规则 b.语法规则v c.语义规则 d.以上三项都不是。v(5)编译程序的各阶段都设及到 。va.
16、词法分析 b.表格管理v c.语法分析 d.语义分析本讲稿第三十三页,共三十五页v(6)编译程序将源程序加工成目标程序是 之间的转换。v a.词法 b.语义v c.语法 d.规则v(7)解释程序和编译程序的区别是 之间的转换。v a.是否生成中间代码 b.加工的对象不同v c.使用的实现技术不同 d.是否生成目标代码v()编译程序不能够检查、处理的错误是程序中的 。v a.静态语义错误 b.动态语义错误v c.语法错误 d.词法错误v(9)中间代码生成所依据的是语言的 。v a.词法规则 b.语法规则v c.语义规则 d.产生规则v(10)开发一个编译程序应掌握 。v a.源语言 b.目标语言v c.编译技术 d.以上三项都不是本讲稿第三十四页,共三十五页v1.2判断题v()用高级语言编写的源程序都必须通过编译,产生目标程序后才能运行。v(2)源程序和目标程序在功能上具有等价关系。v(3)高级语言程序到低级语言程序的转换是结构上的变换。v(4)解释程序虽然不产生目标代码,但是它可能产生中间代码。v(5)目标程序一定是机器语言程序。v1.3问答题v(1).计算机执行用高级语言编写的程序有那些途径?它们之间的区别是什么?v(2).画出编译程序的构造图.v(3).什么是编译程序的前端?什么是编译程序的后端?本讲稿第三十五页,共三十五页