教学课件:《编译原理》.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《教学课件:《编译原理》.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译原理 教学 课件 编译 原理
- 资源描述:
-
1、编译原理第一章 编译概述 编译器和解释器编译器和解释器 编译器的功能分解和组织结构编译器的功能分解和组织结构 编译器的伙伴程序编译器的伙伴程序 编译器的实现途径编译器的实现途径 编译技术的作用编译技术的作用1.编译器和解释器编译器和解释器程序设计语言的历史程序设计语言的历史 机器语言机器语言:能够被计算机的硬件系统直 接执行的指令程序。汇编语言:将硬件指令用一些助记符表 示。如ADD表示加法操作,SUB表示减法操作等等 高级语言:使用便于理解的自然语言。1.编译器和解释器编译器和解释器翻译程序翻译程序(器器):接受某种语言的源语言程序后,:接受某种语言的源语言程序后,将它改造成另一种逻辑上等价
2、的目标语言程序。将它改造成另一种逻辑上等价的目标语言程序。l汇编程序汇编程序:源语言为汇编语言,目标语言为机器语:源语言为汇编语言,目标语言为机器语言的翻译程序。言的翻译程序。l编译程序(器)编译程序(器):源语言为高级语言,目标语言是:源语言为高级语言,目标语言是低级语言(汇编或机器语言)的翻译程序。低级语言(汇编或机器语言)的翻译程序。高级语言程序(源程序)低级语言程序(目标程序)编译程序(器)1.编译器和解释器编译器和解释器解释程序解释程序(器器):是语言的另一种实现方式。接受所输入的用程序语言(源语言)编写的程序(源程序),然后直接解释执行源程序。相当于源程序的抽象执行机。解释程序(器
3、)高级语言程序(源程序)数据计算结果1.编译器和解释器编译器和解释器编译器和解释器的比较编译器和解释器的比较编译器编译器解释器解释器程序规模程序规模规模较大规模较大中小规模中小规模内部形式内部形式机器代码机器代码(低级低级)数据结构数据结构(高级高级)运行机构运行机构硬件硬件CPU软件系统软件系统运行速度运行速度相对较快相对较快相对较慢相对较慢2.编译器的功能分解和组织结构编译器的功能分解和组织结构表 处 理 错 误 处 理 目标代码生成中间代码优化中间代码生成语义分析语法分析词法分析目标程序源程序2.编译器的功能分解和组织结构编译器的功能分解和组织结构 编译器的前端:编译器的前端:一般包括词
4、法分析、语法分析、一般包括词法分析、语法分析、符号表构造、语义分析、中间代码生成、代码优符号表构造、语义分析、中间代码生成、代码优化和错误处理等。此部分工作的特点是不依赖于化和错误处理等。此部分工作的特点是不依赖于具体机器。具体机器。编译器的后端编译器的后端:主要是指中间代码到目标代码生:主要是指中间代码到目标代码生成的阶段。此部分紧密地依赖于中间代码和目标成的阶段。此部分紧密地依赖于中间代码和目标机机 遍遍:对源程序或源程序的中间表示形式从头到尾:对源程序或源程序的中间表示形式从头到尾扫描一次,生成新的中间结果或目标程序扫描一次,生成新的中间结果或目标程序3.编译器的伙伴程序编译器的伙伴程序
5、编辑器编辑器(editor)除一般的文本编辑功能外,还除一般的文本编辑功能外,还可以对正在编辑的文本进行分析、提示、自动可以对正在编辑的文本进行分析、提示、自动提供关键字匹配等功能。提供关键字匹配等功能。预处理器预处理器(preprocessor)删除源程序中的注释、删除源程序中的注释、执行宏替换以及包含文件的嵌入等。执行宏替换以及包含文件的嵌入等。连接程序连接程序(linker)将不同的目标文件连接到一将不同的目标文件连接到一个可执行的文件中。个可执行的文件中。装入程序装入程序(loader)将程序加载到内存中,以便将程序加载到内存中,以便执行。执行。调试程序调试程序(debugger)在被
6、编译的程序中判定执在被编译的程序中判定执行错误的程序行错误的程序需预处理的源程序预处理器源程序编译程序目标汇编程序汇编程序可重定位的目标代码连接/装配程序绝对目标代码高级语言程序到可执行代码的转换过程4.编译器的实现途径 预处理方法预处理方法用于语言的扩充。设已有L语言的编译器,其扩充语言L1的编译器可通过语言转换程序将L1程序转换为L程序,利用L的编译器,从而实现L1的编译器。移植法移植法 同一语言的编译器在同一语言的编译器在不同机器间的移植。方法:a a 目标代码的转换目标代码的转换 b b 修改中间代码到目标代码的转换修改中间代码到目标代码的转换 自展法自展法 自我扩展,自己编写自己的编
7、译器。工具法工具法 利用编译阶段各个部分的自动生成工具自动生成。理论法理论法 利用形式化描述理论,实现自动化。5.编译技术的作用 理解语言,编写出高效的代码理解语言,编写出高效的代码 灵活设计实现自定义语言灵活设计实现自定义语言 提高软件设计技术提高软件设计技术 应用于涉及元级操作的实现应用于涉及元级操作的实现 其它领域其它领域第二章 一个微小的编译器z 小语言小语言ToyLToyL的定义的定义z ToyLToyL语言词法分析器语言词法分析器z ToyLToyL语言语法分析器语言语法分析器z ToyLToyL语言解释器语言解释器z ToyLToyL语言编译器语言编译器1.小语言ToyL的定义
8、Prog:=begin SL end SL :=S|S;SL S :=id:=E|write(E)|read(id):=E|write(E)|read(id)E :=U|U+E|U U|U+E|U*E E U :=id|num id|num 程序例:程序例:beginbegin x1:=0.5;x1:=0.5;z1:=x1+55;z1:=x1+55;write(z1+5.5);write(z1+5.5);read(x1);read(x1);z1:=z1+x1 z1:=z1+x1 endend1.小语言ToyL的定义2.ToyL语言词法分析器语言词法分析器 任务:从程序文本中分离出单词,并确任务
9、:从程序文本中分离出单词,并确定其类别定其类别 ToyL语言单词的种类:语言单词的种类:整数:整数:numnum 变量:变量:idid 保留字:保留字:begin,end,read,write,begin,end,read,write,运算符:运算符:+,*,:=:=格式符:空格,回车,换行,文件结束符格式符:空格,回车,换行,文件结束符EOFEOF 分隔符:分隔符:(,),;(,),;2.ToyL语言词法分析器语言词法分析器 单词的内部表示单词的内部表示Token:(class,seman)begin:(BEGIN,“begin”)end:(END,“end”)read:(READ,”rea
10、d”)write:(WRITE,“write”)num:(NUM,digit(num)id:(ID,name(id)+:(PLUS,“+”)*:(MULT,“*”):=:(ASSIG,“:=”)(:(OPEN,“(”):(CLOSE,“)”);:(SEMI,“;”)eof:(EOF,“0”)2.ToyL语言词法分析器语言词法分析器 词法分析过程:词法分析过程:读当前字符流,直至文件结束。如果是:读当前字符流,直至文件结束。如果是:(1)标识符时判断是保留字还是变量标识标识符时判断是保留字还是变量标识 符,构造符,构造Token表示表示 (2)数字时判断是整型还是实型,构造数字时判断是整型还是实
11、型,构造 Token表示表示 (3)构造其它合法的符号的构造其它合法的符号的Token表示表示 (4)遇到非法符号则报错。遇到非法符号则报错。2.ToyL语言词法分析器语言词法分析器假设有ToyL语言程序文本:begin x:=10;read(y);x:=x+y end则经过词法分析后的Token表示如下。01(BEGIN,begin)09(CLOSE,)02(IDEN,x)10(SEMI,;)03(ASS,:=)11(IDEN,x)04(NUMB,10)12(ASS,:=)05(SEMI,;)13(IDEN,x)06(READ,read)14(PLUS,+)07(OPEN,()15(IDEN
12、,y)08(IDEN,y)16(END,end)3.ToyL语言语法分析器语言语法分析器 任务:检查源程序是否是合法的单词序列,若任务:检查源程序是否是合法的单词序列,若有错误,则指出错误的位置和性质。有错误,则指出错误的位置和性质。构造语法构造语法短语的表示形式(语法树)短语的表示形式(语法树)输入:是词法分析后所得的输入:是词法分析后所得的TokenToken序列。序列。说明:语法分析只用到单词的说明:语法分析只用到单词的TokenToken表示,并表示,并不改变单词的不改变单词的TokenToken表示。表示。3.ToyL语言语法分析器语言语法分析器 三个函数:三个函数:next_tok
13、en(tk)、token(CLASS)、back_token()只读而不检查的只读而不检查的Token函数函数next_token(tk)读并检查的读并检查的Token 函数函数token(CLASS)将程序文件的指针倒退到已读单词的第一字符将程序文件的指针倒退到已读单词的第一字符位置上的回溯函数位置上的回溯函数back_token()。为了能倒退。为了能倒退到已读单词的位置上,每当读新单词时,把当到已读单词的位置上,每当读新单词时,把当前单词的文件位置保存到前单词的文件位置保存到old_fp中。中。3.ToyL语言语法分析器语言语法分析器void prog_parser()token(BEG
14、IN);while(tk.class!=END)next_token(tk);switch(tk.class)case READ:token(OPEN);token(IDEN);token(CLOSE);break;case WRITE:token(OPEN);expr_parser();token(CLOSE);break;case IDEN:token(ASS);expr_parser();break;default:error()token(SEMI);token(END);return;3.ToyL语言语法分析器语言语法分析器 void expr_parser()1000next_to
15、ken(tk);if(tk.class!=NUMB&tk.class!=IDEN)error();2000next_token(tk);if(tk.class=PLUS|tk.class=MULT)goto 1000;3000back_token();return;4.ToyL语言解释器语言解释器 虚拟存储器:为存放变量的值需要开辟一个空间,不妨称此空间为存储器空间,或简称存储器(Memory)。它可用变量名和值的对偶表来表示。虚拟输入器:为描述read(x)语句解释执行过程,需要设置程序的输入数据所在的介质,我们称其为输入介质,或简称为虚拟输入器,并记为Inp。可用整型数组来模拟 虚拟输出器
16、:为描述Write(E)语句解释执行过程,需要设置程序的输出数据所在的介质,我们称其为输出介质,或简称为虚拟输出器,并记为Out。也用整型数组来模拟4.ToyL语言解释器语言解释器 表达式处理需要的数据结构和符号约定表达式处理需要的数据结构和符号约定 DS :DS :数据栈数据栈 OS :OS :运算符栈运算符栈 RE :RE :剩余表达式剩余表达式 Push(s,a):Push(s,a):将将a a压入栈压入栈s s Pop(s,i):Pop(s,i):从栈从栈s s中弹出中弹出i i个元素个元素无括号表达式无括号表达式求值求值算法思想算法思想 运算分量运算分量N/I N/I :push(D
17、S,N/I)运算符运算符 :L:if OStop=then push(OS,)if OStop then push(OS,)else goto L;RE=#:while OStop do DStop 表示表达式的最终值表示表达式的最终值 ProcessProcessd1=pop(DS,1);d2=pop(DS,1);op=pop(OS,1);v=d2 op d1;push(DS,v);4.ToyL语言解释器语言解释器interpreter()(一遍扫描解释器一遍扫描解释器)rp=0;op=0;pp=0;mp=-1;dsp=-1;osp=0;OS0=HEAD;token(BEGIN);while
18、(tk.class!=END)next_token(tk;switch(tk.class)case READ:token(OPEN);token(IDEN);update(tk.seman,read_num()token(CLOSE);break;case WRITE:token(OPEN);write_num(evaluate_expr();token(CLOSE);break;case IDEN:token(ASS);update(tk.seman,evaluate_expr();break;default:error()next_token(tk)5.ToyL语言编译器语言编译器 目标代
19、码功能:目标代码功能:把表达式的值计算出来,把表达式的值计算出来,并存到某临时变量,我们称此临时变量并存到某临时变量,我们称此临时变量为结果变量。为结果变量。目标代码例:目标代码例:CODE(10)CODE(10):(-,-,10,T:(-,-,10,T1 1)CODE(x):(-,-,x,T CODE(x):(-,-,x,T1 1)CODE(a+10 CODE(a+10*x):(x):(*,10,x,T,10,x,T1 1)(+,a,T (+,a,T1 1,T,T2 2)表达式代码生成中用到的数据结构和辅助函数表达式代码生成中用到的数据结构和辅助函数 DSDS同前同前 OSOS同前同前 RE
20、RE同前同前 CODECODE代码部分代码部分 格局组成格局组成:(DS,OS,RE,CODE)DS,OS,RE,CODE)初始格局:初始格局:DS,OS,CODE=,REDS,OS,CODE=,RE为初始表达式为初始表达式 终止格局:终止格局:DSDS只含一个元素(表达式的结果变量)。只含一个元素(表达式的结果变量)。OS,REOS,RE为空,为空,CODECODE为被生成的代码部分为被生成的代码部分 函数函数NewTemp:NewTemp:自定义函数,每调用一次,它将返回一自定义函数,每调用一次,它将返回一个新临时变量。个新临时变量。表达式代码生成算法思想 算法思想与表达式求值的思想基本一
21、致算法思想与表达式求值的思想基本一致 区别只在于区别只在于ProcessProcess部分部分 我们只需把我们只需把ProcessProcess中中求值求值的部分改为的部分改为代码生代码生成成部分即可部分即可:T:=NewTemp T:=NewTemp 生成代码生成代码:(,DStop-1,DStop,T),DStop-1,DStop,T),/=OStopOStop pop(DS,2)pop(DS,2)pop(OS,1)pop(OS,1)push(DS,T)push(DS,T)第三章有穷自动机与词法分析器第三章有穷自动机与词法分析器 词法分析基础词法分析基础 有穷自动机有穷自动机 正则表达式正
22、则表达式 词法分析器的设计和构造词法分析器的设计和构造1.词法分析的基础词法分析的基础 词法分析器功能:词法分析器功能:读源程序的字符序列读源程序的字符序列,逐个拼出单词逐个拼出单词,并并构造相应的内部表示构造相应的内部表示TOKEN.TOKEN.同时检查源程序同时检查源程序中的词法错误中的词法错误.引入引入TokenToken的原因:的原因:编译程序总是用某种程序语言书写的程编译程序总是用某种程序语言书写的程序,语言的操作对象只能是该语言规定的各序,语言的操作对象只能是该语言规定的各种数据。而编译程序的操作对象是程序中的种数据。而编译程序的操作对象是程序中的各种语法单位,因此,必须把它们表示
23、成某各种语法单位,因此,必须把它们表示成某种数据结构形式。种数据结构形式。词法分析器的两种形式词法分析器的两种形式CharList 独 立词法分析器语法分析TokenList 附 属词法分析器语法分析callTokenCharListv Token Token定义定义 TokenToken表示最小的语义单位表示最小的语义单位-单词的信息。即单词的信息。即 单词内部表示的数据结构形式。单词内部表示的数据结构形式。单词不是程序设计语言中的语法概念,是编译程单词不是程序设计语言中的语法概念,是编译程序中引进的一个概念。是最小的语义单位,不能序中引进的一个概念。是最小的语义单位,不能分割分割 Toke
24、nToken中需要记录有关单词的信息:中需要记录有关单词的信息:单词的标志码单词的标志码($($id,$intC,id,$intC,)标识单词的种类标识单词的种类-词法信息词法信息 单词的特征属性(标识符名,符号表地址等)单词的特征属性(标识符名,符号表地址等)-语义信息语义信息v 标识符和常量的处理标识符和常量的处理:词法信息可确定,语义信息形式的确定词法信息可确定,语义信息形式的确定:a a 语义信息的长度有限制时,直接用语义信息的长度有限制时,直接用 标识符或常量本身标识符或常量本身 b b 没有长度限制时,构造标识符或常没有长度限制时,构造标识符或常 量表,语义信息中为其在表中的地量表
25、,语义信息中为其在表中的地 址(字符串空间址(字符串空间节省存贮空间)节省存贮空间)v 保留字的处理保留字的处理:识别保留字的方法:识别保留字的方法:1.建立保留字表;顺序、散列、散列顺序建立保留字表;顺序、散列、散列顺序 2.拼写的同时进行判断拼写的同时进行判断 自动机自动机 v 运算符的处理运算符的处理:不区分,统一成一类不区分,统一成一类 区分,每个运算符为一类区分,每个运算符为一类v 空格符和制表符以及换行符的处理空格符和制表符以及换行符的处理 1.无用的空格符和制表符要删掉;无用的空格符和制表符要删掉;2.字符串内的空格不能删;字符串内的空格不能删;3.换行符不能删。用于错误定位换行
展开阅读全文