编译原理第三章.ppt

  1. 1、本文档共45页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第3章 文法和语言 3.1 文法的概念 3.2 符号和符号串 3.3文法和语言的形式定义 3.4文法的类型 例:1型(上下文有关)文法   文法G[S]: S→CD  Ab→bA         C→aCA  Ba→aB         C→bCB  Bb→bB         AD→aD  C→ε         BD→bD  D→ε         Aa→bD   L(G)={ww|w∈{a,b}*} 例:2型(上下文无关)文法   文法G[S]: S→0A|1B|0         A→0A|1B|0S         B→1B|1|0 例:定义标识符的3型(正规)文法   文法G[I]: I → αT         I → α         T → αT         T → dT         T → α          T → d   其中α表示a~z中的任何一英文字母,d表示0~9中的任一数字。 3.5 上下文无关文法及其语法树 前面我们介绍了句型、推导等概念,现在介绍一种描述上下文无关文法的句型推导的直观方法,即语法树,也称推导树。    给定文法G=(VN,VT,P,S),对于G的任何句型都能构造与之关联的语法树(推导树)。   这棵树满足下列4个条件:   1、 每个结点都有一个标记,此标记是V的一个符号。   2、 根的标记是S。   3、 若一结点n至少有一个它自己除外的子孙,并且有标记A,则A肯定在VN中。   4、 如果结点n的直接子孙,从左到右的次序是结点n1,n2,…,nk,其标记分别为A1,A2,…,Ak,那么A→A1A2,…,Ak一定是P中的一个产生式。 语法树表示了在推导过程中施用了哪个产生式和施用在哪个非终结符上,它并没有表明施用产生式的顺序。 例3.7文法G的句型aabbaa的推导过程可以列举以下3个: 推导过程1:S aAS aAa aSbAa aSbbaa aabbaa 推导过程2:S aAS aSbAS aabAS aabbaS aabbaa 推导过程3:S aAS aSbAS aSbAa aabAa aabbaa 其中第一个推导过程的特点是在推导中总是对当前串中的最右非终结符施用产生式进行替换,施用产生式的顺序为(1),(4),(2),(5)和(4)。第二个推导过程恰恰相反,在推导中总是对当前串中的最左非终结符施用产生式进行替换,施用产生式的顺序为(1),(2),(4),(5)和(4)。除上述3个推导过程外,显然还可以给出一些不同的推导过程,我们不再列举。 定理:  G为上下文无关文法,对于α≠ε,有S α,当且仅当文法G有以α为结果的一棵语法树(推导树)。 如果在推导的任何一步α β,其中α,β是句型,都是对α中的最左(最右)非终结符进行替换,则称这种推导为最左(最右)推导。第一个推导是最右推导,第二个是最左推导。在形式语言中,最右推导常被称为规范推导。由规范推导所得的句型称为规范句型。 这就是说,一棵语法树表示了一个句型的种种可能的(但未必是所有的)不同推导过程,包括最左(最右)推导。但是,一个句型是否只对应唯一的一棵语法树呢?一个句型是否只有唯一的一个最左(最右)推导呢?不是的。 例如,对于例3.6的文法G,句型i*i+i就有两个不同的最左推导一和二,它们所对应的语法树分别如图3.2和图3.3所示。   推导一:E E+E E*E+E i*E+E i*i+E i*i+i   推导二:E E*E i*E i*E+E i*i+E i*i+i 如果一个文法存在某个句子对应两棵不同的语法树,则说这个文法是二义的。或者说,若一个文法中存在某个句子,它有两个不同的最左(最右)推导,则这个文法是二义的。 例3.6的文法G是二义的。 人们已经证明,要判定任给的一个上下文无关文法是否为二义的,或它是否产生一个先天二义的上下文无关语言,这两个问题是递归不可解的。即,不存在一个算法,它能在有限步骤内,确切判定任给的一个文法是否为二义的。我们所能做的事是为无二义性寻找一组充分条件(当然它们未必都是必要的)。 在例3.6的文法中,假若规定了运算符‘+’与‘*’的优先顺序和结合规则,即按惯例,让‘*’的优先性高于‘+’,且它们都服从左结合,那么就可以构造出一个无二义文法,如例3.8的文法。 例3.8 定义表达式的无二义文法G[E]:    E→T|E+T   T→F|T*F   F→(E)|i 它和例3.6的文法产生的语言是相同的,即它们是等价的。 3.6 上下文无关文法句型的分析

文档评论(0)

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

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

1亿VIP精品文档

相关文档