《编译原理课程教案》第4章(1)自上而下语法分析讲解.pptVIP

《编译原理课程教案》第4章(1)自上而下语法分析讲解.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文档。上传文档
查看更多
* 根据语法结构来编写函数。语法结构用文法规则给定。 4.5 预测分析程序 递归下降分析法:采用递归过程。因此实现分析程序所使用的高级语言必须支持递归过程才行。 预测分析法是自顶向下分析的另一种方法。 使用下推自动机的方式实现。 使用一个二维分析表和栈联合进行控制来实现分析。 预测分析器模型 预测分析器的组成: 预测分析程序(与文法无关) 先进后出栈 预测分析表-与文法有关 分析表M: 是一个从VN?(VT?{#})到产生式的映射。在分析时遇到A和a时,应该选择M[A,a]中存放的产生式。如果M[A,a]为空,表示出现语法错误。 分析表格式: i + * ( ) # E ?TE ?TE E ?+TE ? ? ?? T ?FT ?FT T ? ? ?*FT ? ? ?? F ?i ?(E) 第1列为非终结符 第1行为终结符+’#’ 每个元素为产生式或空 E ?TE E ? +TE |ε T ? FT T ? *FT |ε F ?(E) |i 总控程序: 将’#’压入堆栈中,将开始符号S压入堆栈中 读取第一个输入符号到a; 循环执行下述操作: 栈顶符号弹出放入X中; 如果X为终结符号: 如果X == a != ‘#’,表明成功匹配a符号; 读取下一个符号到a,否则出错; 如果X == ‘#’ 如果X == a ,分析结束,接受句子。 如果 X!= a ,出错处理。 如果X为非终结符号, 则查分析表M: 如果M[X,a]为空,出错处理。 如果M[X,a]=‘X1 X2…Xn ’, 则: 将右部Xn …X2 X1反序压入堆栈中。 1 #E i+i*i# E?TE? 预测分析过程 下面用预测分析方法对输入串i+i*i # 进行分析,给出栈的变化过程如下: 2 #E?T i+i*i# T?FT ? 3 #E?T?F i+i*i# F?i 4 #E?T?i i+i*i# i匹配 5 #E?T? +i*i# T??ε 6 #E? +i*i# E??+TE? 7 #E?T+ +i*i# +匹配 E ?TE E ? +TE |ε T ? FT T ? *FT |ε F ?(E) |i i + * ( ) # E ?TE ?TE E ?+TE ? ? ?? T ?FT ?FT T ? ? ?*FT ? ? ?? F ?i ?(E) 步骤 分析栈 剩余输入串 所用产生式 8 #E?T i*i# T?FT 9 #E?T?F i*i# F ? i 10 #E?T?i i*i# i匹配 11 #E?T? *i# T? ? *FT? 12 #E?T?F* *i# *匹配 13 #E?T?F i# F ? i 14 #E?T?i i# i匹配 15 #E?T? # T? ? ε 16 #E? # E? ? ε 17 # # 接受 i + * ( ) # E ?TE ?TE E ?+TE ? ? ?? T ?FT ?FT T ? ? ?*FT ? ? ?? F ?i ?(E) i + * ( ) # E ?TE ?TE E ?+TE ? ? ?? T ?FT ?FT T ? ? ?*FT ? ? ?? F ?i ?(E) 构造预测分析表 预测分析过程的总控程序是固定的。对于某个文法,分析表是分析过程的核心。 表中M[A,a]= ?A→X1X2…Xn ?表示对应于X1X2…Xn字的首终结符可以是a。就是说X1X2…Xn=aw。可以通过这个方式来确定分析表中的值。(即:求首终结符) * 预测分析表的构造算法 对文法的每个文法符号X构造First(X) 对于每一产生式 A→α, 对于每个终结符a∈First(α),将A→α填入 M[A,a]; 如果ε∈First(A),则构造Follow(A),对任何元素 b∈Follow(A),将A→α填入M[A,b]; 将所有无定义的 M[A,a] 标上错误标志。 如果文法是LL(1)文法,其预测分析表中没有多重定义的元素,可以进行确定的分析。 例:求对应于下述文法的预测分析表: 1.首先求first集 E ?TE E ? +TE |ε T ? FT T ? *FT |ε F ?(E) |i First(E) = { ( ,i } First(E) = {+,ε} First(T) = { ( ,i } First(T) = {*, ε} First(F) = { ( ,i } 2.由于ε?First(E), ε?First(T), 求E和T的Follow集 Follow(E) = {#,)} Follow(T) ={#,),+} 3.根据集合的值填表,得到 i + * ( ) # E ?TE ?TE E ?+TE ? ? ?? T ?FT ?FT T ? ? ?*FT

文档评论(0)

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

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

1亿VIP精品文档

相关文档