已阅读5页,还剩48页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,编译原理compilersprinciples,学时安排上课:48学时(415周)实验:12学时(1015周),2,课程内容,第一章引论第二章形式语言概论第三章有穷自动机第四章词法分析第五章自上而下语法分析第六章自下而上分析和优先分析方法第七章自下而上的LR(k)分析方法,3,成绩:,平时实验期中考查期末考试,4,与课程有关的问题:,本课程的性质、目的和任务:编译原理是计算机类专业的专业课,目的是使学生了解并掌握编译程序的基本理论和方法,具有分析和实现编译程序的初步能力。本课程的基本要求:通过对本课程的学习,对形式语言有初步了解,对编译程序的整个结构有较清楚的了解,熟悉和掌握几种主要编译方法。课程内容的重点、深度与广度:文法和形式语言、词法分析和有穷自动机、语法分析语义分析、目标代码的生成,了解符号表的构造、存储分配与管理、代码优化和错误校正,5,第一章引论,本节内容:翻译程序为什么需要编译程序编译程序的工作过程编译程序的结构编译程序的组织方式编译程序的其它有关技术编译程序编写系统并行编译程序,6,编译程序在计算机系统中的位置,分类软件系统软件语言处理系统,7,1.1程序的翻译,1.1.1程序设计语言机器语言001110010010汇编语言addR12高级语言beginx:=9+2end问题:计算机只能识别二进制数0、1表示的指令和数构成的本计算机系统的机器语言。如何让计算机执行高级语言程序呢?,8,1.1程序的翻译,1.1.2翻译程序所谓翻译程序,是指这样一种程序,它能将用甲语言(源语言)编写的程序翻译成与之等价的用乙语言(目标语言)书写的程序。程序的翻译通常有两种方式:一是“编译”方式,二是“解释”方式。如口译和笔译,9,1.1程序的翻译,1.1.3编译方式一种分阶段进行的方式1.翻译阶段:高级语言或汇编语言源程序机器语言目标程序2.运行阶段目标程序、运行子程序、数据运行结果,10,1.1程序的翻译,3.编译方式的特点在编译方式下,源程序的执行需要分阶段。如果目标程序是机器语言程序,则源程序的执行分为两大阶段:编译阶段和运行阶段。如果目标程序是汇编语言程序,则源程序的执行分为三大阶段:编译阶段、汇编阶段和运行阶段。编译方式下,生成了目标代码,且可多次执行。,11,1.1程序的翻译,4.关于编译程序的几点说明编译程序生成的目标程序不一定是机器语言的程序,也有可能是汇编语言程序;编译程序与具体的机器和语言有关,即任何一个具体的编译程序都是某一特定类型的计算机系统中关于某一特定语言的编译程序;对编译程序而言,源程序是输入数据,目标程序是输出结果。,12,1.1程序的翻译,1.1.4解释方式完成解释工作的解释程序将按源程序中语句的动态顺序,逐句地进行分析解释,并立即予以执行,给出执行结果。执行历程为:,13,1.1程序的翻译,源程序解释执行的历程源程序(高级语言)、初始数据解释程序计算结果在解释方式下,并不生成目标代码,而是直接执行源程序本身。这是编译方式与解释方式的根本区别。,14,1.2为什么需要编译程序,编译程序具有以下特点:模块性静态解释和动态解释机器无关性语言标准化程序语言特征,15,1.3编译程序的工作过程,词法分析语法分析语义分析和中间代码生成中间代码优化目标代码生成,16,1.3编译程序的工作过程,1.3.1词法分析依据语言词法规则,分析由字符组成的源程序,把它识别为一个一个具有独立意义的最小语法单位,即“单词”,并识别出与其相关的属性(如是标识符,是界限符,还是数,等等),再转换成长度上统一的标准形式(这种统一的标准形式既刻画了单词本身,又刻画了它所具有的属性,称为属性字),以供其它部分使用。,17,词法分析,读字符流的源程序、识别单词例:position=initial+rate*60,18,词法分析,单词类型单词值标识符1(id1)position算符(赋值)=标识符2(id2)initial算符(加)+标识符3(id3)rate算符(乘)*整数60分号;,19,1.3编译程序的工作过程,1.3.2语法分析依据语法规则,逐一分析词法分析时得到的单词,把单词串分解成各类语法单位,即确定它们是怎样组成说明和语句,以及说明和语句又是怎样组成程序的。分析时如发现有不合语法规则的地方,便将出错的位置及出错性质打印报告给程序员;如无语法错误,则用另一种中间形式给出正确的语法结构,供下一阶段分析使用。,20,语法分析,功能:层次分析,把源程序的单词序列组成语法短语(表示成语法树).例:=“=”:=“+”:=“*”:=“(”“)”:=:=:=,21,赋值语句,标识符,表达式,表达式,+,表达式,表达式,整数,实数,标识符,=,表达式,*,22,语法分析id1=id2+id3*N,23,1.3编译程序的工作过程,1.3.3语义分析依据语言的语义规则对语法分析得到的语法结构进行静态语义检查(确定类型、类型和运算合法性检查、识别含义与相应的语义处理及其它一些静态语义检查),并用另一种内部形式表示出来,或者直接用目标语言表示出来。凡在编译时可以确定的内容称为“静态”的;凡必须推迟到程序运行时才能确定的内容称为“动态”的。,24,语义分析,语义审查(静态语义)上下文相关性类型匹配类型转换,例:Programp();Varrate:real;procedureinitial;position:=initial+rate*60/*error*/*error*/*warning*/;,25,Programp();Varrate:real;Varinitial:real;Varposition:real;position:=initial+rate*60,26,语义分析,27,中间代码生成,源程序的内部(中间)表示逆波兰式、三元式、四元式、树型表示逆波兰式也是后缀表达式2-34+5234-5+优势在于只用两种简单操作,入栈和出栈就可以搞定任何普通表达式的运算运算方式如下:如果当前字符为变量或者为数字,则压栈,如果是运算符,则将栈顶两个元素弹出作相应运算,结果再入栈,最后当表达式扫描完后,栈里的就是结果。,28,中间代码生成,id1=id2+id3*60(1)(inttoreal,60-t1)(2)(*,id3t1t2)(3)(+,id2t2t3)(4)(=,t3-id1),29,1.3编译程序的工作过程,1.3.4代码优化依据程序的等价变换规则,尽量压缩目标程序运行所需的时间和所占的存储空间,以提高目标程序的质量。,30,代码优化,id1=id2+id3*60(1)(inttoreal60-t1)(2)(*id3t1t2)(3)(+id2t2t3)(4)(:=t3-id1)变换(1)(*id360.0t1)(2)(+id2t1id1),31,1.3编译程序的工作过程,1.3.5代码生成如果语义分析时把源程序表示成中间形式而不是表示成目标指令,则由本部分完成从中间形式到目标指令的转换。如果语义分析时,已直接生成目标指令,则无需另外再做代码生成工作。目标指令可能是绝对指令代码,或可重新定位的指令代码或汇编指令代码。该阶段的工作有赖于硬件系统结构和机器指令含义。,32,目标代码生成,(*,id360.0t1)(+,id2t1id1),movfid3,R2mulf#60.0,R2movfid2,R1addfR2,R1movfR1,id1,33,1.3编译程序的工作过程,1.3.6表格管理登记源程序中出现的每个名字以及名字的各种属性。有些名字的属性需要在各个阶段才能填入。,34,符号表管理,记录源程序中使用的名字收集每个名字的各种属性信息类型、作用域、分配存储信息,Const1常量值:35Var1变量类型:实层次:2,35,1.3编译程序的工作过程,1.3.7出错处理源程序中的错误有语法错误和语义错误两种。1.语法错误:源程序中不符合语法(或词法)规则的错误,它们可在词法分析或语法分析时检测出来。2.语义错误:源程序中不符合语义规则的错误,一般在语义分析时检测出来,有的语义错误要在运行时才能检测出来。通常包括:说明错误、作用域错误、类型不一致等等,36,出错处理,检查错误、报告出错信息、排错、恢复编译工作,37,1.4编译程序的结构,38,1.4编译程序的结构,39,1.4编译程序的结构,1.4.1遍(趟,趟程)所谓一趟或一遍是指一个编译程序在编译时刻把源程序或源程序的等价物(中间程序)从头到尾扫描一遍并转换成另一紧邻的等价物的全过程。根据编译程序在完成翻译任务的过程中需要对源程序或其中间等价物扫描的遍数,可以把编译程序分为单遍扫描的编译程序(只需扫描一遍)和多遍扫描的编译程序(需扫描多遍)。,40,单遍扫描的编译程序,41,1.4编译程序的结构,1.4.2编译的前端和后端前端主要由与源语言有关但与目标机器无关的那些部分组成,如词法分析、语法分析、语义分析与中间代码生成及部分代码优化工作。后端主要包括编译中与目标机器有关的那些部分,如与目标机有关的代码优化和目标代码生成等。后端不依赖于源语言而仅依赖于中间语言。可以通过改变编译程序的后端来实现编译程序的移植。,42,1.5编译程序的组织方式,课本图1.7Page10,43,1.6编译程序的其它有关技术,1.6.1高级语言的自展技术构造编译程序可以用机器言语、汇编语言和高级语言。高级语言的自编译性:一个语言可以用来编写自己的编译程序。,44,1.6编译程序的其它有关技术,1.6.1编译的自展技术通过一系列自展途径而形成编译程序的过程。先对语言的核心部分构造一个小小编译程序(可用低级语言实现),再以它为工具构造一个能够编译更多语言成分的较大编译程序。如此扩展下去,越滚越大,最后形成所期望的整个编译程序。滚雪球!课本图1.8Page10,45,1.6编译程序的其它有关技术,1.6.2编译的移植技术将一个机器(宿主机)上的一个具有自编译性的高级语言编译程序移植到另一个机器(目标机)上。利用A机器上的高级语言L编写能在B机器上运行的高级语言L的编译程序。如下图:,46,1.6编译程序的其它有关技术,1.6.2编译的移植技术将一个机器(宿主机)上的一个具有自编译性的高级语言编译程序移植到另一个机器(目标机)上。利用A机器上的高级语言L编写能在B机器上运行的高级语言L的编译程序。,47,1.6编译程序的其它有关技术,1.6.3编译程序自动化1.词法分析生成器如:LEX(接受正规表达式)2.语法分析生成器如:YACC(接受LALR(1)文法)课本图1.9图1.10Page12,48,1.6编译程序的其它有关技术,1.6.4程序的可再入性程序执行过程中,可以随时中断其执行进程,也可随时从中断点恢复原来的执行进程;中断期间也可运行新的执行进程。满足可再入性的三个要求:课本P121.“纯代码”2.不同进程具有不同数据区3.保存和恢复寄存器的值,49,1.7翻译程序编写系统,翻译程序编写系统TWS(TranslatorWritingSystem)TWS可分为三类自动产生编译程序的“编译程序的编译程序”面向语法的符号加工程序可扩充语言组成
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025城市公寓买卖合同范本
- 2025年劳动合同续签申请书
- 2025防火门购销合同范本
- 拓展培训项目管理考试题库
- 三类人员安全考试题库c及答案解析
- 化工厂安全设施题库及答案解析
- 2025年版提前解除劳动合同协议书模板
- 消防控制室值班操作员绩效考核指标及评分标准高级篇
- 2025汽车买卖合同范文模板
- 房地产置业顾问法律法规考试题及解析
- 第01讲 赏析小说形象(知识清单)(全国通.用)解析版-2026年高考语文一轮复习讲练测
- 2025年疾控三基考试试题及答案
- 2025年度全国少先队知识测试题(含答案)
- GB/T 2672-2017内六角花形盘头螺钉
- GB/T 25643-2010道路施工与养护机械设备路面铣刨机
- GB/T 15670.23-2017农药登记毒理学试验方法第23部分:致畸试验
- GB 17498.6-2008固定式健身器材第6部分:跑步机附加的特殊安全要求和试验方法
- JC∕T 2647-2021 预拌混凝土生产企业废水回收利用规范
- 中学生常见心理问题的识别与简单干预课件
- 1173 缩短变电站二次设备屏安全措施布置时间(变电管理二所北郊QC小组)-现场型- 获奖QC 成果发布
- 学校值日班长记录表、卫生值日表
评论
0/150
提交评论