语言处理器引论ppt课件

上传人:大米 文档编号:567622721 上传时间:2024-07-21 格式:PPT 页数:46 大小:2MB
返回 下载 相关 举报
语言处理器引论ppt课件_第1页
第1页 / 共46页
语言处理器引论ppt课件_第2页
第2页 / 共46页
语言处理器引论ppt课件_第3页
第3页 / 共46页
语言处理器引论ppt课件_第4页
第4页 / 共46页
语言处理器引论ppt课件_第5页
第5页 / 共46页
点击查看更多>>
资源描述

《语言处理器引论ppt课件》由会员分享,可在线阅读,更多相关《语言处理器引论ppt课件(46页珍藏版)》请在金锄头文库上搜索。

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

2、器编译器71.1 语言处理器编译器编译器是一种翻译器特点:目标语言比源语言低级机器语言(操作:寄存器BX的内容送到AX中)机器指令 1000100111011000汇编指令 movax,bx 编程语言机器语言编译器81.1 语言处理器编译器编译器是一种翻译器特点:目标语言比源语言低级 编程语言机器语言编译器91.2 编译器结构(1.2)分析部分前端:源程序-中间表示综合部分后端:中间表示-目标程序101.2 编译器结构一个编译器的各个步骤 图1.6编译器的工作可以分成若干阶段,每个阶段把源程序从一种表示变换成另一种表示。符号表管理器出错管理器111.2 编译器结构一个编译器的各个步骤实例:图1

3、.7一个赋值语句的翻译121.2 编译器结构前端后端131.2 编译器结构编译器的前端与后端前端:只依赖于源语言后端:编译器中依赖于目标机器的部分,一般独立于源语言,而与中间语言有关。前端+后端:组合取一个编译器前端,重写它的后端以产生同一源语言在另一机器上的编译器把几种不同的语言编译成同一种中间语言,让不同的前端使用同一后端,从而得到一台机器上的几个编译器编译的几个阶段常用一趟/遍(pass)扫描来实现,一趟/遍扫描包括读一个输入文件和写一个输出文件。141.2 编译器结构词法分析逐个读构成源程序的字符,把它们组成词法单元(token)流。实例:position = initial + ra

4、te * 60()标识符(position)()赋值号(:=)()标识符(initial)()加号()()标识符(rate)()乘号()()数(60)151.2 编译器结构词法分析逐个读构成源程序的字符,把它们组成词法单元(token)流。实例:编译器的词法分析也叫做线性分析或扫描。词法分析position = initial + rate * 60 161.2 编译器结构语法分析把词法记号流依照语言的语法结构按层次分组,以形成语法短语。实例: position = initial + rate * 60 的语法分析树171.2 编译器结构语法分析表达式、语句等程序层次结构通常由递归的规则表示

5、实例:表达式任何一个标识符都是表达式;任何一个数都是表达式;如果和都是表达式,那么 、 、()、(2)也都是表达式。181.2 编译器结构语法分析表达式、语句等程序层次结构通常由递归的规则表示实例:语句如果identifier是标识符,expression是表达式,那么 identifier := expression是语句。如果 expression 是表达式,statement是语句,那么 while (expression) do statement if (expression) then statement 也都是语句。191.2 编译器结构语法分析把词法记号流依照语言的语法结构按层

6、次分组,以形成语法短语。实例:position = initial + rate * 60 的语法树201.2 编译器结构语义分析检查程序的语义正确性,以保证程序各部分能有意义地结合在一起,为后面代码生成阶段收集类型信息。类型转换类型检查语法制导翻译real型211.2 编译器结构中间代码生成中间代码位于高级编程语言和机器语言(目标程序)之间后缀表示: 9+5-2 95+2-抽象语法树: 三地址码221.2 编译器结构代码优化改进代码,以产生执行较快的机器代码。231.2 编译器结构目标代码生成生成可重定位的机器代码或汇编码为源程序所用的每个变量选择存储单元,并且把中间代码翻译成等价的机器指令

7、序列。关键问题是寄存器分配。关键问题是寄存器分配。241.2 编译器结构符号表管理编译器的一项重要工作是记录源程序中使用的标识符,并收集每个标识符的各种属性。这些属性提供标识符的存储分配、类型和作用域信息。如果是过程标识符,还有参数的个数和类型、参数传递方式和返回值类型。符号表是为每个标识符保存一个记录的数据结构,记录的域是标识符的属性。该数据结构允许我们迅速地找到一个标识符的记录,在此记录中存储和读取数据。251.2 编译器结构符号表管理实例 语句 position = initial + rate * 60词法分析器发现源程序的标识符时,把该标识符填入符号表。但是,词法分析期间不能确定一个

