语法分析递归下降法教学课件.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第三章:语法分析 递归下降法 1.1 递归下降法的基本原理 递归下降法(Recursive-Descent Parsing) 对每个非终极符构造相应的一个子程序(称为语法分析子程序),其功能是识别、分析该非终极符所能推导出的字符串. 1.2 对文法的要求 为了保证推导的唯一性,对文法的要求与LL(1)文法相同。即对于文法G中任一非终极符A,其任意两个产生式A??和A??,都要满足下面条件: Predict(A??)?Predict(A??)=? 2.语法分析程序的构造 两个标准函数 ReadToken:把输入流的头符读入变量 token中 Match(a): if token=a then ReadToken else 出错 2.语法分析程序的构造 当产生式形如: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 error( ) end 其中对?i=X1X2…Xn,?(?i)=?(X1);?(X2);…;?(Xn); 如果X?VN,?(X)= X(); 如果X?VT,?(X)= Match(X); //即if(token==X)ReadToken(); 如果X= ?,?(?) = skip(空语句). 2.语法分析程序的构造 主程序: void main(){ ReadToken(); S( ); if (token==#) 成功; else 失败 } 2.语法分析程序的构造 具体构建流程 给定一个文法G 求每条规则的Predict集 写针对每个非终极符的函数 写主函数 例: E? ? T E’ E’ ? + T E’ | ? T ? F T’ T’ ? * F T’ | ? F ? i | ( E ) procedure E’ ( ) begin if token=“+” then Match(+); T; E’ else if token? { ) , # } then skip else err( 2 ) end; procedure T’ ( ) begin if token=“ * ” then Match( * ); F; T’ else if token? { +,) , # } then skip else err( 4 ) end; procedure F ( ) begin if token=“ i” then Match( i ) else if token=“(” then Match( ( ); E; Match( ) ) else err( 5 ) end; * * 例如:一条产生式: While_Stm→while Exp do Stm 则对应产生式右部的

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档