编译原理LL(K).pptVIP

  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文档。上传文档
查看更多
编译原理LL(K)

第四章 自上而下语法分析 4.1 语法分析的功能 以词法分析器生成的单词符号序列作为输入,根据语言的语法规则(上下文无关文法),识别出各种语法成分(表达式、语句、程序段乃至整个程序等),并在分析过程中做语法检查,检查所给单词符号序列是否是该语言的合法句子。是则以某种形式的语法树输出;不是,要详细报告错误的性质和位置。 语法分析的方法 自上而下的分析法 从文法的开始符号出发,根据文法规则正向推导出给定句子的一种方法。(从树根开始,向下构造语法树,直到建立每个树叶) 递归下降分析法、LL分析法 自下而上的分析法 从给定的输入串开始,根据文法规则逐步进行归约,直至归约到文法的开始符号的一种方法。(从语法树的末端开始,向上规约,直至根节点) 算符优先分析法、LR分析法 4.2 自上而下分析法 非确定自上而下分析 其思想是:对任何输入串w试图用一切可能的办法,从文法的开始符号出发,自上而下的为它建立一棵语法树(为它寻找一个最左推导),如试探成功,说明w是个合法的句子。 本质是一个穷举试探的过程,反复 使用不同规则,谋求匹配输入串的过程。 例:P36-2.17 设文法G[S],分析串 abed S→ aAbc | aB A→ ba B→ beB | d 重复以上匹配过程,发现此时符号串abeB与abed前3个符号均匹配,下面指针指向第四个符号d。而符号串abeB 的第四个符号是B,若选择 B→ d 则得到下面语法树: 分析每一步总是对当前句型的最左非终结符U ,用以U为左部的产生式U→ u的右部来替代。 当以U为左部的产生式有多个时,语法分析程序无法根据当前的输入符号准确地决定选用哪个侯选式来替换U,只能按顺序去逐一试探,若成功就继续,否则返回出错点用另一产生式去试探。故称为“带回溯的分析方法” ,。 这种方法分析效率极低,代价很高。实际中并不常用。 通常,我们通过一个一般的非确定的自上而下分析器来识别该种文法所描述的语言.    非确定的下推自动机 下面所要构造的非确定的自上而下分析器属于一般的下推自动机(PDA)类。 所谓一个下推或栈自动机(Stack Automaton),非形式地说,应包含: ①一个输入符号串; ②一个读头,它从左至右移动,每次读进一个输入符号; ③一个有穷状态自动机,用于控制整个系统的操作; ④一个先进后出下推栈, PDA接收字符串条件 (1)如果读头扫描完输入串最后一个符号时,下推栈变为空,此时称为空栈接收。 (2)如果读头扫描完该输入串最后一个符号时,PDA到达某一个状态(此时栈不一定为空),此时称为终态接收。 否则称PDA被阻塞,输入串不合法。 4.3 消除左递归方法 1. 文法的左递归性 如果文法的产生式呈U→Uy 形式,则称其为规则左 递归也称直接左递归。 2.左递归的危害 而自上而下分析法是施行最左推导,即每次取代都是当前句型中的最左非终结符,当用U去匹配输入串时,Uy代替U,结果当前句型的最左非终结符仍是U,再次要求U去进行新的匹配,造成无穷循环。 所以,自上而下的语法分析必须要消除文法的左递归。 方法1 用扩展的BNF表示法消除左递归 为了消除文法的左递归,需对巴科斯范式进行扩展, 增加以下元符号: ① 花括号{ } :表示符号串x出现零次或多次。 :n表示符号串x能重复出现的最大次数,m表示符号串x能重复出现的最小次数。例如P112 ② 方括号[ ] 方括号用来表示可选项。[x] = x或?,表示符号串x可出现一次或不出现。可以用来定义某些高级语言中的“条件语句”。  用扩展的BNF表示法消除左递归 如:条件语句→if布尔表达式 语句 | if布尔表达式 语句;else 语句 可改写成如下形式: 条件语句→if布尔表达式 语句[;else 语句] ③ 圆括号( ) 利用圆括号可提出一个非终结符的多个产生式右部的公共因子。例如, A→xy|xw|…|xz 可写成 A→x(y|w|…|z) 利用下面的两条规则,可把包含直接左递归的产生式转换成用扩展BNF表示法表示的产生式。 ① 提公因子 每当一条产生式中有公因子可提的时候,就把它提出来,若原产生式是 A→x|xy 则可写成 A→x(y|ε),这里把ε当作最后一个候选式。 这样,把本来具有相同开始符号的候选式变成了开始符号不同的候选式,从而避免了实现分析过程中的逐个试探,并且有助于消除文法的直接左递归,同时也压缩了文法的长度。 ② 若 A→x|y|…|z|Av 是一组产生式,且它只有一个直接左递归的右部位于最后,则可把这组产生式变换成如下形式: A→(x|

文档评论(0)

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

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档