西北工业大学编译原理课件第一章 绪论.pptVIP

西北工业大学编译原理课件第一章 绪论.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译原理讲义 西北工业大学 软件工程中心 康慕宁 第一章 绪论 程序设计语言分低级语言和高级语言两类 低级语言:机器语言、汇编语言及其它面向机器的程序设计语言;其特点对计算机的依赖性强、直观性差、编写程序的工作量大,对程序设计人员要求较高。 高级语言:有几百种之多,常用的有BASIC、FORTRAN、PASCAL、C、JAVA等,高级语言在算法描述能力、编写和调试效率上均比低级语言优越。 但高级语言与机器之间有一“鸿沟”:机器不能理解高级语言! 因此,要在计算机上实现高级语言,需使该语言能让计算机所理解。 方法:对程序进行翻译或进行解释。 翻译:在计算机中放置一能由计算机直接执行的翻译程序,它将某程序设计语言(源语言)所编写的程序(源程序)作为加工对象,将其翻译成为与之等价的另一种语言(目标语言)的程序(目标程序) 可见,计算机执行某高级语言程序,需经两个阶段,即编译阶段和运行阶段。 在执行时,一般应有一些辅助子程序配合。如:数据格式转换子程序、标准函数、动态存储分配子程序等等,由它们构成的子程序库称为运行系统。 编译系统=编译程序+运行系统 编译程序与解释程序 高级语言程序也可通过解释程序来执行 解释程序:以源程序为输入,在执行过程中不再产生目标程序,而是边解释边执行。 解释程序运行效率不高 目前,纯粹的解释程序已不多见,通常是将编译和解释作某种程度的结合。 编译程序是现今任何计算机系统的最重要的系统程序。 本课程的目的,在于向大家介绍设计和构造编译程序的基本原理和基本方法,其中许多方法也适用于构造解释程序或汇编程序。 1.1编译过程概述 翻译外文书刊与编译工作比较 编译程序的构成 编译程序主要由八个部分构成: 1.词法分析程序(扫描器 scanner) 2.语法分析程序(分析器 parser) 3.语义分析程序 4.中间代码生成程序 5.代码优化程序 6.目标代码生成程序 7.错误检查和处理程序 8.各种信息表格的管理程序 一个微型PASCAL语言的定义 为了便于说明,我们引入一个微型PASCAL语言(PASCAL/M)的定义。它只有如下四种语句: 1)PROGRAM语句; 2)说明语句; 3)BEGIN-END语句; 4)赋值语句; 每个PASCAL/M语句都以PROGRAM语句开头,后跟说明语句,再跟以一个BEGIN-END语句,在其内部可以有若干赋值语句。 右边是一个该语言程序的例子。 程序1-1 一个PASCAL源程序source PROGRAM source; {This little source program is used to illustrate compiling procedure } VAR x,y,z:integer; a:integer; BEGIN { This program has only 4 statement } x:=23+5; z:=x DIV -3; y:=z+18*3; a:=x+(y-2) DIV 4; END. 1.2.1 词法分析程序(扫描器) 词法分析程序的任务是: 1)识别出源程序的各个基本语法单位(单词或语法符号) 2)删除无用的空白字符及其它与输入介质相关的非实质性字符(空格、回车等) 3)删除注释 4)进行词法检查,报告所发现的错误 扫描器依次查看缓冲区中源程序的各字符,根据当前正查看的字符之种类,并参考扫描过程中已得到的信息,就能判断出该字符在源程序中所处地位。一般它是下述几种情况之一: 1)正处理的注释中的一个字符; 2)无用字符; 3)下一个单词的首字符; 4)正识别的单词中的一个字符; 5)不合法的字符。 扫描器输出以单词为单位的单词流 例如,以特殊符号“#”分隔的单词流: # PROGRAM # source # ; # VAR # x # , # y # , # z # : # integer # ; # a # : # integer # ; # BEGIN # x # := # 23 # + # 5 # ; # z # := # x # DIV # - # 3 # ; # y # := # z # + # 18 # * # 3 # ; # a # := # x # + # ( # y # - # 2 # ) # DIV # 4 # ; # END # . # 单词流的内部表示 注意,前面的单词流形式只是我们为说明原理便于阅读而假定的形式。 为了让计算机能够方便地识别和使用,在实际中的常用方法是将单词计算机内部表示为一个有序对(Class,Value)。 Class为一整型数,用于标识该单词的类别; Value用于存放单词的值。 例如对于source程序,可将其单词分为四类:(1)保留字(2)专用符号(3)标识符(4)整数

您可能关注的文档

文档评论(0)

ormition + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档