版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、编译原理,教师:张寒电子邮件:课程介绍,课程内容介绍编译程序构造的一般原理和基本实现方法。理论知识介绍:形式语言和自动机理论,语法指导的定义和属性语法,类型理论等。强调形式描述技术和对编译原理和技术的宏观理解,不要分散对并行算法的注意力,不要偏向某一种源语言或目标机器,课程简介学习的意义是要对编程语言的设计和实现有深刻的理解,并对编程语言的相关理论有一定的了解,这对宏观把握编程语言起着基础性的作用。从软件工程的角度来看,编译器是一个很好的例子,所介绍的概念和技术可以应用于一般的软件设计。大多数程序员也是简单语言的设计者,这有助于提高这些语言的设计水平。它广泛应用于软件逆向工程、程序理解和软件安
2、全。课程安排,课堂教学,72小时考试,闭卷考试,平时成绩:30%家庭作业,10%出勤/考试,20%期末考试,70%,第一章引言,(主要介绍编译器的功能、体系结构、工作过程和组织),1.1什么是编译器?编程语言是人们与计算机交流的工具。人们根据自己的意愿,用编程语言命令计算机进行运算和操作,显示信息,输出运算结果。低级语言机器语言、符号语言和汇编语言都与特定的机器相关,效率较高,但它们使用复杂、繁琐、耗时且容易出错的高级语言,如Fortran、Pascal和C,这些高级语言独立于特定的机器,可移植性好,对用户要求低,易于使用和维护。编辑和编译环节的执行,源程序、翻译程序和目标程序之间的关系,即源
3、程序是翻译程序的输入,目标程序是翻译程序的输出,还有几个概念汇编器:如果源程序是用汇编语言编写的,而翻译程序得到的程序是用机器语言表达的,那么翻译程序就叫做汇编程序,这个翻译过程就叫做“汇编”。汇编器和编译器的区别是:汇编器和编译器都是翻译程序,主要区别是处理对象不同。汇编语言由于其简单的格式与机器语言一一对应。汇编程序的翻译工作比编译程序简单得多。翻译程序:将源程序翻译成等效目标程序的程序。-解释器:一个高级语言程序被接受作为输入,被解释和执行,并且没有产生可以执行的结果目标代码。翻译与口译的比较:翻译的方式可以使它在一次翻译后运行几次。在优化上花费大量的精力是合适的。3。通过编译执行高级语
4、言程序。通过解释执行高级语言程序:编译器,源程序,目标程序,(*)。C/*。(*)。OBJ/*。编译器的主要功能是将源程序翻译成等效的目标程序。这个翻译过程通常可以分为词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成。,1.2编译过程概述,1。手动翻译要求:准确、流畅、优雅、美观,例如:翻译以下字符串:thequickbrownfoxjumpsovalazydog 1。区别词:最短的独立意义的字符串:快速的棕色狐狸跳过一条懒狗,2。识别句子的语法结构,找出主语、谓语、宾语、定冠词、形式和补语a。词属性b。短语c。主谓宾快速布朗狐狸跳过一条懒狗文章形容词名词动词介词文章形容词名
5、词短语介词短语主语谓语宾语句子,语法树,3。根据句子结构和词义翻译草稿。完善草稿5。获取最终翻译。明亮的棕色狐狸跳过一只懒惰的狗,这是流畅和朗朗上口的。棕色的狐狸跳过一只懒狗。编译阶段与手工翻译非常相似。第二,编译程序,词法分析,语法分析,中间代码生成,目标代码生成,代码优化,区分单词。形成草稿,润色草稿,最后翻译。将源程序作为有限长度的字符流,执行上述五个阶段的工作,手工翻译步骤,编译阶段,1.3编译器结构,图1.1典型的编译器框架,以及编译器的两个主要任务,一个是分析,另一个是综合。词法分析语法分析语义分析和中间代码生成代码优化目标代码生成符号表管理错误检测和处理,1。词法分析是编译过程的
6、基础,它的任务是扫描源程序,根据语言的词法规则分解和识别每个单词,并将单词翻译成相应的内部表示。单词:是语言的基本语法单位。通用语言有五类词:关键词、标识符、常量、运算符和分隔符。对于以下字符串,词法分析程序将分析和识别九个单词:x1 :=(2.00.8) * C1 123 45 67 89。2.语法分析语法分析的任务是根据语言的语法规则将单词符号串分解成各种语法单位,如表达式和句子,并检查语法的正确性。例如,对于前面提到的例子X1:=(2.00.8)* C1,我们可以根据语言赋值语句的语法来分析和识别该语句(单词串)。首先,给出语法:=。语法分析。根据语法,识别、然后识别赋值语句。在识别过程
7、中检查语法。如果有任何错误,它应该输出错误信息。例如:a=b c*d、赋值语句、标识符、=、表达式、a、表达式、标识符、表达式、*、标识符、c、表达式、标识符、d、语义分析阶段、temp1=c * d、temp2=btemp1、temp1、temp2、temp2、a=temp2、4。中间代码生成的任务是在语法和语义分析的基础上,根据语法成分的语义对其进行翻译,翻译的结果是某种中间代码形式。生成中间代码的目的是便于优化处理;移植编译器很方便(中间代码不依赖于目标计算机)。中间代码的形式是:三进制、四进制和逆波兰。例如,通过语法分析,X1:=(2.00.8)* C1被识别为赋值语句。语义分析应该首
8、先分析语义的正确性,例如,检查表达式两边的类型和赋值号是否一致。根据赋值语句的语义,生成中间代码。四进制(三地址指令)运算符左操作数和右操作数结果(1)2 . 00 . 8 t1(2)* T1C 1T 2(3):=x1T 2,其中T1和T2是编译器引入的工作单元,5代码优化,任务是处理和转换上一段中生成的中间代码,为了在最后阶段生成更高效的目标代码,程序的等效转换规则方法、公共子表达式的提取、循环优化和无用代码的删除等。例如,上述四元数中的第一个四元数用于计算常量表达式值,该值可以在编译时计算并存储在工作单元中,而无需生成用于计算的目标指令。四元公式可以优化如下:在编译时:2 . 00 . 8
9、 t1 * t1c1t 23360=x1t 2;6.目标代码生成;任务:将中间代码或优化的中间代码转换成等效的目标代码,即机器指令或汇编语言。从中间代码生成目标程序(地址指令序列)很容易。这部分工作与机器密切相关,因此应根据机器进行。做这部分工作时(注意充分利用蓄能器),也可以进行优化。7符号表管理,int a,b;浮动e,f char ch1,ch2你为什么想先解释一下?定义了变量的类型,还指定了变量在内存中的存储形式,并且可以对它们执行的操作解决了从符号地址到存储地址的映射。符号表管理是贯穿整个编译过程的工作。当编译器分析源程序时,需要记录标识符的各种属性信息;在语义分析和代码生成阶段,需
10、要搜索已建立的符号表以提取相应的属性信息。符号表是一种数据结构。每个标识符在符号表中都有一条记录、名称、标记、类型、种类、addr、id1(25)、id2(25)、b、a,例如:int a、b;符号表的接口:符号表的功能是存储字符串或语素。当一个字符串或语素被保存时,相应的标记也被保存。对符号表的操作:插入(s,t):将符号串s和标记t插入符号表,并返回指针和相应条目的查找,当词法分析器识别出标识符s时,使用查找找到符号表,如果是关键字,则返回相应的标记;如果它是一个变量名,返回令牌id,8错误检测和处理,错误可能发生在编译的所有阶段,错误处理贯穿整个编译过程。在词法分析阶段可以发现的错误,如
11、标识符的组成不符合词法规则;句子结构错误是可以在语法分析中发现的错误。在语义分析阶段也会发现错误,也就是说,结构是正确的,但是所涉及的操作没有意义或者是错误的。编译时发现的错误称为完成时错误,运行时显示的错误称为运行时错误。1.4编译器的组织,根据编译器各部分的功能,编译器分为前端和后端。前端:与源程序相关的编译部分通常称为前端。词法分析、语法分析、语义分析、中间代码生成、代码优化-分析部分功能:与源语言相关的后端:与目标机器相关的部分称为后端。目标程序生成(与目标机相关的优化)-综合功能:与目标机相关,PASS:从头到尾扫描源程序(包括源程序的中间形式),并做相关处理生成新的源程序或目标程序
12、的中间形式,通常调用一次。一次扫描编译器称为一次扫描编译器,它可以通过一次扫描完成整个编译工作。划分时间的原则是高和低(高是多次)。机器内存的大小(小是多次)。源语言简单而复杂(复杂是多次的)。有多少设计师(多是多次)优势:独立的功能;清晰的结构;有利于优化;节省空间。1.5编译器自我开发,高级语言自我编译意味着你可以用这种语言编写自己的编译器。对于具有自编译的高级语言,编译器可以通过自开发技术来构建。也就是说,首先为语言的核心部分构造一个小的编译器(可以用低级语言实现),然后用它作为工具构造一个更大的编译器,可以编译更多的语言组件,然后扩展它形成整个编译器。L0,Ln=L,在分解源程序后,用汇编语言或机器语言编译L0的编译器,然后用L0编译的编译器,用
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年安徽芜湖无为市聘用专职人民调解员2人笔试模拟试题及答案解析
- 智慧农业:现代农业技术解决方案
- 基于人工智能的现代安防技术解析
- 2025年新版北大教育技术真题及答案
- 商丘市(2025年)公务员遴选试题题库及答案
- 小学文明礼仪教育实践方案
- 2025年刑法模拟检测试卷(刑法中的法律漏洞问题解析与案例)附答案
- 2025年初级注册安全工程师(金属非金属矿山安全)经典试题及答案
- (2025年)安义县公务员遴选考试题及答案
- 2026春季中国工商银行黑龙江省分行校园招聘178人备考题库及参考答案详解【a卷】
- 广东省广州市2024年中考数学真题试卷(含答案)
- 诺瓦星云的在线测评题
- 《“文化走出去”申论练习》名师课件
- 山东省济南市2024年中考数学试卷【附真题答案】
- 电线电缆-采购技术规格书(模板)
- 中考语文小说阅读专题复习+-人物形象分析课件
- MOOC 高等数学(二)-东北大学 中国大学慕课答案
- 2024广西广投产业链服务集团有限公司招聘笔试参考题库附带答案详解
- 人教版五年级下册数学1-8单元测试卷含答案(每单元2套试卷,共16卷)
- 典型安全生产事故案例培训
- 创伤性休克的急救护理(1)课件
评论
0/150
提交评论