编译原理—清华大学—第2版_第5章自顶向下语法方法素材.pptVIP

编译原理—清华大学—第2版_第5章自顶向下语法方法素材.ppt

  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文档。上传文档
查看更多
(2)消除间接左递归 将间接左递归变为直接左递归,然后消除直接左递归。 A→aB A→Bb B→Ac B→d A→aB A→Bb B→aBc B→Bbc B→d A→aB A→Bb B→aBcB | dB B→bcB |ε 5.5 确定的自顶向下分析方法 1.递归子程序法 2.预测分析法 1.递归子程序法 递归下降法(Recursive-Descent Parsing) 对每个非终结符按其产生式结构产生相应语法分析子程序. 终结符产生匹配命令 非终结符则产生调用命令 文法递归相应子程序也递归,所以称这种方法为递归子程序方法或递归下降法。 假设有文法 Z→aBa B→bB|c 则相应的递归子程序可如下: procedure Z( ) begin if token=a then Match(a); B; Match(a) else error end; procedure B ( ) begin if token=b then Match(b); B; else if token=c then Match(c); else error end; 主程序:Begin readtoken Z end PROCEDURE match(t); BEGIN ???? IF token=t ???? THEN token:=nexttoken ???? ELSE error ? END; 2.预测分析法 一. 基本思想 预测分析是在每步推导中,对被替换的非终结符号A和当前向前看符号a能选择A的某条产生式进行推导。 非递归预测分析的基本思想是,根据文法G,构造一张分析表M,表中元素M[A,a]存放的,要么是被选择的产生式(正确分析情况);要么是出错处理程序入口(分析出现错误)。整个分析是在分析表M的驱动下完成的。 二、预测分析表的构造 1.对文法G的每个产生式A??执行第2步; 2.对每个终结符号a∈SELECT(A??),把 A??加至M[A,a]中; 3.把所有无定义的M[A,a]标上错误标记。 置ip指向w#的第一个符号,#进栈,S(开始符号)进栈 ??? ?repeat ??? 令X是栈顶符号,a是ip所指向的符号; ? ?? if X是一个终结符号或#then ????? ?? if X=a then ?????? ????? 把X从栈中弹出,并且更新ip ????????? else error() ???? else /*X是非终结符号*/ ???? if M[X,a]= X→Y1Y2…Yk then begin ?????????? 把X从栈中弹出; ?????????? 把Yk,Yk-1,…, Y1压入栈中,即Y1在顶上; ?????????? 输出产生式X→Y1Y2…Yk ???? end ?????else error() ???until X=# /*栈为空*/ 三、预测分析程序 例 G:E →E+T | T T →T*F | F F → i | ( E ) 试分析输入串i+i*i是否是句子. 1.将文法转换为LL(1)文法 E →E+T | T T →T*F | F F → i | ( E ) 消除左递归 E →TE E → +TE | ε T →FT T → *FT | ε F → i | ( E ) 可推出ε的非终结符表: E →TE E → +TE | ε T →FT T → *FT | ε F → i | ( E ) E E T T F 是 是 否 否 否 各非终结符的FIRST集和FOLLOW集: FIRST(E)= FIRST(E)= FIRST(T)= FIRST(T)= FIRST(F)= FOLLOW(E)= FOLLOW(E)= FOLLOW(T)= FOLLOW(T)= FOLLOW(F)= E→TE E→+TE|ε T→FT T→*FT|ε F→i|( E ) { ( , i } { + , ε } { ( , i } { * , ε } { ( , i } { ) , # } { ) , # } { + , ) , # } { + , ) , # } { * , + , ) , # } 各产生式的SELECT集: E →TE E → +TE | ε T →FT T → *FT | ε F → i | ( E ) SELECT(E →TE) = SELECT(E → +T

文档评论(0)

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

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

1亿VIP精品文档

相关文档