网站大量收购闲置独家精品文档,联系QQ:2885784924

第09章 自上而下的语法分析讲解.pptx

  1. 1、本文档共48页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
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精品文档

相关文档