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

编译原理_05自底向上的语法分析方法选编.ppt

编译原理_05自底向上的语法分析方法选编.ppt

  1. 1、本文档共36页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理_05自底向上的语法分析方法选编

第6章 自底向上优先分析法;主要内容;课题:自底向上分析方法、算符优先文法 目的要求: 1.理解自底向上的语法分析方法的基本思想; 2.掌握算符文法、算符优先文法的定义和性质 教学重点: 1.优先分析法的基本思想和术语; 2.算符文法、算符优先文法的定义和性质 教学难点 : 算符优先关系的定义 教学课时:2 教学方法:多媒体教学 教学内容和步骤 :(如下);自底向上分析方法,也称移进归约分析法 实现思想(是推导的逆过程): 对输入符号串自左向右进行扫描,并将输入符逐个移入一个后进先出栈中,边移入边分析,一旦栈顶符号串形成某个句型的句柄时,就用该产生式的左部非终结符代替相应右部的文法符号串,称为归约。重复这一过程,直到归约到栈中只剩下文法的开始符号时,则分析成功。;例1:文法:;步骤;上述的每一步规约可以构造一颗语法树:;问题的提出: ①在构造语法树的过程中,何时规约? 当句柄出现在栈顶符号串中就可以规约。 ②如何知道在栈顶符号串中已经形成句柄? 通过自底向上的分析算法来解释(优先关系) ;优先分析法又可分简单优先分析法和算符优先分析法。 ①简单优先分析法(规范归约)-对文法按一定原则求出所有文法符号间的优先关系; ②算法优先分析法(不规范归约)-规定算符之间的优先关系) ;6.3 算符优先分析法 ;先看一个例题: 例. 已知文法G[E]: E→E+E E→ E*E E→ i 输入串i+i*i ,归约过程如下;步骤;分析可知:若只从移进—归约的角度来考虑, 在第6步时栈顶已出现了句柄E+E,可以进行 归约了,但是明显是错误的,因为这样就不 符合算术运算规律 。 所以对于表达式,我们可以人为地规定其算 符的优先顺序,即给出优先级别和同一级别 的结合性。 ;算符文法定义:;性质1:在算符文法中任何句型都不包含两个相邻的非终结符。 性质2:如果Ab或(bA)出现在算符文法的句型?中,其中A?VN, b ? VT,则?中任何含b的短语必含有A。 (含b的短语必含A,含A的短语不一定含b) ;算符优先关系的定义:;算符优先文法的定义:;例:已知表达式文法G[E]: E→E+E | E*E | (E) | i 证明G[E]不是OPG文法。 证明如下: 因为:E→E+E , E?E*E 则有 + * 又因为:E→E*E, E?E+E 则有 + * 所以不是算符优先文法。; 自底向上分析方法,也称移进归约分析法,是推导的逆过程。 算法优先分析法(不规范归约)-规定算符之间的优先关系) 文法符号之间的优先关系有三种:大于、小于和等于。 算符优先文法(也称OPG文法),它是一个算符文法,不含?产生式,且对任意两个终结符a,b之间至多只有= ,和三种关系的一种成立。;教材P122练习: 2(1),3(1);课题:算符优先关系表和算符优先分析法 目的要求: 1.掌握算符优先关系表的构造方法; 3.掌握算符优先分析法及其局限性 教学重点: 1.符优先关系表的构造 2.算符优先分析法的实现; 教学难点 : 算符优先关系表的构造 教学课时:2 教学方法:多媒体教学 教学内容和步骤 :(如下);三、 算符优先关系表 ;1) = 关系 直接看产生式的右部,若出现了 A →…ab…或A →…aBb,则a=b 2) 关系 求出每个非终结符B的FIRSTVT(B) 若A→…aB…,则?b∈FIRSTVT(B),ab 3) 关系 求出每个非终结符B的LASTVT(B) 若A→…Bb…,则?a∈LASTVT(B),ab;例:已知文法如下,计算优先关系 E’→#E# E→E+T E→T T→T*F T→F F→P↑F F→P P→(E ) P→i;解: (1)先求firstVT和lastVT集 first(E’)={#} first(E)={+,*,↑, ( , i } first(T)={*,↑, ( , i } first(F)={↑, ( , i } first(P)={ ( , i };(2) 求 = 关系 E’→#E# # = # P→(E) ( = )

文档评论(0)

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

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

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档