网站大量收购独家精品文档,联系QQ:2885784924

编译原理第五章语法分析-自底向上分析方法.pptVIP

编译原理第五章语法分析-自底向上分析方法.ppt

  1. 1、本文档共69页,可阅读全部内容。
  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文档。上传文档
查看更多
第五章 自底向上分析方法 主要内容 自底向上分析的基本思想 简单优先分析方法 LR类分析方法 例:S ? aAcBe [1] A ? b [2] A ? Ab [3] B ? d [4] 输入流:abbcde。 规范推导过程为: 简单优先分析 一种shift-reduce分析方法 根据文法符号的优先关系确定句柄 文法符号的优先关系的确定 文法优先关系的确定 FIRST(W) ={S | W ?+ S…,S?(VN?VT)} LAST(W) ={S | W ?+ …S,S?(VN ?VT)} 若有U?…SiSj…: 则有Si ? Sj ; 若有U?…SiW…:任Sj?FIRST(W),有Si ? Sj 若有U?…VW…:任Si?LAST(V), Sj?(FIRST(W) ?{W})则有Si ? Sj 输入流的开始和结束标志 ‘#’,文法的开始符为Z, S?FIRST(Z),有# ? S,; 且# ? Z S?LAST(Z),有S ? #,; 且Z ? # 优先关系矩阵 一个文法的全部优先关系可以用矩阵来表示,称作优先关系矩阵。 例: Z ? bMb M ? a M ? (L L ? Ma) 定理: 设X1…XiXi+1…Xj…Xn是一个句型,若有 Xi ?Xi+1 ?Xi+2 ?… ?Xj-1 ?Xj ?Xj+1 则Xi+1Xi+2…Xj-1Xj一定是该句型的简单短语。 结论: ?用来确定句柄的头; ?用来确定句柄的内部; ?用来确定句柄的结束。 简单优先分析算法要点 找第一个使Sj?Sj+1的Sj 从Sj开始往前(左)找第一个使Si-1?Si的Si 用SiSi+1…Sj去查产生式的右部,并用相应的左部符号代替句柄SiSi+1…Sj (归约) 。 重复上述过程,直至输入符结束。如果归约出文法的开始符号则成功。否则失败。 简单优先分析实例 活前缀的描述性定义:形成可归前缀之前,包括可归前缀在内所有规范句型的前缀都称为活前缀。 活前缀 为一个或若干规范句型的前缀。 在规范归约过程中的任何时刻已分析过的部分,即在分析栈(符号栈)中的符号串均为规范句型的活前缀,表明输入串的已被分析过的部分是该文法某规范句型的一个正确部分。 派生定理 开始符产生式的右部是归约活前缀。 如果?A?是归约活前缀,且A→?是产生式, 则??也是归约活前缀。 任何归约活前缀,都可按上述方式被派生。 设文法开始符的产生式是: S →?1|?2|…|?n RPSG={?1,…,?n}?{??|?A??RPSG,A→??P} 例有文法G[S]: S → aAc [1] A → Abb [2] A → b [3] LR(0)项目:若A→??是产生式, 则称A→???为LR(0)项目(简称项目),也 写作???[p]形式。 项目集的投影:假设IS是LR(0)项目集,则 称下面IS(X) 为IS关于X的投影集: IS(X) = {A→?X?? |A→??X??IS, X?(VT?VN)}. 项目集的闭包:假设IS是LR(0)项目集,则 称下面CLOSURE(IS)为IS的闭包集: CLOSURE(IS)= IS ? {A→?? | Y→??A??CLOSURE(IS) A→?是产生式 } 构造LR(0)活前缀状态机LRSM的算法要点 构造初始状态IS0:IS0=CLOSURE({Z→?S}),并给IS0标上NO。 从已构造的LRSM部分图选择被标为NO的任一状态IS,并做 [1] 对每个符号X?VT?VN,做下面动作: 1) 令ISj = CLOSURE( IS(X))。 2) 若在LRSM部分图中已有ISk与ISj有相同项目 集,则令m=k;否则构造ISj的状态点ISj, 并给ISj标上NO,同时令m=j。 3) 在IS和ISm之间画有向X边:IS ISm 。 [2] 给IS标上OK。 重复上一步骤,直至没有被标记为NO的状态结点为止。 例:构造LR(0)状态机 S ? E $ E ? E + T E ? T

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档