第4章 语法分析-2-优先分析.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 一、有向图法(Bell) 通过以下三个步骤从优先表构造优先函数: 1 对于每个终结符a,令其对应两个符号fa和ga,画一以所有符号和为结点的方向图。 如果a b或a b,则从fa画一条弧至gb。 如果a b或a b,则画一条弧从gb至fa 。 2 对每个结点都赋予一个数,此数等于从该结点出发所能到达的结点(包括出发点自身)。赋给fa的数作为f(a)的值,赋给ga的数作为g(a)的值。 3 检查所构造出来的函数f和g是否与原来的关系矛盾。若没有矛盾,则f和g就是要求的优先函数,若有矛盾,则不存在优先函数。 * * 现在必须证明:若a b,则f(a)=g(b);若a b,则f(a) g(b);若a b,则f(a) g(b)。 第一个关系可从函数的构造直接获得。因为,若a b,则既有从fa到gb的弧,又有从gb到fa的弧。所以,fa和gb所能到达的结是全同的。 至于a b和a b的情形,只须证明其一。 * * 如果a b,则有从fa到gb的弧。也就是,gb能到达的任何结fa也能到达。因此,f(a)? g(b)。 我们所需证明的是,在这种情况下,f(a)=g(b)不应成立。 我们将指出,如果f(a)=g(b),则根本不存在优先函数。假若f(a)=g(b),那么必有如下的回路: * * 因此有 a b, a1 b, a1 b1, …, am bm, a bm 对任何优先函数f’和g’来说,必定有 f’(a) g’(b)? f’(a1)? g’(b1)? … ? f’(am)? g’(bm)? f’(a) 从而导致f’(a) f’(a),产生矛盾。因此,不存在优先函数f和g。 fa1 fa fam gb1 gb gbm … … * 举例: 使用有向图法(Bell)构造优先函数 + * i # + * i # * * 二、Floyd方法 规则: (1)对于每一个Si?Vt∪{#} f(si)=g(si)=1 (2)迭代:若sisj但f(si)=g(sj),令 f(si)=g(sj)+1 若sisj但f(si)=g(sj),令 g(sj)=f(si)+1 若si=sj但f(si) ≠g(sj),令 f(si)=g(sj)=max(f(si),g(sj)) (3)重复步骤(2),直到收敛为止 * * 举例 使用floyd方法为以下优先矩阵构造优先函数 + * ( ) i # + * ( = ) i # * * 三、优先函数应用 例:分析i+i*i 步骤 符号栈 优先函数 余留输入串 最左素短语 所选产生式 1 # i+i*i# 2 #i +i*i# i F→i 3 #F +i*i# 4 #F+ i*i# 5 #F+i *i# i F→i 6 #F+F *i# 7 #F+F* i# 8 #F+F*i # i F→i 9 #F+F*F # F*F T→T*F 10 #F+T # F+T E→E+T 11 #E = # 12 #E# accept * 总结 1 自底向上的语法分析 2 简单优先分析 3 算符优先分析法 4 优先函数 * 作业 P175 4-20 4-31 4-33 (二)简单优先文法的定义 定义:若一文法G的任何两个符号之间至多存在一种优先 关系,且任意两个不同的产生式无相同的右部,则称 G为简单优先文法。 例4.4 考虑文法G’[E]: E?E1 E1?E1+T1 |T1 T1?T T?T*F | F F?(E) | i 由文法的产生式可直接看出: E1 = +, +=T1 T = * * = F (=E E=) 考查句型 E1+i*i 及 T*(E1+T1) E=E1=E1+T1=E1+T =E1+T*F =E1+T*i =E1+F*i =E1+i*i E= E1= T1= T =T*F = T*(E) =T*(E1) =T*(E1+T1) 从相应的语法树不难看出, +i, +F, +T, i*, F*, *i,以及: *(, (E1, E1), T1) * * 文法G’[E]的简单优先矩阵 通常,我们可把文法的全部优先关系用一矩阵来表示.例如前面所给文法G’[E]相应的优先矩阵为: * * (三)

文档评论(0)

xingyuxiaxiang + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档