第5章 语法分析自下而上分析.pptVIP

  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文档。上传文档
查看更多
* 算符优先分析 假定G是一个不含?-产生式的算符文法。对于任何一对终结符a、b,我们说: (1) a??b 当且仅当文法G中含有形如P ?…ab…或P ?…aQb…的产生式; (2) a?b当且仅当G中含有形如P ?…aR…的产生式,R而R?+b…或R ?+Qb…; (3) a?b当且仅当G中含有形如P ?…Rb…的产生式, R而R?+…a或R ?+…aQ; 如果一个文法G中的任何终结符对(a, b )至多只满足下述三关系之一: a=·b, a·b, a·b 则称G是一个算符优先文法(OPG)。 * 算符优先分析 算符文法和算符优先文法定义的意义 这两个定义相当于对文法的句型和可归约的短语做了如下规定: 设A1A2…Ai-1AiAi+1…An是文法G的一个句型, 1、若Ai?VN,则Ai-1、Ai+1 ?VT,即不许出现相继两个非终结符; 2、若B1B2…Bm是当前可归约短语,并可归约为Ai,则: B1B2…Bm中不能有相继两个非终结符且相邻的终结符优先级全相等; 对于B1B2…Bm中首终结符b有Ai-1·b 对于B1B2…Bm中尾终结符b有b ·Ai+1. 注:实际上,可归约短语是某产生式右部符号串,所以通过检查G的每个产生式的每个候选式,可以查找出任意优先级相同的终结符序偶。要找出所有满足关系 ·和·的终结符序偶 ,就要找出各非终结符P的首终结符集和尾终结符集。 * 算符优先分析 求各非终结符P的首终结符集和尾终结符集 通过检查G的每个产生式的每个候选式,可以找出满足a=·b的终结符对。为了找出所有满足关系·和·的终结符对,我们需要对G的每个非终结符P 构造两个集合首终结符集FIRSTVT(P)和尾终结符集LASTVT(P): FIRSTVT(P)={a | P?+a…或P ?+Qa…,a?VT而 Q ?VN } LASTVT(P)={a | P?+…a或P ?+…aQ,a?VT而 Q ?VN } 有了这两个集合后,就可以通过检查每个产生式的候选式确定满足关系·和·的所有终结符对。例如:假定有个产生式的一个候选式为 …aP… 那么,对任何b?FISTVT(P),我们有a·b。 类似地,假定有产生式的一个候选式为 …Pb… 那么,对任何a?LASTVT(P),我们有a·b. * 算符优先分析 [例]:设文法G的产生式为: S ?aAcBe A ?Ab|b B ?d 计算每个非终结符的FIRSTVT与LASTVT及所有终结符之间的关系。 解:FIRSTVT(S)={a} LASTVT(S)={e} FIRSTVT(A)={b} LASTVT(A)={b} FIRSTVT(B)={d} LASTVT(B)={d} e d c b a e d c b a 左 右 * 算符优先分析 构造算法 下面讨论构造集合FIRSTVT(P)的算法。 方法1: 按定义,我们可用下面两条规则来构造集合FIRSTVT(P): 若有产生式P?a…或P ?Qa…,则a?FIRSTVT(P) 若a?FIRSTVT(Q),且有产生式P ?Q…,则a?FIRSTVT(P). 方法2: 在此算法中使用了两个数据结构 (不要求掌握) 一个是二维布尔矩阵F,行标为非终结符P,列标为终结符a;F[P,a]=true,当且仅当a ?FIRSTVT(P); 另一个是堆栈STACK,栈中动态存放曾在F[P,a]中为真的序偶(P,a)。 算法如下: * 算符优先分析 构造算符优先表算法 (1)初始化:将布尔矩阵F中各元素置为假;栈清空; (2)按规则1,查看产生式,对于形如 P ?a…或P ?Qa…的产生式,置相应的F[P,a]为真,并将序偶(P,a)入栈; (3)按规则2,对栈施加如下操作: 弹出栈顶序偶并记为(Q,a),查看所有产生式,看有无形如 P ?Q…的产生式,若有,且a ?FIRSTVT(P)(即F[P,a]为假),则将F[P,a]为置为真,并把(P,a)入栈; (4)重复步骤3,直到栈空为止。 那么,在F[P,a]中,凡是“真”的元素即属于P的首终结符集。 * 算符优先分析 构造算符优先表算法 算法过程: FOR 每条产生式P ?X1X2…Xn DO {FOR ( i=1,i=n-1,i++) {if Xi和Xi+1均为终结符 then 置Xi=· Xi+1 if

文档评论(0)

精品文库 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档