1 / 76

第三章 文法和语言

第三章 文法和语言. 本章目的为语言的语法描述寻求工具 , 以便: 对源程序给出精确无二义的语法描述。(严谨、简洁、易读) 根据语言文法的特点来指导语法分析的过程 从描述语言的文法可以自动构造出可用的分析程序 制导语义翻译. 文法和语言. 预备知识 文法和语言的形式定义 文法的类型 上下文无关文法及其语法树 上下文无关文法 的句型分析 有关文法实用中的一些说明 有关文法的一些关系. 预备知识 ----- 语言概述. 语言是由句子组成的集合,是由一组记号所构成的集合。 汉语 -- 所有符合汉语语法的句子的全体 英语 -- 所有符合英语语法的句子的全体

wilma
Download Presentation

第三章 文法和语言

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. 第三章 文法和语言 本章目的为语言的语法描述寻求工具,以便: • 对源程序给出精确无二义的语法描述。(严谨、简洁、易读) • 根据语言文法的特点来指导语法分析的过程 • 从描述语言的文法可以自动构造出可用的分析程序 • 制导语义翻译

  2. 文法和语言 • 预备知识 • 文法和语言的形式定义 • 文法的类型 • 上下文无关文法及其语法树 • 上下文无关文法的句型分析 • 有关文法实用中的一些说明 • 有关文法的一些关系

  3. 预备知识 -----语言概述 • 语言是由句子组成的集合,是由一组记号所构成的集合。 • 汉语--所有符合汉语语法的句子的全体 • 英语--所有符合英语语法的句子的全体 • 程序设计语言--所有该语言的程序的全体 • 每个句子构成的规律 • 研究语言 每个句子的含义 • 每个句子和使用者的关系

  4. 预备知识 -----语言概述 研究程序设计语言 每个程序构成的规律 每个程序的含义 每个程序和使用者的关系 语言研究的三个方面 语法 Syntax 语义 Semantics 语用 Pragmatics

  5. 预备知识 -----语言概述 语法 -- 表示构成语言句子的各个记号之间的组合规律 语义 -- 表示按照各种表示方法所表示的各个记号的特定含义。(各个记号和记号所表示的对象之间的关系) 语用 --表示在各个记号所出现的行为中,它们的来源、使用和影响。

  6. 预备知识 -----语言概述 • 每种语言具有两个可识别的特性,即语言的形式和该形式相关联的意义。 • 语言的实例若在语法上是正确的,其相关联的意义可以从两个观点来看,其一是该句子的创立者所想要表示的意义,另一是接收者所检验到的意义。这两个意义并非总是一样的,前者称为语言的语义,后者是其语用意义。幽默、双关语和谜语就是利用这两方面意义间的差异。

  7. 预备知识 -----形式语言 • 如果不考虑语义和语用,即只从语法这一侧面来看语言,这种意义下的语言称作形式语言。形式语言抽象地定义为一个数学系统。“形式”是指这样的事实:语言的所有规则只以什麽符号串能出现的方式来陈述。形式语言理论是对符号串集合的表示法、结构及其特性的研究。是程序设计语言语法分析研究的基础。

  8. 预备知识 -----有关定义和记号 • 符号:可以相互区别的记号(元素)。 • 字母表:符号(元素)的非空有穷集合。 • 符号串:由字母表中的符号组成的任何有穷序列称为该字母表上的符号串。1.空符号串ε(没有符号的符号串)是上的符号串 2.若x是上的符号串,a是的元素,则xa是上的符号串 3.y是上的符号串,当且仅当它可以由1和2导出。 例如: Σ={a,b} ε,a,b,aa,ab,aabba…都是上的符号串

  9. 预备知识 -----有关定义和记号 • 符号串s的前缀:移走符号串s尾部的零个或多于零个符号得到的符号串. 如: b是符号串banana的一个前缀. • 符号串s的后缀:删去符号串s头部的零个或多于零个符号得到的符号串. 如:nana是符号串banana的一个后缀. • 符号串s的子串:从s中删去一个前缀和一个后缀得到的符号串. 如:ana是符号串banana的一个子串.

  10. 对于每个符号串s, s和ε两者都是符号串s的前缀,后缀和子串。 • 符号串s的真前缀,真后缀,真子串:任何非空符号串 x,相应地,是s的前缀,后缀或子串,并且 s  x • 符号串的运算 • 符号串的长度:符号串中符号的个数.符号串s的长度记为|s|。 ε的长度为0 • 连接:符号串x、y的连接,是把y的符号写在x的符号之后得到的符号串xy 如 x=ab,y=cd 则 xy=abcd 有εa = aε • 方幂:符号串自身连接n次得到的符号串 an 定义为 aa…aa n个a a1=a, a2=aa则a0=ε

  11. 符号串集合:若集合A中所有元素都是某字母表上的符号串,则称A为字母表上的符号串集合。符号串集合:若集合A中所有元素都是某字母表上的符号串,则称A为字母表上的符号串集合。 • 两个符号串集合A和B的乘积定义为 AB =xy|xA且yB 若 集合A=ab,cde B = 0,1 则 AB =ab1,ab0,cde0,cde1 • 使用 * 表示上的一切符号串(包括ε)组成的集合。Σ*称为Σ的闭包。 • 上的除ε外的所有符号串组成的集合记为+ 。Σ+称为Σ的正闭包。

  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. 语言上的运算 • 设L是(上的)一个语言,M是(上的)一个语言, • 语言L和M的并,交,差,补是一个语言。 如语言L和M的并为 LM,是一个语言: {w|w is in L or is in M} 如: L1 ={a,b,…y,z} M1 ={1,2…8,9 } L1M1={a,b,… y,z,1,2…8,9 } • 语言L和M的连接是一个语言,记为 LMLM={st |s∈L且t∈M} 如: L1M1 ={a1,b1,…y1,z1,a2,b2…a9…z9} 有Lε= εL=L。 L的n次连接Ln= LL...L

  15. 语言上的运算 • 语言L的闭包记为 L*, L*= L0  L1  L2  ... L0= ε, Ln= LLn-1= Ln-1 L,n1 • 语言L的正闭包记为 L+,L+= L1  L2  L3 ... L+= LL*= L*LL*= L+ ε 如: L1 ={a,b,…y,z} M1 ={1,2…8,9 } (L1M1)={a,b,… y,z,1,2…8,9} (L1M1)*={a,b,… y,z,1,2…8,9,aa,1a,…xyz,6789st..} L1(L1M1)*={所有字母打头的字母和数字符号串}

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

  17. 文法 数学系统 • 一个形式数学系统可由下列基本成分来刻画:一组基本符号,一组形成规则,一组公理,一组推理规则。

  18. 文法和语言的形式定义 • 文法的定义 • 推导的定义 • 句型、句子、语言的定义

  19. 文法的定义 • 文法G定义为四元组(VN,VT,P,S) • VN:非终结符集 • VT:终结符集 • P:产生式(规则)集合 • S:开始符号 VN∩VT= φ, S∈VN V=VN∪VT,称为文法G的文法符号集合

  20. 规则的定义 • 规则(重写规则、产生式或生成式),是形如α→β或α∷=β的(α,β)有序对,且α∈V+,β∈V*。 • α称为规则的左部(或生成式的左部)。 • β称为规则的右部(或生成式的右部)。

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

  22. 文法的定义 • 习惯上只将产生式写出。并有如下约定: • 第一条产生式的左部是开始符号 • 用尖括号括起的是非终结符,否则为终结符。或者大写字母表示非终结符,小写字母表示终结符 • G可写成G[S],S是开始符号 G:S→aAb A→ab A→aAb A→ε G[S]: A→ab A→aAb A→ε S→aSb 缩写形式 G[S]: A→ab |aAb |ε S→aSb 注意:元符号和源符号

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

  24. 推导的定义 • 直接推导“” α→β是文法G的产生式,若有v,w满足: v=γαδ,w= γβδ, 其中γ∈V*,δ∈V* 则称v直接推导到w,记作v  w 或w直接归约到v 例:G: S→0S1, S→01 S 0S1 00S11 000S111 00001111 <程序><分程序>.  <变量说明部分> <语句>. ... VAR<标识符>;BEGIN READ(<标识符>)END.  VAR A;BEGIN READ(A) END.

  25. 推导的定义 • 若存在v w0 w1 ... wn=w,(n>0) • 则称v w,v推导出w,或w归约到v • 若有v w,或v=w, • 则记为v w

  26. 文法的句型、句子的定义 • 句型 • 有文法G,若S x,则称x是文法G的句型。 • 句子 • 有文法G,若S x,且x∈VT*,则称x是文法G的句子。 例:G: S→0S1, S→01 S 0S1 00S11 000S111 00001111

  27. 例:G[E]:E→E+T|T T→T*F|F F→(E)|aEE+T T+T F+T a+T a+T*F a+F*F a+a*F a+a*a表示一切能用符号a,+,*,(和)构成的算术表达式

  28. 文法,语言的定义 • 由文法G生成的语言记为L(G),它是文法G的一切句子的集合: L(G)={x|S x,其中S为文法的开始符号,且x ∈VT*} 例:G: S→0S1, S→01 L(G)={0n1n|n≥1}

  29. 例3.3 文法G[S]: (1)S→aSBE (2)S→aBE (3)EB→BE (4)aB→ab (5)bB→bb (6)bE→be (7)eE→eeL(G)={ anbnen | n≥1 }

  30. Sa S BE (S→aSBE) a aBEBE (S→aBE) aabEBE ( aB→ab ) aabBEE ( EB→BE ) aabbEE (bB→bb) aabbeE (bE→be) aabbee(eE→ee) • G生成的每个串都在L(G)中L(G)中的每个串确实能被G生成

  31. 已知语言描述,写出文法 • 例:若语言由0、1符号串组成,串中0和1的个数相同,构造其文法。A → 0B|1CB → 1|1A|0BBC → 0|0A|1CC • 已知文法,写出语言描述 • 例:G[E]:E→E+T|T T→T*F|F F→(E)|a

  32. 语法 Syntax语义 Semantics • 偶正整数的集合{0,2,4,…2n ,…} • dd...0(2,4,6,8)

  33. 文法的等价 • 若L(G1)=L(G2),则称文法G1和G2是等价的。 如文法G1[A]:A→0R 与G2[S]:S→0S1 等价 A→01 S→01 R→A1

  34. 文法的类型 • 通过对产生式施加不同的限制,Chomsky将文法分为四种类型: • 0型文法:对任一产生式α→β,都有α∈(VN∪VT)+, β∈(VN∪VT)* • 1型文法:对任一产生式α→β,都有|β|≥|α|, 仅仅 S→ε除外 • 2型文法:对任一产生式α→β,都有α∈VN, β∈(VN∪VT)* • 3型文法:任一产生式α→β的形式都为A→aB或A→a,其中A∈VN,B∈VN,a∈VT

  35. 文法的类型 • 例:1型(上下文有关)文法 文法G[S]: S→aSBE S→aBE EB→BE aB→ab bB→bb bE→be eE→ee

  36. 文法的类型 • 例: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}*}

  37. 文法的类型 • 例:2型(上下文无关)文法 文法G[S]: S→aB|bA A→a|aS|bAA B→b|bS|aBB 文法G[S]: S→0A|1B|0 A→0A|1B|0S B→1B|1|0

  38. 文法的类型 • 例:定义标识符的3型(正规)文法 文法G[I]: I → lT I → l T → lT T → dT T → l T → d

  39. 文法和语言 • 0型文法产生的语言称为0型语言 • 1型文法或上下文有关文法( CSG)产生的语言称为1型语言或上下文有关语言(CSL) • 2型文法或上下文无关文法( CFL)产生的语言称为2型语言或上下文无关语言( CF L ) • 3型文法或正则(正规)文法( RG )产生的语言称为3型语言正则(正规)语言( RL )

  40. 文法和语言 • 四种文法之间的关系 是将产生式做进一步限制而定义的。 语言之间的关系依次:有不是上下文有关语言的0型语言,有不是上下文无关语言的1型语言,有不是正则语言的上下文无关语言。

  41. 文法和识别系统 • 0型文法(短语文法)的能力相当于图灵机,可以表征任何递归可枚举集,而且任何0型语言都是递归可枚举的 • 1型文法(上下文有关文法):产生式的形式为α1Aα2→α1βα2,即只有A出现在α1和α2的上下文中时,才允许β取代A。其识别系统是线性界限自动机。

  42. 图灵机 带 a0 a1 a2 a3 a4 a5 a6 a7 a8 … an-1 an 磁头 有限控制器

  43. 文法的类型 • 2型文法(上下文无关文法、CFG):产生式的形式为A→β,β取代A时与A的上下文无关。其识别系统是不确定的下推自动机。 • 3型文法(正规文法、右线性文法):产生的语言是有穷自动机(FA)所接受的集合

  44. 上下文无关文法及其语法树 • 上下文无关文法有足够的能力描述现今程序设计语言的语法结构 • 算术表达式 • 语句 • 赋值语句 • 条件语句 • 读语句 • ……

  45. 算术表达式上下文无关文法表示 • 文法G=({E}, {+,*,I,(,)}, P, E} P: E → i E → E+E E → E*E E → (E)

  46. 条件语句上下文无关文法表示 <条件语句>→if<条件>then<语句> | if<条件>then<语句>else <语句>

  47. 上下文无关文法的语法树 • 用于描述上下文无关文法的句型推导的直观方法 句型aabbaa的语法树(推导树) S a A S S b A a a b a 例: G[S]: S→aAS A→SbA A→SS S→a A→ba 叶子结点:树中没有子孙的结点。从左到右读出推导树的叶子标记,所得的句型为推导树的结果。也把该推导树称为该句型的语法树。

  48. 上下文无关文法的语法树 • 给定文法G,对于G的任何句型都能构造与之关联的语法树(推导树)。这棵树满足下列4个条件: 1、每个结点都有一个V中的符号作标记 2、根的标记是开始符号S 3、若一结点n至少有一个它自己除外的子孙,并且n有标记A,则A∈VN 4、如果结点n的直接子孙,从左到右的次序是结点n1,n2,…,nk,其标记分别为A1,A2,…,Ak,那么A→A1A2,…,Ak一定是P中的一个产生式

  49. 上下文无关文法的语法树 • 定理:G为上下文无关文法, 对于α≠ε,有S α,当且仅当 文法G有以α为结果的一棵推导树。

  50. 上下文无关文法的语法树 • 推导过程中施用产生式的顺序 例: G[S]: S→aAS A→SbA A→SS S→a A→ba S a A S S b A a a b a SaASaAaaSbAaaSbbaaaabbaa SaASaSbASaabASaabbaSaabbaa SaASaSbASaSbAaaabAaaabbaa

More Related