引论学习教程.pptx

上传人:莉*** 文档编号:77757348 上传时间:2023-03-16 格式:PPTX 页数:45 大小:1.27MB
返回 下载 相关 举报
引论学习教程.pptx_第1页
第1页 / 共45页
引论学习教程.pptx_第2页
第2页 / 共45页
点击查看更多>>
资源描述

《引论学习教程.pptx》由会员分享,可在线阅读,更多相关《引论学习教程.pptx(45页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第一章:引论翻译器的不同形式编译器、解释器、混合编译器典型编译器结构编译系统程序设计语言发展历程第1页/共46页1.1 语言处理器(1.1)翻译器能够完成从一种语言到另一种语言变换的软件 源语言目标语言翻译器2第2页/共46页1.1 语言处理器翻译器3编译器解释器混合编译器第3页/共46页编程语言排行榜TIOBE Index for February 2018第4页/共46页1.1 语言处理器一个语言处理系统:图1.5预处理器编译器汇编器连接器/加载器5第5页/共46页1.1 语言处理器编译器编译器是一种翻译器特点:目标语言比源语言低级编程语言传统程序设计语言:Pascal、C+、Java专用

2、语言:Lisp、Prolog、LaTeX 编程语言机器语言编译器编译器6第6页/共46页1.1 语言处理器编译器编译器是一种翻译器特点:目标语言比源语言低级机器语言(操作:寄存器BX的内容送到AX中)机器指令汇编指令movax,bx 编程语言机器语言编译器7第7页/共46页1.1 语言处理器编译器编译器是一种翻译器特点:目标语言比源语言低级 编程语言机器语言编译器8第8页/共46页1.2 编译器结构(1.2)分析部分前端:源程序-中间表示综合部分后端:中间表示-目标程序9第9页/共46页1.2 编译器结构一个编译器的各个步骤图1.6编译器的工作可以分成若干阶段,每个阶段把源程序从一种表示变换成

3、另一种表示。符号表管理器出错管理器10第10页/共46页1.2 编译器结构一个编译器的各个步骤实例:图1.7一个赋值语句的翻译11第11页/共46页1.2 编译器结构前端12后端第12页/共46页1.2 编译器结构编译器的前端与后端前端:只依赖于源语言后端:编译器中依赖于目标机器的部分,一般独立于源语言,而与中间语言有关。前端+后端:组合取一个编译器前端,重写它的后端以产生同一源语言在另一机器上的编译器把几种不同的语言编译成同一种中间语言,让不同的前端使用同一后端,从而得到一台机器上的几个编译器编译的几个阶段常用一趟/遍(pass)扫描来实现,一趟/遍扫描包括读一个输入文件和写一个输出文件。1

4、3第13页/共46页1.2 编译器结构词法分析逐个读构成源程序的字符,把它们组成词法单元(token)流。实例:position=initial+rate*60()标识符(position)()赋值号(:=)()标识符(initial)()加号()()标识符(rate)()乘号()()数(60)14第14页/共46页1.2 编译器结构词法分析逐个读构成源程序的字符,把它们组成词法单元(token)流。实例:编译器的词法分析也叫做线性分析或扫描。词法分析15position=initial+rate*60第15页/共46页1.2 编译器结构语法分析把词法记号流依照语言的语法结构按层次分组,以形成

5、语法短语。实例:position=initial+rate*60的语法分析树16第16页/共46页1.2 编译器结构语法分析表达式、语句等程序层次结构通常由递归的规则表示实例:表达式任何一个标识符都是表达式;任何一个数都是表达式;如果和都是表达式,那么、()、(2)也都是表达式。17第17页/共46页1.2 编译器结构语法分析表达式、语句等程序层次结构通常由递归的规则表示实例:语句如果identifier是标识符,expression是表达式,那么identifier:=expression是语句。如果expression是表达式,statement是语句,那么while(expression

6、)dostatementif(expression)thenstatement也都是语句。18第18页/共46页1.2 编译器结构语法分析把词法记号流依照语言的语法结构按层次分组,以形成语法短语。实例:position=initial+rate*60的语法树19第19页/共46页1.2 编译器结构语义分析检查程序的语义正确性,以保证程序各部分能有意义地结合在一起,为后面代码生成阶段收集类型信息。类型转换类型检查语法制导翻译real型20第20页/共46页1.2 编译器结构中间代码生成中间代码位于高级编程语言和机器语言(目标程序)之间后缀表示:9+5-295+2-抽象语法树:三地址码21第21页

7、/共46页1.2 编译器结构代码优化改进代码,以产生执行较快的机器代码。22第22页/共46页1.2 编译器结构目标代码生成生成可重定位的机器代码或汇编码为源程序所用的每个变量选择存储单元,并且把中间代码翻译成等价的机器指令序列。关键问题是寄存器分配。23第23页/共46页1.2 编译器结构符号表管理编译器的一项重要工作是记录源程序中使用的标识符,并收集每个标识符的各种属性。这些属性提供标识符的存储分配、类型和作用域信息。如果是过程标识符,还有参数的个数和类型、参数传递方式和返回值类型。符号表是为每个标识符保存一个记录的数据结构,记录的域是标识符的属性。该数据结构允许我们迅速地找到一个标识符的

8、记录,在此记录中存储和读取数据。24第24页/共46页1.2 编译器结构符号表管理实例语句position=initial+rate*60词法分析器发现源程序的标识符时,把该标识符填入符号表。但是,词法分析期间不能确定一个标识符的属性。例如:其余的阶段把标识符的信息填入符号表,然后以不同的方式使用这些信息25第25页/共46页1.2 编译器结构出错管理每个阶段都可能发现源程序的错误。发现错误后,该阶段必须处理此错误,使得编译可以继续进行,以便进一步发现源程序的其他错误。词法分析:当前被扫描的字符串不能形成语言的词法记号。语法分析:记号流违反语言的语法规则。语义分析:编译器试图找出语法正确但对所

9、含的操作来说是无意义的结构,如相加的两个标识符,其一是数组名,另一个是过程名。26第26页/共46页1.3 编译系统除了编译器外,还需要一些其他工具的帮助,才能得到可执行的目标程序,这些工具包括预处理器、汇编器和连接器等C语言的编译系统Java语言的编译系统27第27页/共46页1.3 编译系统C语言的编译系统一个语言处理系统:图1.5设有两个文件main.cswap.cgccvoswapmain.cswap.c-v可以输出该编译系统各步骤执行的命令和执行结果-o指示生成的可执行文件的名字28第28页/共46页1.3 编译系统C语言的编译系统预处理器实现文件包含#include实现宏展开#de

10、finepi3.1415926条件编译#if、#ifdef29第29页/共46页1.3 编译系统C语言的编译系统汇编器:对输入进行两遍扫描第一遍,汇编器扫描输入,将表示存储单元的所有标识符都存入符号表,并分配地址。第二遍,汇编器再次扫描输入,把每个操作码翻译成机器语言中代表那个操作的位串,并把代表存储单元的每个标识符翻译成符号表中为这个标识符分配的地址。gccSmain.casomain.omain.s30第30页/共46页1.3 编译系统C语言的编译系统连接器:收集、组织程序所需的不同代码和数据静态连接器:将多个可重定位目标文件组成一个可执行目标文件(也可以组成一个可重定位目标文件)动态连接

11、器:支持在内存中的可执行程序在执行时与共享目标文件进行动态的连接。31第31页/共46页1.3 编译系统Java语言的编译系统一般的高级语言程序如果要在不同的平台上运行,至少需要编译成不同的目标代码。Java虚拟机技术是实现Java平台无关性特点的关键。Java虚拟机语言(简称JVML)JVML程序只需要与虚拟机交互,不需要关心底层的硬件和操作系统。32第32页/共46页1.3 编译系统Java语言的编译系统33第33页/共46页1.4 程序设计语言发展历程(1.3)程序设计语言发展历程机器语言(第一代):20世纪40年代汇编语言(第二代):20世纪50年代早期高级语言:20世纪50年代晚期+

12、通用(第三代):Fortran、Cobol、C、C+、C#、Java专用(第四代):SQL、Postscript逻辑(第五代):Prolog、LISP34第34页/共46页1.4 程序设计语言发展历程C语言的产生TheDevelopmentoftheCLanguage:ChistoryWrittenbyDennisRitchieBCPLB语言NewB语言C语言Ken Thompson(left)with Dennis RitchieDEC PDP-7,as used for initial work on C and Unix35第35页/共46页1.4 程序设计语言发展历程第一届(1966年

13、)图灵奖得主:AlanJPerlis贡献领域:高级程序设计技巧,编译器构造36第36页/共46页1.4 程序设计语言发展历程1983年图灵奖得主:KenThompson,DennisRitchie贡献领域:C语言和Unix操作系统37第37页/共46页1.4 程序设计语言发展历程2006年图灵奖得主:FrancesE.Allen贡献领域:优化编译器38第38页/共46页1.4 程序设计语言发展历程编译性语言、解释性语言和脚本语言高级语言翻译成机器语言,计算机才能执行高级语言编写的程序。翻译有两种方式编译:一次性编译成机器语言文件,不用重新编译,效率高解释:每个语句都是执行的时候才翻译,每执行一

