第4章 语法分析-1-自顶向下分析.ppt

  1. 1、本文档共51页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
3.对G’构造相应的LL(1)分析表 first Follow S {a,b} {#} S’ {b,ε} {#} A {a} {b} A’ {a,ε} {b} a b # S S?AbS’ S?bS’ S’ S’?bS’ S’?ε A A?aA’ A’ A’?aA’ A’? ε * * 4.给出句子aabbb的分析过程 步骤 分析栈 余留输入串 产生式 1 #S aabbb# S?AbS’ 2 #S’bA aabbb# A?aA’ 3 #S’bA’a aabbb# 4 #S’bA’ abbb# A’?aA’ 5 #S’bA’a abbb# 6 #S’bA’ bbb# A’? ε 7 #S’b bbb# 8 #S’ bb# S’?bS’ 9 #S’b bb# 10 #S’ b# S’?bS’ 11 #S’b b# 12 #S’ # S’?ε 13 # # * 自顶向下分析 1自顶向下分析法概述 2自顶向下分析面临的问题 3消除左递归和回溯 4 LL(1)文法 5 递归下降分析法 6预测分析(LL(1)分析)法 7 非LL(1)文法的改造 * * 作业 4-1 4-2 4-4 4-8 4-9 设文法的非终结符为 X1, X2, …, Xn, 其中,Xi的产生式可分为以VN符和VT符打头的两类.类似正规式方法,将‘|’改写为‘+’,有 Xi=X1?1i+X2?2i+…+Xn?ni+? i 其中 ?i是以VT符打头的产生式之和, ?ki 可以为? 这样,文法G可表示为 该方程有解: X=BA* 为得到A*,由 或: X=XA+B 则有: X=BZ Z=I+AZ 其中X的产生式以VT符打头,而Z的产生式以?ij?V*打头,因此将不含左递归. 注意,由此所得的文法含有无用符号和无用产生式,需化简 * 4.1.1 消除文法的左递归--矩阵方法 * 消除文法左递归的例子 例4.1 S?Sa | Ab | a A?Sc 相应的矩阵为 展开矩阵,得 S ?aZ11 A ?aZ12 Z11?aZ11 |cZ21|? Z12? aZ12 |cZ22 Z21 ? bZ11 Z22 ? ? | bZ12 文法中含有无用产生式,消除之.最后,有 S ?aZ11 Z11?aZ11 |cZ21|? Z21 ?bZ11 搞掂! * * 4.1.2 回溯的消除及LL(1)文法 设G=(VN,VT,P,S) 为一CFG, w=a1a2…an是VT上的符号串,现需判明w是否是L(G)中的句子.为此,从S开始进行最左推导.设经若干步推导后我们得到 注意,i=1时,w1=?,A=S 由假设可知,到目前为止,w的前缀w1已匹配,现在需对A?进行推导. 对于当前输入符号ai,若只有一个 ?j (称为候选式)使得从?j?出发可以推导出一个以ai打头的符号串: 而其它的?k(k?j), ?k ?都推导不出以ai打头的符号串,则选定产生式A??j就是唯一可行的推导,即 w?L(G)?选A??j正确; w?L(G)?选任何产生式均不能匹配 显然,若P中产生式能满足上述要求,则回溯可消除 * * 消除回溯的条件之一First集的引入 要实现无回溯的?分析,文法必须满足一定的条件。为导出这些条件, 定义候选式的终结首符号集 FIRST(?)={a | ? a?, a?VT,??V*} 并约定 ? ?时,??FIRST(?) 若对于A-产生式的每个候选式?i(i=1,2,…,m)都推不出 ?, 且 FIRST(?i) 互不相交,则当正扫描的当前输入符号为ai?FIRST(?j)时,唯一可用于推导的产生式只能是A??j. * * 消除回溯的条件举例 例如,文法G1[S]: S?AA A?aAb | * A-产生式有两个候选式, 且 FIRST(aAb)={a} FIRST(*)={*}, 设输入串为aa*bb*,其最左推导如右所示: 注:上面第每步推导右侧括号内为当前扫描的输入符号,#为结束符 无回溯的条件之一: S?AA (a) ?aAbA (a) ?aaAbbA (*) ?aa*bbA (*) ?aa*bb* (#) * * FIRST(?i) ?FIRST(?j)=? 消除回溯的条件之二Follow集的引入 然而还存在另外一种情况,可能存在某个候选式?i, ?i ?,即??FIRST(?i),此时,为匹配当前扫描的符号a就可能有两种选择,一是存在某?j,使?j推导出以a打头的符号串,另一种选择是让A推导出?i,并让跟随在A后的符号串推导出以a打头的符号串. 若

文档评论(0)

xingyuxiaxiang + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档