1 / 71

第 3 章 文法和语言

第 3 章 文法和语言. 教学目的 : 使学生了解文法基本概念、文法类型,掌握文法和语言的形式定义,学会用语法树进行句型分析。 教学重点: 文法和语言的形式定义,句型分析。 课时分配: 4 学时. 本章知识点 ( 内容 ). 文法的直观概念. 符号和符号串. 文法和语言的形式定义. 文法的类型. 上下文无关文法及其语法树. 句型的分析. 有关文法实用中的一些说明. 3.1 文法的直观概念. 1 、 语言: 是由句子组成的集合,是由一组符号所构成的集合。 2 、 汉语: 所有符合汉语语法的句子的全体。 3 、 英语: 所有符合英语语法的句子的全体。

Download Presentation

第 3 章 文法和语言

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第3章 文法和语言 • 教学目的: 使学生了解文法基本概念、文法类型,掌握文法和语言的形式定义,学会用语法树进行句型分析。 • 教学重点:文法和语言的形式定义,句型分析。 • 课时分配:4学时

  2. 本章知识点(内容) 文法的直观概念 符号和符号串 文法和语言的形式定义 文法的类型 上下文无关文法及其语法树 句型的分析 有关文法实用中的一些说明

  3. 3.1文法的直观概念 1、语言:是由句子组成的集合,是由一组符号所构成的集合。 2、汉语:所有符合汉语语法的句子的全体。 3、英语:所有符合英语语法的句子的全体。 4、程序设计语言:所有该语言的程序的全体。 每个句子构成的规律 研究语言每个句子的含义 每个句子和使用者的关系

  4. 当我们表述一种语言时,无非是说明这种语言的当我们表述一种语言时,无非是说明这种语言的 句子,如果语言只含有有穷多个句子,则只需列出 句子的有穷集就行了,但对于含有无穷句子的语言 来讲,存在着如何给出它的有穷表示的问题。以自 然语言为例,人们无法列出全部句子,但是人们可 以给出一些规则,用这些规则来说明(或者定义)句 子的组成结构,比如汉语句子可以是由主语后随谓 语而成,构成谓语的是动词和直接宾语,我们采用 EBNF来表示这种句子的构成规则。

  5. “我是大学生”是汉语的一个句子 〈句子〉∷=〈主语〉〈谓语〉 〈主语〉∷=〈代词〉|〈名词〉 〈代词〉∷=我|你|他 〈名词〉∷=王明|大学生|工人|英语 〈谓语〉∷=〈动词〉〈直接宾语〉 〈动词〉∷=是|学习 〈直接宾语〉∷=〈代词〉|〈名词〉

  6. 有了一组规则以后,按照如下方式用它们导出句子:开始去找∷=左端的带有〈句子〉的规则并把它由∷=右端的符号串代替,这个动作表示成:有了一组规则以后,按照如下方式用它们导出句子:开始去找∷=左端的带有〈句子〉的规则并把它由∷=右端的符号串代替,这个动作表示成: 〈句子〉  〈主语〉〈谓语〉, 然后在得到的串〈主语〉〈谓语〉中,选取〈主语〉或〈谓语〉,再用相应规则的∷=右端代替之。比如,选取了〈主语〉,并采用规则〈主语〉∷=〈代词〉, 那么得到:〈主语〉〈谓语〉  〈代词〉〈谓语〉, 重复做下去, 句子:“我是大学生”的全部动作过程是: 〈句子〉  〈主语〉〈谓语〉  〈代词〉〈谓语〉  我〈谓语〉 我〈动词〉〈直接宾语〉  我是〈直接宾语〉 我是〈名词〉 我是大学生

  7. “我是大学生”的构成符合上述规则,而“我大学生是”不符合上述规则,我们说它不是句子。,这些规则就是我们判别句子结构合法与否的依据,可以将这些规则看成是一种元语言,用它描述汉语。 文法:就是这样一些规则的有穷集合,它是以有穷规则集来刻划无穷句子集合的工具。

  8. 3.2 符号和符号串 字母表:元素的非空有穷集,记为Σ,语言的字母表是由字母、数字、若干专用符号及保留字组成,是符号(元素)的非空有穷集合。 符号:字母表中的元素。 符号串:由字母表中的符号组成的任何有穷序列 空符号串:什么符号也不含的符号串,记为ε。 例:Σ={a,b,c,d,……z}。a、b、c……都称为符号。hello、stri、aezfg、main、fjfka都是Σ上的符号串。 符号串的长度:符号所包含符号的个数,设x是一符号串,其长度记为|x|。 例:|hello|=5,|main|=4,| ε |=0。

  9. 符号串的运算 • 1、符号串的长度:符号串中符号的个数。符号串s的长度记为|s|。 ε的长度为0 • 2、连接:符号串x、y的连接,是把y的符号写在x的符号之后得到的符号串xy 如 x=ab,y=cd 则 xy=abcd 有εa = aε • 3、方幂:符号串自身连接n次得到的符号串 an 定义为 aa…aa n个a a1=a, a2=aa则a0=ε

  10. 4、符号串集合:若集合A中所有元素都是某字母表上的符号串,则称A为字母表上的符号串集合。4、符号串集合:若集合A中所有元素都是某字母表上的符号串,则称A为字母表上的符号串集合。 5、两个符号串集合A和B的乘积定义为 AB =xy|xA且yB 【例】若 集合A=ab,cde B = 0,1 则 AB =ab1,ab0,cde0,cde1

  11. 使用 * 表示上的一切符号串(包括ε)组成的集合。Σ*称为Σ的闭包。 规定 Σ0 = {}. 令: Σ* = Σ0 Σ1 Σ2… 称 Σ*是Σ的闭包。 记Σ+ = Σ* -{}= Σ1 Σ2 Σn… , 称 Σ+是Σ的正则包。 • 【说明】 • 上的除ε外的所有符号串组成的集合记为+ 。Σ+称为Σ的正闭包。 • 闭包Σ*中的每个符号都是由Σ中的符号串经有限次连接而成的。

  12. 例:Σ={a,b} Σ*={ε,a,b,aa,ab,ba,bb,aaa,aab,…} Σ+={a,b,aa,ab,ba,bb,aaa,aab,…}

  13. 语 言 由句子组成的集合,是由一组符号所构成的集合。换言 之,字母表上的一个语言是上的一些符号串的集合 (字母 表上的每个语言是*的一个子集)。 【例如】字母表 Σ={a,b}, Σ*={ε,a,b,aa,ab,ba,bb,aaa,aab,…} 集合{ab,aabb,aaabbb,…,anbn,…} 或表示为{w|w∈Σ*且w=anbn,n≥1}为字母表上的一个语言。 集合{a,aa,aaa,…} 表示为{w|w∈Σ*且w=an,n≥1} 为字母表上的一个语言。 ε是一个语言。 即 是一个语言

  14. 3.3 文法和语言的形式定义 • 如何来描述一种语言? • 如果语言是有穷的(只含有有穷多个句子),可以将句子逐一列出来表示;如果语言是无穷的,找出语言的有穷表示。语言的有穷表示有两个 途径: 一、生成方式 (文法):语言中的每个句子可以用严格定义的规则来构造。 • 二、识别方式(自动机):用一个过程,当输入的一任意串属于语言时,该过程经有限次计算后就会停止并回答“是”,若不属于,要么能停止并回答“不是”,要么永远继续下去。

  15. 文法是用生成方式描述语言的:语言中的每个句子可以用严格定义的规则来构造。下面给出文法的定义,而在文法的定义的基础上,给出推导的概念,句型、句子和语言的定义。文法是用生成方式描述语言的:语言中的每个句子可以用严格定义的规则来构造。下面给出文法的定义,而在文法的定义的基础上,给出推导的概念,句型、句子和语言的定义。

  16. 文法G定义为四元组(VN,VT,P,S )其中 VN为非终结符号(或语法实体,或变量)集; VT为终结符号集; P为产生式(也称规则)的集合; VN,VT和P是非空有穷集。 S称作识别符号或开始符号,它是一个非终结符,至少要在一条产生式中作为左部出现。 VN和VT不含公共的元素,即VN ∩VT = φ 用V表示VN ∪VT,称为文法G的字母表或字汇表 规则,也称重写规则、产生式或生成式,是形如α→β或α∷=β的(α,β)有序对,其中α是字母表V的正闭包V+中的一个符号,β是V*中的一个符号。α称为规则的左部,β称作规则的右部。

  17. Define a grammar A grammar G is defined as a 4-tuple (VN,VT,P,S ) VNis a set of nonterminals VT is a set of terminals P is a set of productions,each production consists of a left side,an arrow(or ‘::=‘),and a right side S is a designation of one of the nonterminals as the start symbol V =VN ∪VT is the alphabet of G

  18. 文法的定义 【例】 文法G=(VN,VT,P,S) VN = { S }, VT ={ 0, 1 } P={ S→0S1, S→01 } S为开始符号

  19. 【例】 文法G=(VN,VT,P,S) VN ={标识符,字母,数字} VT ={a,b,c,…x,y,z,0,1,…,9} P={<标识符>→<字母> <标识符>→<标识符><字母> <标识符>→<标识符><数字> <字母>→a,…, <字母>→z <数字>→0,…, <数字>→9 } S=<标识符>

  20. 文法的写法 【例1】G:S→aAb A→ab A→aAb A→ε 【例2】G[S]:A→ab A→aAb A→ε S→aSb 【例3】 G[S]: A→ab |aAb |ε S→aSb

  21. 文法产生的语言 文法产生的语言是由文法开始符号推导出的终结符号串的集合 1、推导、归纳、句型、句子和语言 假定G是一个文法,S是它的开始符号。如果S*(表示从S出发,经0步或若干步可推出,则称是一个句型。 仅含终结符号的句型是一个句子。这个过程称为推导推导的逆过程称为归纳。 文法G所产生的句子的全体是一个语言,将它记为L(G)。 L(G)={|S +  & ∈VT }

  22. 【例】G: S→0S1, S→01 S 0S1 00S11 000S111 00001111 G的句型有 : S,0S1 ,00S11 ,000S111,00001111等。 G的句子 :00001111, 01等

  23. 例如:终结符号串(i*i+i)是文法 E→E+E|E*E|(E)|i 的一个句子。 因为: E(E)(E+E)  (E*E+E)  (i*E+E)  (i*i+E)  (i*i+i) 根据定义可知(i*i+i)是该文法的一个句子,而E,(E),(E*E+E)等是文法的句型。

  24. 【例】 例1:考虑一个文法G1: S→bA A→aA|a 它定义了一个什么语言呢? 从开始符S出发,我们可以推出如下句子: SbA ba SbA baA baa SbA baA  …  baa…a 可以写为:L(G1)={ban|n≥1}

  25. 【例】 设有文法G S→P|aPPb P →ba|bQa Q →ab 求语言L(G). 解: L(G)={ba,baba,abab,ababab… }

  26. 【例】 构造一个文法G3使 L(G3)={anbn|n≥1} 解; S→aSb|ab 【例】G: S→0S1, S→01 L(G)={0n1n|n≥1}

  27. 【例】 试构造生成语言L={anbnci|n1, i 0}的文法 解:G(Z): ZAB A aAb|ab B cB|

  28. 【例】 已知语言L={anbbn| n 1}, 写出产生L的文法。 解: G[S]: S aAb A aAb|b

  29. 【例】 已知文法G=({A,B,C},{a,b,c},A,P) 其中产生式P由以下组成: A abc A aBbc Bb bB Bc Cbcc bC Cb aC aaB aC aa 问:此文法表示的语言是什么? [解]:由于A为开始符。 由于AaBbc abBc abCbcc aCbbcc aabbcc 语言为: {anbncn, n>0 }

  30. 【例】试写一文法,使其描述的语言L(G) 是能被5整除的整数集合。 解: G(Z): Z (+|- )A(0|5) A 0|1|2|3|4|5|6|7|8|9|AA

  31. 【例】 已知语言L={x | x{a,b,c}*,且x重复排列是 对称的(aabcbaa,aabbaa,等) 写出该语言的文法。 解: G(Z): Z aZa|bZb|cZc|a|b|c|

  32. 3.4 文法的类型 语言学家乔姆斯基把文法分为四种类型 0型、1型、2型、3型。0行强于1型,1行强于2型,2型强于3型。这几种文法的差别在于对产生式施加不同的限制。 我们说G=(VT ,VN ,S ,P) 是一个0型文法,如果它的每个产生式 是这样的结构 (VNVT)* 且至少有一个非终结符,而(VNVT)* 。0型文法也称短语文法。

  33. 如果对0型文法分别施加以下的第i条限制,则我们就得到第i型文法:如果对0型文法分别施加以下的第i条限制,则我们就得到第i型文法: (1)G的任何产生式  均满足 ||≤ ||(其中||和||分别为和的长度;仅S例外 (2)G的任何产生式为A, AVN , (VN VT)* 。 (3) G的任何产生式为AB或 A,其中VT*,A、B  VN 。 【说明】其中1型文法也称上下文有关文法。这种文法意味着,对非终结符进行替换时务必考虑上下文并且一般不允许替换成空串。

  34. 2型文法也称上下文无关文法,注意其语言定义:2型文法也称上下文无关文法,注意其语言定义: G的任何产生式为A→β,A∈VN, β∈(VN∪VT)*    表明凡出现在产生式左边的符号都是非终结符。 3型文法也称右线性文法。3型文法还有另一种形式,称左线性文法:一个文法G为左线性文法,如果G的任何产生式为 A→B 或A→ ,其中∈VT , A、B ∈ VN 由于3型文法等价于正规式所以也称正规文法。

  35. 1型文法 2型文法 文法的类型 【说明】1、四种文法之间的逐级“包含”关系 0型文法 3型文法

  36. 2)若“ ”左侧有终结符,则该文法一定属于0型或1型文法。若产生式“ ”的左部的符号串长度均小于或等于产生式“ ”的右部的符号串长度,则为1型文法,否则为0型文法。 3)2、3型文法的产生式“ ”的左部仅为单个非终结符。若“ ”的左部形式上为AB或 A, VT,A、B  VN (称为右线性,也可定义一个等价的左线性文法))

  37. 判断文法的类型 例:文法G[S]: S→CD Ab→bA C→aCA Ba→aB C→bCB Bb→bB AD→aD C→ε BD→bD D→ε Aa→bD

  38. 判断文法的类型 例: 文法G[S]: S→AB A→BS|0 B→SA|1

  39. 判断文法的类型 G[S]: S→0A|1B|0 A→0A|1B|0S B→1B|1|0 G[I]: I → lT I → l T → aT T → dT T → l T → d 思考:以上文法的类型?

  40. 判断下列文法类型 【例】文法G[S]:S →aSYZ S→aYZ aY→ay yY→yy yZ→yz ZY→YZ zZ→zz 【例】文法G[S]:S →xSYZ S→xYZ xY→x yY→yy yZ→yz ZY→YZ zZ→zz 【例】文法G[S]:S→aT T→bT|cT|b|c 【例】文法G[S]:S→xB|c B→Az A→cS

  41. 3.5 上下文无关文法及其语法树 上下文无关文法有足够的能力描述程序设计语言的语法结构 语法树---句型推导的直观表示 前面我们提到过可以用一张图表示一个句型的推导,这种表示称为语法分析树,或简称语法树。 语法树的根结由开始符号所标记。随着推导的展开,当某个非终结符被它的某个候选式所替换时,这个非终结符的相应结就产生了下一代新结。每个新结和其父亲结间都有一条连线。在一棵语法树生长过程中的任何时刻,所有那些没有后代的端末结自左至右排列起来就是一个句型。

  42. 句型aabbaa的语法树(推导树) S a A S S b A a a b a 句型的语法树构造方法:以文法开始符S作为根结点,随着推导的展开,对句型中某个非终结符A用产生式A→α的右部替换时,对标记A的结点生成其子结点从左至右依次为α的子树,直至推导结束。 【例】 G[S]: S→aAS A→SbA A→SS S→a A→ba SaASaAaaSbAaaSbbaaaabbaa 从左到右读出推导树的叶子标记,所得的句型为推导树的结果(边缘)。

  43. 规范推导 规范句型 最左(最右)推导:在推导的任何一步αβ,其中α、β是句型,都是对α中的最左(右)非终结符进行替换 最右推导被称为规范推导。 由规范推导所得的句型称为规范句型

  44. 例: G[S]: S→aAS A→SbA A→SS S→a A→ba SaASaAaaSbAaaSbbaaaabbaa SaASaSbASaabASaabbaSaabbaa SaASaSbASaSbAaaabAaaabbaa

  45. 语法树 设G=( VN,VT,P,S)为一cfg,若一棵树满足下列4个条件,则此树称作G的语法树(推导树)(派生树): 1. 每个结点都有一个标记,此标记是V的一个符号 2. 根的标记是S 3. 若一结点n至少有一个它自己除外的子孙,并且有标记A,则肯定A∈VN 4. 如果结点n有标记A,其直接子孙结点从左到右的次序是n1,n2,…,nk,其标记分别为A1,A2,…,Ak,那么A→A1A2,…,Ak一定是P中的一个产生式。

  46. 上下文无关文法的语法树 句型aabbaa的可能推导序列和语法树 例: G[S]: S→aAS A→SbA A→SS S→a A→ba S a A S S b A a ab a SaASaAaaSbAaaSbbaaaabbaa SaASaSbASaabASaabbaSaabbaa SaASaSbASaSbAaaabAaaabbaa

  47. 一棵语法树表示了一个句型的种种可能的(但未必是所有的)不同推导过程,包括最左(最右)推导。但是,一个句型是否只对应唯一的一棵语法树呢?一个句型是否只有唯一的一个最左(最右)推导呢?一棵语法树表示了一个句型的种种可能的(但未必是所有的)不同推导过程,包括最左(最右)推导。但是,一个句型是否只对应唯一的一棵语法树呢?一个句型是否只有唯一的一个最左(最右)推导呢?

  48. E E + E E * E i i i E E * E i E + E i i 问题:一个句型是否对应唯一的一棵语法树? 例:G[E]: E → i E → E+E E → E*E E → (E) 考虑句型i*i+i的语法树? 句型 i*i+i 的两个不同的最左推导: 推导1:E E+E E*E+E  i*E+E  i*i+E  i*i+i 推导2:EE*E  i*E  i*E+E  i*i+E i*i+i

  49. 二义文法 • 若一个文法存在某个句子对应两棵不同的语法树,则称这个文法是二义的。或者,若一个文法存在某个句子有两个不同的最左(或右)推导,则称这个文法是二义的。 • 产生某上下文无关语言的每一个文法都是二义的,则称此语言是先天二义的。

More Related