2023年编译原理课程精品讲义.pdf
《2023年编译原理课程精品讲义.pdf》由会员分享,可在线阅读,更多相关《2023年编译原理课程精品讲义.pdf(64页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、学习好资料 欢迎下载 第 1 章 引论 本章内容 什么是编译 编译过程概述 编译阶段的组合:通过描述编译器的各个阶段来介绍编译这个课题 11 什么是编译程序?一、程序设计语言的基础知识 1、程序:一系列指令或语句,用来描述计算机依次要执行的一系列工作。2、结构:基本符号(字母、数字、符号等)、单词(符号)、量(语法单位)、表达式、语句、分程序、程序 3、程序设计语言的定义(指高级程序设计语言)分语法、语义和语用三部分。语法是描述程序的结构,根据它可以产生正确的程序。(词法规则、语法规则)语义是语言成分的含义,由程序执行的效果来说明。语用是语言的实际应用。如:x:=a+b*c 二、什么是翻译程序
2、?翻译程序指的是这样一个程序,它能够把某一种语言程序(源语言程序)改造成另一种语言程序(目标语言程序),而两者在逻辑上是等价的。三、程序设计语言的转换 编译程序 源语言是高级语言,目标语言是机器语言/汇编语言,则翻译程序称为编译程序。汇编程序 源语言是汇编语言,目标语言是机器语言,则翻译程序称为汇编程序。解释程序 解释程序是另一类翻译程序,它同时处理源程序和数据,对源程序解释执行而不生成目标程序。四、编译过程可分为两个阶段或三个阶段:1、编译执行:按编译方式在计算机上执行用高级语言编写的程序,需经过两个阶段:编译阶段,把源程序翻译为目标程序;运行阶段,真正执行此目标程序。优点:只需分析与翻译源
3、程序一次,不必重新翻译。学习好资料 欢迎下载 缺点:目标程序在运行中发现的错误,只要来源于源程序,必须在源程序中找错。2、解释执行:源程序的每个语句一经解释就立即执行。优点:与用户通信方便。缺点:效率很低。12 编译过程和编译程序的结构 如:一、编译程序的组织 编译程序从输入源程序到输出目标程序,可由五部分来组成:二、编译程序的各个部分 1、词法分析 输入源程序,对构成源程序的字符串从左到右一个字符一个字符地进行扫描和分解,依据词法规则(或构词规则)识别出一个个的单词(单词符号或符号),转换成机器容易识别的内码形式。内码用二元式(种别码,属性值)表示。输入:字符串 输出:(种别码,属性值)序对
4、 属性值单词的机内表示 是最初级的语法分析 单词种类:(1)一类是特殊的单词,如保留字、运算符、分界符等,这些都是源语言所提供的;(2)另一类是普通单词,如用户在源程序中定义的标识符、常数等。例如:程序段 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)界限符;系列工作结构基本符号字母数字符号等单词符号量语法单位表达式语句成分的含义由程
5、序执行的效果来说明语用是语言的实际应用如二什么是编译程序源语言是高级语言目标语言是机器语言汇编语言则翻译程序称学习好资料 欢迎下载 3、语法分析 根据语言的语法规则(文法规则),把单词符号串组成各类语法单位(语法范畴),如:表达式、语句、分程序、程序 输入:单词序列 输出:语法单位 语法规则写成 Backus-Naur-Form(BNF)式,形式如下:A:=B|C 或 A?B|C 语法分析有两种方法:推导(Derive)和归约(Reduce)语法分析对说明语句填写符号表,一般语句构造语法树 例如:赋值语句 a=b+c*10 经语法分析生成语法树 赋值语句 a=b+c*10 语法树的另一种形式
6、4、语义分析 语义:程序的“意思”。任务:1.分析语法成分的含义和用途,2.应进行的运算和操作,3.同时进行相应的语义检查。如:在说明语句中是否有矛盾的类型说明。表达式中,类型不匹配。过程调用中,实参和形参的配合。依据:语义规则。赋值语句 a=b+c*10 经语义分析生成语法树(考虑类型问题:a,b,c 为实型)系列工作结构基本符号字母数字符号等单词符号量语法单位表达式语句成分的含义由程序执行的效果来说明语用是语言的实际应用如二什么是编译程序源语言是高级语言目标语言是机器语言汇编语言则翻译程序称学习好资料 欢迎下载 中间代码生成 根据语义规则产生一种介于源语言与目标代码之间的一种中间代码。中间
7、代码是不依赖于机器但是又便于生成依赖于机器的目标代码的一种结构简单、含义明确的记号系统。中间代码常用四元式来表示:中间代码的特点:简单规范、机器无关、易于优化与转换。例 a=b+c*10 5、代码优化 对前阶段产生的中间代码进行加工变换,以期在最后阶段能产生更为高效(省时间和空间)的目标代码。主要依据是等价变换规则 优化主要包括:删除公共子表达式、合并已知量、删除无用赋值、循环优化、算符规约等等 例.赋值语句 a:=b+c*10 优化 6、目标代码生成。把中间代码变换成指定机器上的绝对指令代码或可重新定位的指令代码或汇编指令代码。与硬件系统功能部件的运用,机器指令的选择,各种数据类型变量的存储
8、空间分配,寄存器和后缓寄存器的调度等等有很大的关系。系列工作结构基本符号字母数字符号等单词符号量语法单位表达式语句成分的含义由程序执行的效果来说明语用是语言的实际应用如二什么是编译程序源语言是高级语言目标语言是机器语言汇编语言则翻译程序称学习好资料 欢迎下载 7、表格与表格管理。编译程序在工作过程中需要保持系列的表格,用以登记源程序的各类信息和编译各阶段的进展状况。合理的设计和使用表格式编译程序构造的一个重要问题。与编译的头三个阶段有关的表格有:符号表、常数表、标号表、分程序入口表、中间代码表、过程引用表、循环特征表、等价名表、公用链表、格式表。表格的结构大体如下:8、出错处理 错误可发生在编
9、译的各个阶段,错误处理也是贯穿编译全过程。词法:拼写 语法:语句结构、表达式结构 语义:类型不匹配 在编译时查出的,叫 Comple-time error,在运行时表现才表现出来的错误叫 Run-time error。13 编译阶段的组合 前端包括编译逻辑结构中的分析部分,即词法分析、语法分析、语义分析和中间代码生成,除此还包括符号表建造及相应分析中的错误处理以及与机器无关的优化部分。后端包括与目标机有关的部分,即综合部分,它包括目标代码生成及生成期间对符号表的相应检索操作和错误处理操作,以及与机器相关的代码优化部分。将编译系统划分为前后端,有利于移植编译系统和利用后端为同一目标机配置不同语言
10、的编译系统。遍(Pass)对源程序(或其中间形式)从头至尾扫描一次并进行有关加工处理,生成新的中间形式或最终目标程序,称为一遍。系列工作结构基本符号字母数字符号等单词符号量语法单位表达式语句成分的含义由程序执行的效果来说明语用是语言的实际应用如二什么是编译程序源语言是高级语言目标语言是机器语言汇编语言则翻译程序称学习好资料 欢迎下载 分遍原则 目标质量高低(高则多遍)。机器内存大小(小则多遍)。源语言简繁(繁则多遍)。设计人员多少(多则多遍)。把前端组织成一遍扫描:把前端组织成多遍扫描:(多遍:上一遍的输出是下一遍的输入。)设计编译程序应首先研究的问题:要在某机器上为某种语言构造一个编译程序,
11、必须掌握下面的内容:1、源语言:语法、语义。2、目标语言:对于机器指令,搞清硬件的系统结构和OS 的功能。3、编译方法:必须掌握一二种。4、语言选择:编制程序。编译程序的伙伴:系列工作结构基本符号字母数字符号等单词符号量语法单位表达式语句成分的含义由程序执行的效果来说明语用是语言的实际应用如二什么是编译程序源语言是高级语言目标语言是机器语言汇编语言则翻译程序称学习好资料 欢迎下载 预处理器 产生编译程序的输入,在真正的编译开始之前由编译程序调用的程序。它可以完成以下的任务:1.宏处理(宏扩展):预处理器允许用户使用宏定义,它们是一些较长结构的缩写。宏处理处理两类语句宏定义和宏调用 2.文件包含
12、:预处理器可以把文件的包含声明扩展为程序正文。例如,当处理的文件有语句include 时,C 语言的,预处理器会用文件来代替这个语句。3.汇编程序 将汇编语言源程序,翻译为机器语言的目标程序的翻译程序称为汇编程序。4.装配程序和连接程序 将分别在不同的目标文件中编译或汇编的代码收集到一个可执行的文件中。完成连接目标程序和用于标准库函数程序的代码,以及连接目标程序和由计算机的操作系统提供的资源(如存储分配程序及输入与输出设备)。14 构造编译程序的工具 1.扫描仪的生成器:自动生成词法分析器,通常是基于正规式说明,生成的词法分析器的基本组织形式实际上是有限自动机。如:LEX 2.分析器的生成器:
13、生成语法分析器,通常是基于上下文无关文法。如:YACC 3.语法制导的翻译工具:产生一些子程序,这些子程序遍历分析树,产生中间代码。4.自动的代码生成器:需要一个规则集合,这些规则定义中间语言的每个操作到目标语言的翻译。这些规则必须足够详细。5.数据流工具:它收集值是怎样从程序的一点传到其它部分。编译技术在软件工程中的应用 系列工作结构基本符号字母数字符号等单词符号量语法单位表达式语句成分的含义由程序执行的效果来说明语用是语言的实际应用如二什么是编译程序源语言是高级语言目标语言是机器语言汇编语言则翻译程序称学习好资料 欢迎下载 语法制导的结构化编辑器:除了通常的正文编辑和修改功能外,还能对源程
14、序进行语法分析。程序格式化工具:用更加清晰可读的格式排版程序,如缩进,格式,注释使用专门字体等。程序理解工具:对程序进行分析,确定模块间的调用关系,程序数据的静态属性和结构属性,变量的交叉引用,程序的控制流程图等,以帮助用户理解程序。编译技术在软件工程中的应用 软件测试工具 包括静态分析器和动态结构测试器。静态分析器不运行程序而对程序中的潜在错误和异常进行检查。动态分析器用一组测试数据实际执行程序,记录并分析执行路径,再与预期结果进行比较,以发现程序中的异常。高级语言的翻译工具 一种高级语言译为另一种高级语言 数据库系统查询 脚本语言 置标语言(HTML.XML)第 1 章 小结 内容 1 什
15、么是编译程序 2 编译过程和编译程序的结构 3 为什么要学习编译程序(应用)本章没有难以理解的内容,重点对编译程序的功能和结构做一综述,要说难点的话可能是:了解编译程序各个成分在编译阶段的逻辑关系以及他们怎样作为一个整体完成编译任务的。第 2 章 文法和语言 课程内容 字母表与符号串 文法与语言的关系 文法的概念 文法与语言的形式定义 文法构造与文法简化 由语言构造文法的例子 文法的简化 语法树与文法的二义性文法的概念 学习的目的 构造编译程序的算法是从研究源程序及目标程序产生的,首先找到源语言的形式描述,根据这种描述,构造出相应的分析加工程序。语言分语法,语义和语用。程序语言语法的形式描述是
16、很好用的,语义的形式描述不那么好用,但它推动语言理论的发展。21 符号和符号串 一、字母表 系列工作结构基本符号字母数字符号等单词符号量语法单位表达式语句成分的含义由程序执行的效果来说明语用是语言的实际应用如二什么是编译程序源语言是高级语言目标语言是机器语言汇编语言则翻译程序称学习好资料 欢迎下载 字母表是符号的非空有穷集合。任何程序语言都有自己的字母表,例如:1.机器语言:由符号“0”和“1”组成的字母表,=0,1 2.ASCII 字符集;3.汉语的字母表中包括汉字、数字及标点符号 4.C 字母表为:=AZ,az,09,+,-,*,/,:,;,.,,(,),二、符号串 1.符号 一个抽象实体
17、,我们不再形式地定义它(就象几何中的”点”一样).例如字母是符号,数字也是符号 2.符号串 由字母表中的符号所组成的的任何有穷序列被称之为该字母表上的符号串,也称作“字”或“句子”。(1)不包含任何符号的符号串,称为空符号串简称空串,记为。(2)若=a,b 则 a,b,ab,ba,abb,baa.是上的符号串。在符号串中,符号的顺序是很重要的,符号串 ab 就不同于 ba,abca 和 aabc 也不同。3.术语 设 z 是符号串 长度:是该符号串中的符号的数目。例如|aab|=3,|=0。前缀(头):删去 z 尾部的若干个(包括 0 个)符号所得的。表示:z=x 后缀(尾):删去 z 头部的
18、若干个(包括 0 个)符号所得的。表示:z=x 真前缀(固有头)x,真后缀(固有尾)x:x z 子串:从 z 中删去一个前缀和一个后缀 逆转(用 z 表示):将 z 中的符号按相反次序写出而得到的符号串。例:符号串 z=banana 长度:banana=6 前缀:e,b,ba,ban,bana,banan,banana 真前缀:e,b,ba,ban,bana,banan 后缀:banana,anana,nana,ana,na,a,e 真后缀:anana,nana,ana,na,a,e 子串:banana,anana,banan,anan,e 逆转(用 z 表示):ananab 三.符号串的运算
19、 1.连接:设 x 和 y 是符号串,它们的连接 xy 是把 y 的符号写在 x 的符号之后得到的符号串。例如,x=ba,y=nana,xy=banana x=x=x 2.方幂:符号串 x 自身连接 n 次得到的。x0=e;x1=x;x2=xx;xn=xn-1x=xxn-1;例如,x=ba,x1=ba,x2=baba,x3=bababa,xn=(ba)n 四.符号串集合(语言)的运算 定义:集合中的一切元素都是某字母表上的符号串。系列工作结构基本符号字母数字符号等单词符号量语法单位表达式语句成分的含义由程序执行的效果来说明语用是语言的实际应用如二什么是编译程序源语言是高级语言目标语言是机器语言
20、汇编语言则翻译程序称学习好资料 欢迎下载 设 A 和 B 是两个符号串集合,则 1.乘积(连接):AB xy|x A and y B A=ab,bcB=ac,cbAB=abac,abcb,bcac,bccb 2.合并:ABx|x A or x B AB=ab,bc,ac,cb 3.空集:f fA=Af=f 4.方幂:符号串集合的自身乘积。A0=,A1A,A2AA,.,An An-1AAAn-1 A=a,b A0=,A1A=a,b,A2AA=aa,ab,ba,bb A3A2A=AA2=aaa,aab,aba,abb,5.集合 A 的 Kleene 闭包(星闭包),记作 A*,字母表 A 的各次方
21、幂之并。其含义是由 A 上符号组成的所有串的集合(包括空串)A*Ai(i=0)=A0 A1A2A3 A=a,b A*,a,b,aa,ab,ba,bb,aaa,aab,aba,abb,6集合 A 的正闭包,记作 A+,其含义是由字母表 A 上的符号组成的所有串(不包括空串)的集合。A+Ai(i=1)=A1 A2A3A4 A=a,b A+a,b,aa,ab,ba,bb,aaa,aab,aba,abb,A*A0 A+A+=AA*A*A n 语言是由句子组成的集合,是由一组符号所构成的集合。换言之,字母表 S 上的一个语言是 S 上的一些符号串的集合(字母表 S 上的每个语言是 S*的一个子集)。例如
22、:字母表=a,b *=,a,b,aa,ab,ba,bb,aaa,aab,集合ab,aabb,aaabbb,anbn,或表示为w|w*且 w=anbn,n1 字母表 S 上的一个语言。集合a,aa,aaa,或表示为w|w*且 w=an,n1 字母表 S 上的一个语言。是一个语言。F 即 是一个语言。给出语言上的有关运算 设 L 是(S 上的)一个语言,M 是(S 上的)一个语言,语言 L 和 M 的并,交,差,补是一个语言。语言 L 和 M 的并为 L M:LM=w|wL 或 w M 如:L1=a,b,y,z M1=1,2 8,9 L1 M1=a,b,y,z,1,28,9 语言 L 和 M 的连
23、接为 LM:LM=st|s L 且 tM 如:L1M1=a1,b1,y1,z1,a2,b2a9z9 有 L =L=L。系列工作结构基本符号字母数字符号等单词符号量语法单位表达式语句成分的含义由程序执行的效果来说明语用是语言的实际应用如二什么是编译程序源语言是高级语言目标语言是机器语言汇编语言则翻译程序称学习好资料 欢迎下载 L 的 n 次连接 Ln=LL.L 如:L12=aa,ab,az,ba,bb,bz,za,zbzz 语言 L 的闭包记为 L*,L*=L0 L1 L2 .L0=,Ln=L Ln-1=Ln-1 L,n 1 语言 L 的正闭包记为 L+,L+=L1 L2 L3.L+=LL*=L
24、*L L*=L+如:L1=a,b,y,z M1=1,2 8,9 (L1 M1)=a,b,y,z,1,28,9 (L1 M1)*=a,b,y,z,1,28,9,aa,1a,xyz,6789st.L1(L1 M1)*=所有字母打头的字母和数字符号串 如何来描述一种语言?(1)枚举法 例:1,11,111,1111 (2)自然语言 (3)省略表示法 例:1,11,111,(4)描述法 例:1i|i0 例如:L=AZ,az D=09 1LD 是由所有一个字母后跟一个数字组成的符号串所构成的集合。2LD=AZ,az,09 3L4 是由所有的四个字母的符号串构成的集合。4L(LD)*是由所有的字母打头的字
25、母和数字组成的符号串所构成的集合。5D+是由所有长度大于等于 1 的数字串所构成的集合。如果语言是无穷的,找出语言的有穷表示。语言的有穷表示有两个途经:-生成方式(文法):语言中的每个句子可以用严格定义的规则来构造。-识别方式(自动机):用一个过程,当输入的一任意串属于语言时,该过程经有限次计算后就会停止并回答“是”,若不属于,要么能停止并回答“不是”,(要么永远继续下去。)文法即是生成方式描述语言的:语言中的每个句子可以用严格定义的规则来构造。22 文法的类型 乔姆斯基(Chomsky)将文法 G=(VN,VT,P,S)分成四种类型:0 型、1 型、2 型、3 型 逐渐对产生式施加限制 0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2023 编译 原理 课程 精品 讲义
限制150内