8、标识符的属性。例如:其余的阶段把标识符的信息填入符号表,然后以不同的方式使用这些信息261.2 编译器结构出错管理每个阶段都可能发现源程序的错误。发现错误后,该阶段必须处理此错误,使得编译可以继续进行,以便进一步发现源程序的其他错误。词法分析:当前被扫描的字符串不能形成语言的词法记号。语法分析:记号流违反语言的语法规则。语义分析:编译器试图找出语法正确但对所含的操作来说是无意义的结构,如相加的两个标识符,其一是数组名,另一个是过程名。271.3 编译系统除了编译器外,还需要一些其他工具的帮助,才能得到可执行的目标程序,这些工具包括预处理器、汇编器和连接器等C语言的编译系统Java语言的编译系统

9、281.3 编译系统C语言的编译系统一个语言处理系统:图1.5设有两个文件main.cswap.cgccvo swap main.c swap.c-v 可以输出该编译系统各步骤执行的命令和执行结果-o 指示生成的可执行文件的名字 291.3 编译系统C语言的编译系统预处理器实现文件包含#include 实现宏展开#define pi 3.1415926条件编译#if 、#ifdef301.3 编译系统C语言的编译系统汇编器:对输入进行两遍扫描第一遍,汇编器扫描输入,将表示存储单元的所有标识符都存入符号表,并分配地址。第二遍,汇编器再次扫描输入,把每个操作码翻译成机器语言中代表那个操作的位串,并

10、把代表存储单元的每个标识符翻译成符号表中为这个标识符分配的地址。gcc S main.casas o main.o main.s 311.3 编译系统C语言的编译系统连接器:收集、组织程序所需的不同代码和数据静态连接器:将多个可重定位目标文件组成一个可执行目标文件(也可以组成一个可重定位目标文件)动态连接器:支持在内存中的可执行程序在执行时与共享目标文件进行动态的连接。321.3 编译系统Java语言的编译系统一般的高级语言程序如果要在不同的平台上运行,至少需要编译成不同的目标代码。Java虚拟机技术是实现Java平台无关性特点的关键。Java虚拟机语言(简称JVML)JVML程序只需要与虚拟

11、机交互,不需要关心底层的硬件和操作系统。331.3 编译系统Java语言的编译系统341.4 程序设计语言发展历程(1.3)程序设计语言发展历程机器语言(第一代): 20世纪40年代汇编语言(第二代) :20世纪50年代早期高级语言 :20世纪50年代晚期+通用(第三代): Fortran、Cobol、C、C+、C#、Java专用(第四代):SQL、Postscript逻辑(第五代):Prolog、LISP351.4 程序设计语言发展历程C语言的产生The Development of the C Language:C history Written by Dennis RitchieBCPL

12、 B语言 New B语言 C语言Ken Thompson (left) with Dennis RitchieDEC PDP-7, as used for initial work on C and Unix361.4 程序设计语言发展历程第一届(1966年)图灵奖得主:Alan JPerlis贡献领域:高级程序设计技巧,编译器构造371.4 程序设计语言发展历程1983年图灵奖得主:Ken Thompson, Dennis Ritchie贡献领域:C语言和Unix操作系统381.4 程序设计语言发展历程2006年图灵奖得主:Frances E. Allen贡献领域:优化编译器391.4 程序

13、设计语言发展历程编译性语言、解释性语言和脚本语言高级语言翻译成机器语言,计算机才能执行高级语言编写的程序。翻译有两种方式编译:一次性编译成机器语言文件,不用重新编译,效率高解释:每个语句都是执行的时候才翻译,每执行一次就翻译一次,效率比较低脚本语言一种解释性语言:JavaScript,ASP,PHP,PERLJava语言既要编译,又要解释;编译只有一次,程序执行时解释执行;通过编译器,把java程序翻译成一种中间代码字节码,然后通过JVM解释成相应平台的语言。401.4 程序设计语言发展历程主流编译理论会议PLDI(ACM Symposium on Programming Language D

14、esign and Implementation,编程语言设计与实现)POPL(ACM Symposium on Principles of Programming Languages,编程语言原理)PPoPP(ACM Symposium on Principles and Practice of Parallel Programming,并行编程原理与实践)OOPSLA(ACM Conference on Object-Oriented Programming Systems, Languages and Applications,面向对象的编程系统、语言和应用)41第一章:总结自然语言处理vs编译原理词法分析42第一章:总结自然语言处理vs编译原理语法分析43第一章:总结第一章总结(1.7)44作业给定一个后缀表示,比如95+2-求输出结果C+实现45重点1.什么是编译器?2.编译器,解释器的区别?3.一个语言处理系统由哪些部分组成?4.编译器的前端分析由哪些部分构成?5.编译器的后端分析由哪些部分构成?6.什么是词法分析?7.什么是语法分析?8.什么是标识符,表达式,语句?9.中间代码有哪三种表达方式?10.什么是符号表?11.什么是出错管理?46

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号