14、次就翻译一次,效率比较低脚本语言一种解释性语言:JavaScript,ASP,PHP,PERLJava语言既要编译,又要解释;编译只有一次,程序执行时解释执行;通过编译器,把java程序翻译成一种中间代码字节码,然后通过JVM解释成相应平台的语言。39第39页/共46页1.4 程序设计语言发展历程主流编译理论会议PLDI(ACMSymposiumonProgrammingLanguageDesignandImplementation,编程语言设计与实现)POPL(ACMSymposiumonPrinciplesofProgrammingLanguages,编程语言原理)PPoPP(ACMSym

15、posiumonPrinciplesandPracticeofParallelProgramming,并行编程原理与实践)OOPSLA(ACMConferenceonObject-OrientedProgrammingSystems,LanguagesandApplications,面向对象的编程系统、语言和应用)40第40页/共46页第一章:总结自然语言处理vs编译原理词法分析41第41页/共46页第一章:总结自然语言处理vs编译原理语法分析42第42页/共46页第一章:总结第一章总结(1.7)43第43页/共46页作业给定一个后缀表示,比如95+2-求输出结果C+实现第44页/共46页重点1.什么是编译器?2.编译器,解释器的区别?3.一个语言处理系统由哪些部分组成?4.编译器的前端分析由哪些部分构成?5.编译器的后端分析由哪些部分构成?6.什么是词法分析?7.什么是语法分析?8.什么是标识符,表达式,语句?9.中间代码有哪三种表达方式?10.什么是符号表?11.什么是出错管理?第45页/共46页

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > PPT文档

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com