编译原理大作业学习.docVIP

  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文档。上传文档
查看更多
编译原理大作业 论文 学号:1083710614 姓名:杨文华 哈尔滨工业大学软件学院 2010年12月 摘要 语法分析是编译程序的核心部分,其任务是检查词法分析器输出的单词序列是否构成源语言中的句子,亦即是否符合源语言的语法规则。本文从自上而下和自下而上两种角度论述了几种语法分析方法的优劣和各自试用的文法。 关键词 编译;语法分析;文法; Abstract Syntax?analysis is?the core of?the compiler, the?task is to check?the output of?the lexerconstitute?the source language?word?sequence?in the?sentence, that is,?whether?the source?language syntax?rules.?From the?top down?and bottom-up?perspective of?bothanalysis methods?are discussed?the advantages and disadvantages?of several?syntaxand?grammar of?their?trial. Keywords  Compile , grammatical analysis, grammar 不要删除行尾的分节符,此行不会被打印 目录 摘要 I Abstract II 第1章 综述 1 1.1 语法分析概述 1 1.2 分析方法 1 第2章 四种文法的比较 2 2.1 LL(1) 2 2.2 SLR(1) 3 2.3 LR(1) 4 2.4 LALR(1) 4 2.5 小结 5 参考文献 6 千万不要删除行尾的分节符,此行不会被打印。在目录上点右键“更新域”,然后“更新整个目录”。更新后,请在摘要和引言之间插入一个“回车符” 综述 语法分析概述 语法分析的任务是检查词法分析器输出的单词序列是否构成源语言中的句子,亦即是否符合源语言的语法规则。 分析方法 进行语法分析主要有两种:自顶向下的分析方法和自底向上的分析方法。本文讨论基于以上两种分析方式的五种文法:LL(1),LR(1),SLR(1),LALR(1)以及算符优先文法。这五种文法各有其特点与适用范围,很难确切的说孰优孰劣。 五种文法的比较 LL(1)文法 概述 LL(1)语法分析属于自顶向下的语法分析。所谓自顶向下的语法分析,就是对给定的输入单词序列w,试图自顶向下的为其建立一棵语法分析树。或者说从文法德开始符号出发,试图寻找w的一种最左推导。这种分析过程实质上是一种试探过程,而且对文法的限制比较多,可能会导致分析效率极低甚至失败。具体的有预测分析法和递归下降分析法。 对文法的限制 但是无论哪种方法,在分析过程中都可能会遇到一些共同的问题: 1 二义性问题; 2 回溯问题; 3 左递归引起的无穷推导问题。 所以说,自顶向下的语法分析方法并不能处理所有的文法,有时为了适应所选择的分析方法,常常需要对原始文法进行改造,包括如下3步: 1消除二义性。这一步只能是人工手动的修改文法。 2消除左递归。这一步可以由程序来处理。假设有n个语法变量,那么这一步的时间复杂度是O()。 3提取左公因子。这一步也主要有人工手动处理。经过这三步处理后的文法,便可以使用预测分析法或者递归下降分析法来进行语法分析了。 处理过程 在接下来的处理中,两种方法都需要进行三步预处理,即: 1 求出单个文法符号X和文法符号串α的FIRST集; 2 求FOLLOW集; 3 求LL(1)分析表。 对于求单个文法符号X的时间复杂度,假设文法符号的个数为n,非终结符个数为m,由于循环的次数与嵌套的层数和计算的顺序有极大的关联,最坏情况要循环O(n)次,为方便计算,再根据实际情况假设每个产生式右部的文法符号个数为10,所以,求单个文法符号X的时间复杂度为O(10*n*m)= O(mn),而对于符号串α,假设它包含k个符号,则计算它的时间复杂度为O(mnk),求出了FIRST集采能求FOLLOW集,易知求FOLLOW集的时间复杂度也为O(mn)。 接下来,还需要求出LL(1)分析表,分析表是一个二维数组M[A,a],A是语法变量,a是输入符号或#。也可以在O(mn)的时间内求出,两种方法其实都用到了预测LL(1)分析表,只不过使用的方法不太一样。 预测分析法 对于预测分析法,它采用表驱动的方式来实现,它具有一个输入缓冲区、一个分析栈、一张LL(1)分析表和一个输出流。输入缓冲区中包含待分析的串和结束符#。分析栈用来存放文法符号序列,栈底符号是#。初始时,栈中只有文法开始符号及其下的#。整个分析过程在于从文法开始符号开始

文档评论(0)

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

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

1亿VIP精品文档

相关文档