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

ch5自顶向下语法分析(张素琴).ppt

  1. 1、本文档共70页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 七、预测分析的错误恢复 1、发现错误 ①栈顶的终结符与当前输入符不匹配 ②非终结符A位于栈顶,面临的输入符为a,但分析表M的M[A,a]为空 2、“应急”恢复策略 跳过输入串中的一些符号直至遇到“同步符号”为止。 * 3、同步符号的选择 ①把FOLLOW(A)中的所有符号作为A的同步符号。跳过输入串中的一些符号直至遇到这些“同步符号”,把A从栈中弹出,可使分析继续 ②把FIRST(A)中的符号加到A的同步符号集,当FIRST(A)中的符号在输入中出现时,可根据A恢复分析 * ③可以把表示语句开始的一些关键字加入到同步记号集中 ④如果栈顶的终结符不能被匹配,就可以弹出该终结符,此时相当于把所有的符号都看作同步符号 用synch 表示由相应非终结符的FOLLOW集得到的同步符号,则前面的预测分析表变为: * FOLLOW(F)=FIRST(E’} ∪FIRST(T’) ={+,),*, ε} FOLLOW(T’)=FOLLOW(T) =FIRST(E’) ∪FOLLW(E) ={+,), # } FOLLOW(T)=FIRST(E’) ∪FOLLOW(E) ={+,), #} FOLLOW(E’)=FOLLOW(E)={), #} * 非终结符 输入符号 E E’ T T’ F id * ( ) # + E→TE’ E→TE’ E’→+TE’ E’ → ε E’ → ε T→FT’ T→FT’ T’ → ε T’ → ε T’ → ε T’ →*FT’ F→(E) F→id 不含错误处理的分析表 * 非终结符 输入符号 E E’ T T’ F id * ( ) # + E→TE’ E→TE’ E’→+TE’ E’ → ε E’ → ε T→FT’ T→FT’ T’ → ε T’ → ε T’ → ε T’ →*FT’ F→(E) F→id 加入错误处理的分析表 synch synch synch synch synch synch synch synch synch * 5.6 典型例题与解答 学p96-99,然后做小测验题。 * 小测验: ?1. 已知文法G[S]: S→MH|a H→LSo|ε K→dML|ε L→eHf M→K|bLM 判断G是否是LL(1)文法,如果是,构造LL(1)分析表。 2. 对文法G[S] S→a|∧|(T) T→T,S|S (1)给出(a,(a,a)) 和(((a,a), ∧,(a)),a)的最左推导。 (2)对文法G进行改写,改写后的文法G’是否LL(1)? 若是,给出它的LL(1)预测分析表,并描述对输入串(a,a)#的分析过程。 * 3. 对于一个文法若消除了左递归,提取了左公共因子后是否一定为LL(1)文法?试对下面文法进行改写,并对改写后的文法进行判断。 (1) A→aABe|a B→Bb|d (3) S→Aa|b A→SB B→ab * * * * 在此处还没有要求文法的类型 * 因此下面就具体地讲解如何解决这两个问题 * * FIRST(aA)={a} FIRST(bA)={b} FIRST(cA)={c} FIRST(ε)={ε} FOLLOW(A)=FOLLOW(B)={#,d} * * 例1:对于文法G[E] E→TE’ E’ → +TE’|ε T →FT’ T’→*FT’| ε F→(E)|id 求每个非终结符的 FIRST和FOLLOW集 解:FIRST(F)={(,id} FIRST(T’)={*, ε} FIRST(T )= FIRST(F) = {(,id} FIRST(E’)={+, ε} FIRST(E)=FIRST(T) ={(,id} * FOLLOW(F)= FIRST(T’) ∪FOLLOW(T’) ={+,),*, #} FOLLOW(E)={), #} E是识别符号 FOLLOW(E’)=FOLLOW(E)={), #} FOLLOW(T’)=FOLLOW(T) =FIRST(E’) ∪FOLLW(E) ={+,), # }  求FOLLOW(E),要看E在哪条规则右部出现 E→TE’ E’ → +TE

文档评论(0)

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

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

1亿VIP精品文档

相关文档