第四章3-递归下降法.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文档。上传文档
查看更多
第四章3-递归下降法

自顶向下分析——递归下降法 递归下降法(Recursive-Descent Parsing) 优点:最易懂 缺点:要频繁调用子程序,分析速度低, 且对文法的限制有些严格。 自顶向下分析——递归下降法 递归下降法(Recursive-Descent Parsing) 原理:对每个非终极符按其产生式结构产生相应语法分析子程序.其中 终极符产生匹配命令 非终极符则产生调用命令 特点:文法递归相应子程序也递归,所以称这种方法为递归子程序方法或递归下降法。 递归下降法 递归下降法/递归子程序法 基本分析操作: ReadToken:从输入流把下一个TOKEN码读到token中; Match(a):检查token=a?若是,则执行ReadToken,否则报错并停机。 当产生式中形如: A ? ?1| ?2| …| ?n 则按下面的方法编写子程序A: procedure A( ) begin if token?Predict(A??1) then ?(?1) else if token?Predict(A??2) then ?(?2) else …… if token?Predict(A??n) then ?(?n) else err( ) end 其中对?i=X1X2…Xn,?(?i) = ?’(X1);?’(X2);…;?’(Xn); 如果Xi?VN,?’(Xi)= Xi 如果Xi?VT,?’(Xi)= Match(Xi) 如果Xi= ? , ?(?) = skip(空语句) 当产生式中形如: A ? ?1| ?2| …| ?n 则按下面的方法编写子程序A: procedure A( ) begin if token?Predict(A??1) then ?(?1) else if token?Predict(A??2) then ?(?2) else …… if token?Predict(A??n) then ?(?n) else err( ) end 其中对?i=X1X2…Xn,?(?i) = ?’(X1);?’(X2);…;?’(Xn); 如果Xi?VN,?’(Xi)= Xi 如果Xi?VT,?’(Xi)= Match(Xi) 如果Xi= ? , ?(?) = skip(空语句) 注意 三个子程序 Z(), B(), Match(x) Match(x) : x是形参 { if token=x then readtoken, 把当前字符读到变量 token中 else err(); } 符合文法的字符串:ab*ca 注意 对于具有多个产生式的非终极符,可用Case语句进行多分支选择 到底选择哪个产生式进行分析呢?   产生式A→?被选择的条件是:  当前要匹配的输入符属于predict(A→?)。 问题 例如: 文法中有:A →ac           A → ab A的两个产生式的预测集合中都有a,该调用哪个产生式呢? Swithc(symb){    case a:{….}    case a:{….} } 递归子程序方法要求的条件 predict(A→?k)? predict(A→?j )= ?, 当k ? j 结论 如果文法中每个非终极符只有一个产生式,则没有上述限制。因为其递归下降子程序中没有多分支的选择问题。 递归下降条件是针对具有多产生式的非终极符而言的。 冲突 定义 Predict(A→?) = First(?) ,     当??First(?)  = (First(?)-{?})?Follow(A) ,当??First(?) predict(A→

文档评论(0)

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

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

1亿VIP精品文档

相关文档