第09章自上而下的语法分析详解.pptxVIP

  1. 1、本文档共48页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
1 第9章 自上而下的语法分析 9.1 引言 9.1.1 语法分析的任务 语法分析对源程序经过词法分析后转换成的符号串(即单词符号的序列),按文法规则进行判断,对能构成正确句子的符号串,给出相应的语法树;对不能构成正确句子的符号串,判定其出现了语法错误,并作出适当的处理。 2 语法分析程序的功能 3 9.1.2 语法分析的分类 (1) 自上而下的语法分析 对给定的上下文无关文法G(Vt,Vn,S,P)及符号串ω(ω∈Vt*),按照以下方法判断ω是否是文法G的一个合法句子: 从根结点S开始,根据最左推导,看能否向下构造一棵语法树,使得该语法树的边缘正好是ω。 4 (2) 自下而上的语法分析 对给定的上下文无关文法G(Vt,Vn,S,P)及符号串ω(ω∈Vt*),按照以下方法判断ω是否是文法G的一个合法句子: 从语法树边缘ω开始,根据最左规约,看能否向上构造一棵语法树,使得该语法树的根结点正好是S。 5 9.1.3 语法分析的方法 自上而下的语法分析方法 回溯分析法 递归下降分析法 预测分析法 自下而上的语法分析方法 算符优先分析法 LR分析法 6 9.2.1 回溯分析实例 实例1. 文法G(S): S → xAy A → ab│a 对输入串 xay 的分析过程为 9.2 回溯分析法 7 8 实例2. 文法G(S): S→Sa S→b 对输入串 baa 的分析过程为 9 10 9.2.2 引起回溯的原因 (1) 存在公共左因子 A→1 | 2 (2) 存在左递归 直接左递归:A→Aα 间接左递归:A →Bα和 B→A 11 当选用一个候选式来试探与输入串的匹配可能时,很可能会遇到匹配失败的情况,这时需回溯到这一次试探前的现状,包括注销已生长的子树,输入串的待匹配指针指针回退到失败前的位置,以便选取其它的候选式。 12 回溯分析法实际上是一种试探的方法,其分析效率是非常低的。特别是当匹配失败发生在多级试探后,逐级回溯的开销是令人难以忍受的。 为避免回溯,可对文法进行等价改造,消除公共左因子和左递归。 13 9.2.3 公共左因子的消除 将A→1 | 2 | δ 改写为 A→B |δ B→ 1| 2 一般形式: 将A→1 | 2 | ... | m | δ1 | δ2 | ... | δn 改写为 A→B | δ1 | δ2 | ... | δn B→ 1| 2| ... |m 14 例如文法 S→xAy A→ab│a 可改写为 S→xAy A→aB B→b│ 15 9.2.4 左递归的消除 (1)直接左递归的消除 将P→Pα|β 改写为 P→P’ P’→αP’│ε 一般形式: 将A→A1 | A2 | … | Am | 1 | 2 | … | n (I ε,j不以A开头) 改写为 A→1P’│ 2P’│. . .│ nP’ P’ →1P’│2P’│. . .│mP’│ε 16 (2)间接左递归的消除 对存在间接左递归的文法G: Ax → Ay… … Ay → Az… … Az → Ax… 按以下算法消除间接左递归: 17 消除间接左递归算法 1) 将文法G的所有非终结符按任一给定的顺序排列,设为A1,A2,…,An 2) 改造产生式,消除左递归 for i:=2 to n do for j:=1 to i-1 do 消除形如AiAj的产生式; 3) 去掉无效的符号和产生式 18 消除形如AiAj的产生式的方法 1) 将 AiAj 改写为 Ai1 | 2 | … | k (Aj1 | 2 | … | k是Aj的所有产生式) 2) 消除新引入的直接左递归。 19 例子:消除间接左递归 S→Qc│c Q→Rb│b R→Sa│a 文法产生的语言:{ c, bc, abc, cabc, bcabc, abcabc, cabcabc, bcabcabc, abcabcabc, …} 20 按R、Q、S排列,改造文法 R→Sa│a Q→Sab│ab│b S→Sabc│abc │bc│c 消除S中的直接左递归 S→abcS’│bcS’│cS’ S’→abcS’│ 文法产生的语言: { c, bc, abc, cabc, …} R→Sa│a Q→Rb│b S→Qc│c 21 按S、Q、R排列,改造文法 S→Qc│c Q→Rb│b R→

文档评论(0)

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

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

1亿VIP精品文档

相关文档