第5章语法分析-自底向上分析.pptVIP

  1. 1、本文档共47页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第5章语法分析-自底向上分析

第5章 语法分析——自底向上分析 ;5.1 规范推导、规范句型和规范归约;5.2自底向上分析方法的一般过程 ;步骤 ;5.2自底向上分析方法的一般过程;5.3 LR分析方法 ;5.3.1 LR分析器逻辑结构 ;5.3.2 LR分析表的构成 ;5.3.2 LR分析表的构成;5.3.2 LR分析表的构成;5.3.3 LR分析过程 ;5.3.3 LR分析过程;5.4 LR(0)分析方法 ;5.4.1活前缀和可归前缀 ;5.4.1活前缀和可归前缀;LR分析过程中,如果输入符号串没有语法错误,则在分析的每一步,若将符号栈中的全部文法符号与剩余的输入符号串连接起来,得到的一定是所给文法的一个规范句型。也就是说,压入符号栈中的符号串一定是某一规范句型的前缀,而且这种前缀不会含有任何句柄右边的符号,所以都是活前缀。当符号栈形成句柄,即符号栈的内容为可归前缀时,就会立即被归约。所以说,LR分析就是逐步在符号栈中产生可归前缀,再进行归约的过程。 ;5.4.2 LR(0)项目 ;5.4.2 LR(0)项目 ;第5章 语法分析——自底向上分析 ;2、项目有效性 项目就是对规则的右部标记了圆点,而且,圆点位置不同代表不同的项目,那么项目有什么含义呢?这就是项目的有效性。 一个项目A→α1·α2对于某个活前缀λ α1是有效的,当且仅当存在某个最右推导。 S =|*= λAt =|= λα1·α2t ,其中t是终结符号串。 在LR分析过程中,活前缀就是符号栈的内容,是已经读入的符号,它不包含句柄右边的任何符号。 活前缀和句柄的关系有三种:活前缀包含句柄、含有句柄的一部分或不含句柄的任何符号。 ;第5章 语法分析——自底向上分析 ;第5章 语法分析——自底向上分析 ;第5章 语法分析——自底向上分析 ;5.4.3 构造识别活前缀的有穷自动机 ; 1、???? 项目集的闭包运算 设I为一项目集,I的闭包运算CLOSURE(I) 定义如下: I中的每一个项目都属于CLOSURE(I)。 如项目A→α1·Xα2属于CLOSURE(I),且X为非终结符号,则将形式为X→.λ的项目添加到CLOSURE(I)中。 重复(1)和(2),直到CLOSURE(I)封闭为止。 ;5.4.3 构造识别活前缀的有穷自动机;5.4.3 构造识别活前缀的有穷自动机;例5.7,有文法:E ’::=E,E::=E+T,E::=T,T::=T*F,T::=F,F::=(E),F::=i 有项目集I={E’→ E.,E→ E.+T}, 求GO[I,+] 解:在I中挑出点后是+的项目有:E→ E.+T,将点移到+后面得J={E→ E+.T} 对J进行闭包运算得 CLOSURE(J)={E→ E+.T,T→.F,T→.T*F, F→.(E), F→.i} GO(I,+) ={E→ E+.T,T→.F,T→.T*F, F→.(E), F→.i} 用状态图表示为: ;5.4.3 构造识别活前缀的有穷自动机; 接下来构造C0的后继项目集。观察状态0的项目集C0的每个项目,发现点后的符号即后继符号为A、(、a,说明项目集C0有3个后继项目集C1 (GO[0,A]) 、C2 (GO[0,(]) 、C3 (GO[0,a]) ,即状态0有3条弧线指向状态1、2、3,弧线上分别标记符号A、(、a。下面介绍项目集C1、C2、C3的构造: ;5.4.3 构造识别活前缀的有穷自动机;5.4.3 构造识别活前缀的有穷自动机;状态 ;5.4.3 构造识别活前缀的有穷自动机;1) 生成开始项目集: ① 赋给开始项目集一个下标0,然后将项目S→.δ放入集合C0,对应的状态为0。 ② 对该项目集执行闭包运算,即找到在圆点之后的非终结符X,将形式为X→.δ的项目放置到集合中,其中X→δ是文法G的一个产生式。该闭包运算也要对所有导出的新项目进行。 2) 生成LR(0)的所有项目集C:重复第3到第4步,直到再没有新的项目集出现。 3) 对一个项目集Ci求后继项目集Cj,构造项目集的转换: ① 对项目集Ci中的每个后继符号X进行读操作,生成一个新的项目集Cj,且 GO[Ci,X]= Cj。 ② 如果该项目集已经存在,则Cj就是已经存在的项目集;否则,得到一个新的基本项目集Cj; 4) 对新的项目集进行闭包运算。 ;5.4.3 构造识别活前缀的有穷自动机; 5.4.4 LR(0)分析表的构造 ; 1) 若项目A→α.aβ∈Ci且GO[Ci,a]= Cj,其中a为终结符,置ACTION[i,a]=“把状态j

文档评论(0)

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

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

1亿VIP精品文档

相关文档