




已阅读5页,还剩67页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
编译技术,电子邮件:zc,课程简介,56学时分为两个部分:理论基础:70%,课堂教学实践:30%,实验(16学时)课程要求:掌握编译技术的基本理论,编译系统的结构(结构和机制)和编译程序的设计相关部分,加深对计算机高级语言的理解,并在此基础上能灵活运用所学技术解决实际问题。如何将程序翻译成机器指令?变量的本质是什么?2.序列、选择和循环语句对应哪个中间代码或目标代码?3.调用函数时如何在内存中分配局部变量?4.如何深刻理解对象和变量之间的区别?5.如何存放物品?如何在程序中存储相同的类对象?这个无形的指针有什么用?6.函数重载编译器做了什么?7.什么是多态性?编译器如何支持虚拟函数?当虚拟函数运行时会发生什么?8.任意给定一个面向过程或面向对象的程序,我如何深入分析执行过程?为什么要学习编译原理,学习这门课程有利于加深对编程语言的理解,可以快速掌握新的语言工具,也是阅读相关计算机作品的基础,编译程序是计算机系统中的系统软件,包括许多软件技术,对于软件设计来说非常有价值,编译课程包含了解决计算机科学中的问题、抽象问题和解决问题的思路,(1) 编译原理及实践机械工业出版社,KennethC。娄登峰秦博等。翻译,英文原件ComplierConstructionPrinciplesandPractice。(2) 程序设计语言编译原理,国防工业出版社,陈火旺等主编。(3) 编译原理清华大学出版社,吕英芝等主编,1998。(4) 编译原理和技术中国科技大学出版社,陈主编,1997。参考书,外国参考书(编译圣经),编译器:原则,技术和工具(龙书),现代编译器实现(龙书),C,ml(虎书),外国参考书(编译圣经),外国参考书(编译圣经),高级编译器目标实现(鲸书,鲸书),第1章编译概述,1.1什么是编译器1.2编译器逻辑结构1.3编译器阶段组合1.4编译器实现方法1.5语言开发环境中的合作伙伴程序1.6编译器构造工具,过程语言Fortran,Pascal,编译工具高级语言低级语言:面向机器的语言1.1什么是编译器、编程语言、机器语言:一种直接使用计算机识别的二进制代码指令来编写程序的语言。由二进制指令代码组成。1 3表示为1000000100000001000000000011,是最低的计算机语言,无需翻译就可以直接被计算机硬件识别。有不同的机器语言对应不同的计算机硬件。特点:执行速度快,但程序编写困难,修改调试不方便,直觉差,移植困难。编程语言、汇编语言:也称为符号语言。与机器语言的一一对应关系,英语缩写符号(指令助记符)用来代替机器语言指令中的操作码,地址符号用来代替地址码。用指令助记符和地址符号编写的指令称为汇编指令,用汇编指令编写的程序称为汇编语言源程序。x和y的内容相加并表示为ADDXY。机器不能直接识别汇编语言程序。它必须被翻译成机器语言程序来执行。特点:比机器语言直观,易于理解和记忆,比高级语言更有效,但通用性和可移植性较差。编程语言,高级语言:与特定的计算机硬件无关,是一种面向问题的编程语言,其表达方式接近自然语言和数学语言,易于人们接受和掌握。它采用了一种类似数学公式的书写方法:x=1 3。它独立于特定的计算机硬件,易于编译和调试程序,通用性和可移植性好。在计算机执行之前,它需要被编译器翻译成目标语言程序时间和空间的效率相对较低。目前,流行的高级语言有:VisualC、VisualBasic、Java、FoxPro、Pascal、Lisp、Cobol等。翻译器将用一种语言编写的程序(源程序)翻译成另一种语言的等效程序(目标程序)。它是汇编程序、编译器和各种转换程序的总称。源程序、翻译器和目标程序之间的关系源程序、翻译器、目标程序,即源程序是翻译器的输入,目标程序是翻译器的输出。汇编程序把汇编语言程序翻译成机器语言程序。此时的翻译器被称为汇编器,而翻译过程被称为“汇编”编译器将高级语言程序翻译成低级语言程序。此时,翻译器被称为编译器,这个翻译过程被称为“编译”。汇编程序和编译器都是翻译器。主要区别是处理对象的不同。由于汇编语言的简单格式,汇编语言和机器语言之间经常存在一对一的对应关系。汇编者必须做的翻译工作比编译器简单得多。编译器是一种翻译程序,它将以面向人类的源语言(高级语言程序)编写的程序翻译成等价的面向硬件的目标程序(低级语言程序)、源程序、目标程序、编译器、人类能够理解的高级语言、机器能够“理解”的低级语言,并且解释器解释和执行源程序的程序将源程序作为输入,但不产生目标程序。编译器和解释器之间的区别是通过在执行源程序时解释它来比较的。编译器生成一个与源程序等价的目标程序,它可以完全替代源程序。目标程序可以运行任意次数,而不依赖于编译器。解释器:对源程序的每次执行都伴随着重新翻译工作,但不能摆脱翻译器。一些编译器支持解释和编译。他们在程序的开发和调试阶段使用解释。一旦程序被调试,编译就被使用。编译器和解释器:解释器和编译器的区别,解释器和编译器的根本区别:是否生成目标代码,1.2编译器的逻辑结构,典型的编译过程有五个基本阶段,什么形式的源程序被认为便于处理?对于以下字符串,词法分析程序将分析和识别9个单词:X1=(2.0 0.8)*C1123456789。源程序由字符序列组成。词法分析扫描源程序,根据语言的词法规则识别单词符号(语义相关的符号串),并以某种编码形式输出它们。任务:分析和识别单词。词汇分析,词汇分析(自动分词和词性标注),就像翻译英语句子一样,我们必须先分析单词,找出每个单词的意思和在句子中的作用,然后才能翻译句子。主要任务是从左到右逐个字符地读取源程序,扫描并分解构成源程序的字符流,从而识别每个单词。单词包括保留单词、标识符、运算符、分隔符等。例如:位置:=初始速率* 60;词法分析(自动分词词性标注)位置:=初始率* 60;字类型字值标识符1(id1)位置运算符(赋值):=标识符2(id2)初始运算符(加法)标识符3(id3)速率运算符(乘法)*整数60边界运算符;另一个例子是一个C源程序的片段:intaa=a2;词法分析可以返回:字类型字值保留字int标识符(变量名)分隔符;标识符(变量名)运算符(赋值)=标识符(变量名)运算符(加)整数2界限;相关术语,词法分析(词法分析)-ThEntremofCharactersMakingUpasourcerleMaramessReadFromLefToritingTangroupedIntokents,例如,对于上述示例X1=(2.0.8) * C1语法分析,将识别、和,然后将识别、和,在识别过程中将进行语法检查,如果有错误,应输出错误消息。任务:在词汇分析的基础上,根据语法规则分析与单词序列相对应的语法成分,如表达、各种描述、各种陈述、功能等。并检查语法的正确性。语法分析,语法分析(自动语法分析),语法分析程序类似于自然语言中句子的语法分析。语法分析定义了程序的结构元素及其关系。语法分析的结果通常表示为分析树或语法树。主要任务:在词法分析的基础上,将单词分解成各种语法短语。一般语法短语可以表示为语法树。功能:水平分析。根据源程序的语法规则,源程序的单词序列形成语法短语(表示为语法树)。位置:=初始速率* 60;语法分析(自动语法分析),规则:3360= :3360= :3360= :3360= * :3360=():3360=:3360=3:3360=,赋值语句,标识符,表达式,表达式,表达式,标识符,整数,标识符,语法树(派生树),3语义分析和中间代码生成,语义分析:静态语义处理检查源代码的语义错误,并收集代码生成阶段的类型信息。中间代码生成:动态语义处理,四进制(三地址指令),四进制的语义为:2.0 0.8T1T1*C1T2T2X1。生成的四元语句在语言形式上不同于原始赋值语句,但在语义上是等价的。运算符左操作数右操作数结果(2.00.8T1)(*T1C1T2)(=X1T2),其中T1和T2是编译器引入的临时变量。对于前述示例X1=(2.00.8)* C1,优化:上述四个中的第一个是计算常量表达式值,它可以在编译时计算并存储在临时变量中,而不生成要计算的目标指令。四进制公式可优化如下:编译时:2.00.8T1,运算符左操作数右操作数结果(*2.8C1T1)(=X1T1),4代码优化,5目标代码生成,目标代码(地址指令序列)可由中间代码轻松生成。这部分工作与机器密切相关,因此应该根据机器进行,也可以进行优化。注意:在翻译成目标程序的过程中,记住语义对等。在以上五个阶段中,应该做两件事:(1)建表和查表;(2)错误处理;因此,编译器应该包括两个部分:表管理和错误处理,源程序示例和程序。VARa,b,c:realBEGINread(b,c);a:=b c * 60写(a)结束。在词法分析之后,源程序被处理成字流,赋值语句,变量,=,表达式,表达式,术语,术语,因子,b,术语,*,因子,c,60,a,赋值语句被解析成分析树,=,a,b,*,c,intreal,60,赋值语句被语义分析以生成语法树和中间代码,temp 1:=int torial(60(60);temp2:=c * temp1temp3:=b temp2a:=temp3,优化,temp1:=c * 60.0a3360=btemp1,生成目标代码,movfc,R2;mulf#60.0,R2;movfb,R1;addfr2,R1;movfr1,a;符号表1.3编译阶段前端和后端的组合根据编译器各部分的功能将编译过程分为前端和后端。这种结构对于编译器的可移植性非常重要。编译器的前端加上相应的不同后端可以为不同的机器形成相同源语言的编译器。如果不同编译器的前端生成相同的中间代码并使用相同的后端,那么可以为同一台机器生成多种语言的编译器。通过:源程序(或源程序的中间形式)从头到尾扫描一次,并相应地进行处理,以生成源程序或目标程序的新的中间形式,通常称为通过。JAVA源程序,词汇和语法分析,*。例如,类文件格式、语义处理、内存代码缓冲区JAVABytecode、Java类文件格式输出处理、抽象语法树、Java虚拟机、SUNGJC编译器、1.4编译器实现方法、手工编写耗时、“效率”问题。自动生成的每个阶段基本上都有相应的自动生成工具,如lex和yacc。引导,编译器自动化技术,词法分析:lex是由MikeLesk在1975年左右为UNIX开发的。现在流行的是自由软件基金会(FreeSoftwareFoundation: YACC)创建的Gnucomplier包中的Flex语法分析,它是由SteveJohnson在1975年左右为UNIX开发的,而bison现在很流行。词法分析器的自动生成程序,LEX,词法规则描述,词法分析程序,(C程序),输入:词法(正则表达式)识别动作(C程序段)输出:yylex()函数,语法分析器的自动生成程序,YACC,语法规则描述,语法分析器,(C程序),输入:语法规则(产生式)语义动作(C程序段)输出:yyparse()函数,自我开发技术,首先为语言的核心部分构造一个小型编译器(可以用低级语言实现),然后用它作为工具构造一个能够编译更多语言的大型编译器这种扩展就像滚雪球一样,变得越来越大,最终形成了人们所期望的整个编译器。通过一系列自我开发方法形成编译器的过程称为自我编译过程(编译器的自我开发技术)。L0,编译器迁移技术,编译器可以通过迁移获得,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中医针灸科慢性腰腿痛的经络穴位治疗考核试卷答案及解析
- 2025浙江衢州龙游人才科创有限公司公开招聘工作人员3人笔试模拟试题及答案解析
- 2025年产科妇产科护理知识考核模拟试卷答案及解析
- 2025陕西西北工业大学材料学院纳米诊疗团队非事业编科研助理招聘1人笔试模拟试题及答案解析
- 2025年耳鼻喉科手术技术及并发症预防考核模拟试卷答案及解析
- 2026中国人寿资产管理有限公司校园招聘笔试模拟试题及答案解析
- 2025江苏苏州科技大学招聘辅导员(博士)7人笔试模拟试题及答案解析
- 2025湖南兴湘投资控股集团有限公司招聘3人笔试备考试题及答案解析
- 2025年眼科疾病特异性药物应用模拟测试卷答案及解析
- 营口市中石化2025秋招面试半结构化模拟题及答案油气储运与管道岗
- 环境反应工程导论课件
- 四渡赤水军事教学课件
- 马场建造设计方案
- 本币交易员考试题库
- 安徒生童话题目及答案
- 胃食管反流病的健康教育指导讲课件
- 小儿腹股沟疝麻醉
- 宜宾党校考试试题及答案
- 2025年安徽省农业职业技能大赛(水生物病害防治员)备赛试题库(含答案)
- DB31T 444-2022 排水管道电视和声呐检测评估技术规程
- 演出冠名赞助合同协议
评论
0/150
提交评论