《编译原理》第3章 (1).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文档。上传文档
查看更多
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 语法树中除了叶结点以外的任意一个结点连同它的所有的子孙结点构成一棵子树。例如: b a S A b S a S a A a 2. 子树 简单子树:只含有单层分枝的子树称为简单子树。 * 如果一文法的某个句子存在两棵语法树,那么,该句子 是二义性的。如果一文法包含二义性的句子,则这个 文法是二义性的;否则,该文法是无二义性的。 若一个文法中存在某个句子,它有两个不同的最左或最右推导(两棵语法树),则这个文法是二义的。 对于一个程序语言来说,常常希望它的文法是无二义的。 考虑表达式下面的文法 G[E],其产生式如下 E?E+E?E*E? (E) ? a 对于句子a+a*a, 有如下两个最左推导: 4.文法的二义性(歧义性)的定义 * E?E+E ?a+E ?a+E*E ?a+a*E ?a+a*a E ?E*E?E+E*E ?a+E*E?a+a*E ?a+a*a E E + E a E * E a a E E * E + E E a a a 最左推导 例 * B ? bB|Bb|b 构造符号串bb的语法树 B B b b B b B b * 二义性的几点说明: 1. 一般来说,程序语言存在无二义性文法 例:简单算术表达式的文法 二义性文法 E→E+E|E-E|E*E|E/E|(E)|a 非二义性文法 E→E+T|E-T|T T→T*F|T/F|F F→(E)|a 改造方法:使文法含有更多的信息 * 2. 在能驾驭的情况下,使用二义性文法。 3. 文法二义性问题是不可判定的,也就是不存在一种算法,能在有限步内确切的判定一个文法是否是二义性文法。 4. 存在先天二义性语言。例如, ?aibicj?i,j?1?? ?aibjcj?i,j?1? 存在一个二义性的句子akbkck。 * 语言?文法(不是一一对应的) 在某些情况下,人们以某种形式给出有关语言的描述,如何为此语言构造一个文法使得它生成的语言正好满足这个语言的描述呢? Z?a|aZ n ? 0 Z??|aZ 或Z??|Za Z?a|Za 例1:L={an|n?1} VT={a} 分析:n=1, L=a n=2, L=aa ; 任意个a。 方法:从上到下找 ①Z最少一个a: Z?a ②在Z上添加若干a: Z?aZ 或 Z?Za * 例2:L={a2n b|n?1} VT={a,b} 分析:n=1, L=aab n=2, L=aaaab ; 偶数个a后跟一个b。 方法:从上到下找 ①两部分: Z?Ab A:偶数个a 即a2n ②A最少两个a: A?aa A?aAa Z?Ab A?aa|aAa Z?Ab A?aa|Aaa Z?Ab A?aa|aaA 或A?aaA 或A?Aaa * 例3:L={anbn|n?1} VT={a,b} 分析:n=1, L=ab n=2, L=aabb n=3, L=aaabbb ; a,b个数相同的符号串。 方法:从上到下找 ① Z最少是ab Z?ab ② Z前后分别加一个a,b: Z?aZb Z?ab|aZb * L(G[Z])={aibj|i,j?1} 方法1: Z ? AB A ? aA|a 或 A ? Aa|a B ? bB|b 或 B ? Bb|b Z?AB A?aA|a B?bB|b Z?AB A?Aa|a B?Bb|b 方法2: Z=aibj , Z?aZ Z?aB; B仅由b组成 B?b|bB 或 B?b|Bb 方法3: Z?Zb Z?Ab; A仅由a组成 A?a|aA 或 A?a|Aa Z?aB|aZ B?b|bB Z?aB|aZ B?b|Bb Z?Ab|Zb A?a|aA Z?Ab|Zb A?a|Aa * 句型分析就是识别一个符号串是否为某文法的句型,是 某个推导的构造过程。 在语言的编译实现中,把完成句型分析的程序称为分析 程序或识别程序。分析算法又称识别算法。 从左到右的分析算法,即总是从左到右地识别输入符号

文档评论(0)

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

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

1亿VIP精品文档

相关文档