1 / 50

第二章 语言的基本知识

第二章 语言的基本知识. 学习本章的目的。 2.1 符号串 2.2 文法和语言的定义 2.3 分析树和二义性 2.4 形式语言 概观. 学习本章的目的. 构造编译程序的算法是从研究源程序及目标程序产生的,首先找到源语言的形式描述,根据这种描述,构造出相应的分析加工程序。 语言分语法,语义和语用。程序语言语法的形式描述是很好用的,语义的形式描述不那磨好用,但它推动语言理论的发展。. 2.1 符号串. 2 . 1 . 1 字母表 2 . 1 . 2 符号串 一. 符号串的定义 二. 术语 三. 符号串的运算

vito
Télécharger la présentation

第二章 语言的基本知识

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.1 符号串 • 2.2 文法和语言的定义 • 2.3 分析树和二义性 • 2.4 形式语言概观

  2. 学习本章的目的 • 构造编译程序的算法是从研究源程序及目标程序产生的,首先找到源语言的形式描述,根据这种描述,构造出相应的分析加工程序。 • 语言分语法,语义和语用。程序语言语法的形式描述是很好用的,语义的形式描述不那磨好用,但它推动语言理论的发展。

  3. 2.1 符号串 • 2.1.1 字母表 • 2.1 .2 符号串 一. 符号串的定义 • 二. 术语 • 三. 符号串的运算 • 四. 符号串集合的运算

  4. 2.1.1 字母表 字母表是符号的非空有穷集合。任何程序语言都有自己的字母表,例如: 1.计算机语言:由符号“0”和“1”组成的字 母表,∑={0,1} 2. ASCII字符集; 3. Pascal字母表为: ∑= {AZ, az, 09, +, -, *, /, <, =, >, :, ',', ; ,., , (, ), {, }, [, ] }

  5. 2.1.2 符号串 一. 符号串的定义 (1) ε是∑上的一个符号串。 (2) 若x是∑上的符号串,而a是∑的元素, 则xa是∑上的符号串。 (3) y是∑上的符号串,当且仅当它由(1)和 (2)导出。 由字母表中的符号所组成的的任何有穷 序列被称之为该字母表上的符号串,也称作 "字"。

  6. 二术语 设s是符号串 前缀:移走s的尾部的零个或多于零个符号 后缀:删去s的头部的零个或多于零个符号 子串: 从s中删去一个前缀和一个后缀 子序列: 从s中删去零个或多于零个符号(这些符号不要求是连续的) 逆转(用SR表示):将S中的符号按相反次序写出而得到的符号串。 长度:是该符号串中的符号的数目。例如|aab|=3,|ε|=0。

  7. :符号串s=banana 前缀:,b,ba,ban,bana,banan,banana 后缀:banana,anana,nana,ana,na,a,  子串: banana,anana,banan,anan,…,  真前缀,真后缀,真子串: x≠sx ≠  子序列: baa(这些符号不要求是连续的) 逆转(用SR表示):ananab 长度:banana=6

  8. 三.符号串的运算 1.连接:设x和y是符号串,它们的连接 xy是把y的符号写在x的符号之后得到的符号串。例如,x=ba,y=nana,xy=banana. 2.方幂:x0= ; x1=x; x2=xx; ……;xn=xn-1x; 例如, x=ba, x1= ba, x2=baba, x3=bababa,…...

  9. 四. 符号串集合(语言)的运算 设L和M是两个符号串集合,则 1.合并:L∪M={s|sL or sM} 2.连接:LM={ st|sL and tM} 3.方幂: L0={ε}, L1=L, L2=LL, ..., Ln=Ln-1L 4. 语言L的Kleene闭包,记作L*, L*=∪Li(i>=0) =L0∪L1∪L2∪L3 ∪… 5.语言L的正闭包,记作L+(L+=LL*) L+=∪Li(i >=1) =L1∪L2∪L3∪L4∪…

  10. 如:L={A~Z,a~z} D={0~9} 1.L∪D={A~Z,a~z ,0~9} 2.LD是由所有用一个字母后跟一个数字 组成的符号串所构成的集合。 3.L4是由所有的四个字母的符号串构 的集合。 4.L(L∪D)* 是由所有的字母打头的字母和数字组成的符号串所构成的集合. 5.D+是由所有的长度大于等于1的数字串所构成的集合.

  11. 2.2 文法和语言的定义 • 2 . 2 . 1 引子 • 2 . 2 . 2 文法和语言的定义 • 一.文法和语言的定义 • 二. 推导 • 三.语言 • 四. 最左推导和最右推导 • 五。短语,直接短语,句柄

  12. 引子 分析:The grey wolf will eat the goat 〈句子〉 〈谓语〉 〈主语〉 〈冠词〉 〈形容词〉 〈名词〉 〈直接宾语〉 〈动词〉 助动词 动原 冠词 名词 The grey wolf will eat the goat

  13. 语法规则 为了进行机械分析, :“句子由主语后跟随谓语组成”表示为: 句子 主语 谓语 (1) 主语 冠词 形容词 名词 (2) 冠词the 形容词  grey  谓语 动词 直接宾语 (5) 动词 助动词 动词原形 (6) 助动词will 动词原形 eat 直接宾语 冠词 名词 (9) 名词wolf 名词 goat

  14. 句子的语法有四部分 :终结符号集,非终结符号集,语法规则,开始符号。 终结符号集VT={the,grey, wolf,will, eat, goat} 非终结符号集VN={句子,主语, 谓语, 冠词, 形容词, 名词 , 动词 , 直接宾语 , 助动词 ,动词原形 } 语法规则集P={句子主语谓语,……} 开始符号S= 句子

  15. 句子根据规则推导出来 句子主语 谓语  冠词 形容词 名词 谓语  the 形容词 名词 谓语  the grey名词 谓语  the grey wolf 谓语  the grey wolf 动词 直接宾语  …...  the grey wolf will eat the goat

  16. 句子既要合符语法又要合符语义 句子 the grey wolf will eat the goat the grey wolf will eat the wolf the grey goatwill eat the wolf the grey goatwill eat the grey 合符语法且合符语义的句子仅是: the grey wolf will eat the goat + 

  17. 句型分析一 分析:The grey wolf will eat the goat 〈句子〉 〈主语〉 〈谓语〉 〈直接宾语〉 〈动词〉 〈冠词〉 〈形容词〉 〈名词〉 助动词 动原 冠词 名词 wolf will eat the The grey goat

  18. 句型分析二 分析:The grey wolf will eat the goat 〈句子〉 〈主语〉 〈谓语〉 〈直接宾语〉 〈动词〉 〈冠词〉 〈形容词〉 〈名词〉 助动词 动原 冠词 名词 wolf will eat the The grey goat

  19. 一 文法的定义 一个上下文无关文法 G= (VT,VN S, P ),其中: VT是一个非空有穷终结符号集合; VN是一个非空有穷的非终结符号集合, 且VT∩VN=Φ; S VN ,称为开始符号。 P是一个产生式的非空有穷集合,每个产 生式的形式是Aα(或A ::=α),其中 A∈VN,α∈(VT∪VN)*。开始符号S至必须在某个产生式的左部出现一次 。 缩写形式:A  α1|α2

  20. 例2.2 算术表达式的文法G: G=({a,+,*,(,)},{<表达式>,<项>, <因子>}, <表达式>,P ) P:<表达式> <表达式>+<项> <项> <项><项> *<因子>  <因子> <因子> ( <表达式>) a EE+T  T T  T*F  F F ( E )  a (2.1)

  21. 二. 定义2.3 直接推导和推导的定义 令G=(VT,VN,S,P), 若Aγ∈P, 且α,β∈(VT∪VN)*,则称αAβ直接推出αγβ,表示成 αAβαγβ αAβ直接推出αγβ αγβ直接归约到αAβ 如果存在一个直接推导序列: 0α1α2… αn(n>0) 表示成α0 αn 0αn 或者α0=αn或者α0αn +  *  + 

  22. 例:E E+T T+T F+T a+T a+F a+a

  23. 三. 定义2.4:语言的定义 • 设文法 G=(VT,VN,S,P)。如果S α,则称α是一个句型。仅含终结符号的句型是一个句子。语言 L(G)是由文法G产生的所有句子所组成的集合: • L(G)={α|S α且α∈VT*} • 例2.3 考虑一个文法 G=({a,b},{S},S,P)其中P:SaSb ab • SaSb aaSbb  a3Sb3 •  …… an-1Sbn-1anbn *  + 

  24. 例2.4 设G=(VT={a,b},VN={S,A,B},S,P} P由下列产生式组成:S→aB|bA A→a|aS|bAAB→b|bS|aBB L(G)={w|w∈{a,b}+,且w中有相同个数的a和b}。 用归纳法证明下面结论(对w的长度) : (1)S w,当且仅当w中含有相同个数的a和b。 (2)A w,当且仅当w中a的个数比b的个数多一个。 (3)B w,当且仅当w中b的个数比a的个数多一个。 归纳基础 当|w|=1,Aa, B  b,不能从S导出长度为1的终极行,则上述结论显然成立。 * * *

  25. 归纳步骤 设(1),(2)和(3)对于长度不超过k-1的所有w都成立。那么,证明对|w|=k也成立。 对于(1),推导的第一步必是SaB或SbA, 对于第一种情形,必有w=aw1且B w1, |w1|=k-1, 它含的b个数比a多一个,因此,w中a,b的个数相等。推导的第一步是SbA,证明完全类似。反之, |w|=k, w中a,b的个数相等,要证S w。考虑的S推导,推导出的开始符号,或为a或为b。若 SaB,B w1,|w1|=k-1, w1中b的个数比a多一个,w= aw1。若S bA,证明和类SaB类似。 (2)和(3)的证明留给同学们。 * * *

  26. 四. 最左推导和最右推导 : 对于w和G, wL(G)是否存在S w,如何构造 例如,G[E](例2.2)和w=a+a  a EE+T T+T F+T a+T a+TF a+F F a+a F a+aa( 最左) 特点:A   (A) , VT* EE+T E+T F E+ T a E+Fa E+aa T+aa F+aa a+aa 特点:A   (A),  VT*(最右) + 

  27. 定义2.5 令G[S]是一个文法,如果有 S αAδ 且A β 则称β是一个关于非终结符号A的,句型αβδ的短语。其次如果有 S αAδ 且 Aβ 则称β是直接短语。一个句型的最左直接短语称为该句型的句柄。 文法(2.1)的一个句型 a1*a2+a3 ,尽管 有E a2+a3 ,但是 a2+a3 并不是该句型 的一个短语,因为不存在 E a1*E。 短语:a1,a2,a3,a1*a2,a1*a2+a3 直接短语:a1,a2,a3句柄:a1 *  +  *  +  + 

  28. 2.3 分析树和二义性 • 一. 分析树的定义 • 二. 如何画出分析树 • 三. 子树 • 四. 二义性文法的定义 • 五. 在构造编译程序中如何处理 二义性文法

  29. 一.分析树的定义 设G=(VT,VN,S,P),G的一棵分析树满足如下条件: 1. 每一个结点有一个标记,此标记是VT∪VN∪{ε}中的符号。2.根的标记是S。3.如果一个结点是内部结点,且有标记A,那么A必在VN中。 4.如果编号为n的结点有标记A,结点n1,n2,…,nk是点n的从左到右的儿子,并分别有标记X1,X2,…,Xk,则AX1X2…Xk必须是P中的产生式。5. 如果结点n有标记ε,那么结点n是叶子,且是它父亲唯一的儿子。

  30. 例2.5 G=(VT,VN,S,P), 其中 P: SaASa A SbA SS ba S 1 a 4 2 A 3 S a S 8 5 b 6 A 7 9 a a b 10 11

  31. 二. 如何画出分析树 (1.自顶向下) 根据推导序列,对每步推导画相应分枝 S S aAS a S A aSbAS aabAS a S b A aabbaS a aabbaa a b

  32. 二. 如何画出分析树 (2.自底向上) 根据归约序列,对每步归约画相应分枝 S S aAS a S A aAa a aSbAa S b A aSbbaa a a b aabbaa

  33. 关于分析树的几点说明 1. 一个句型推导或分析用一棵树结构图示 出来,它反应了一个句子语法结构的层次。 2. 对于一个句子的多种推导(若文法是无二义性的),采用各种推导过程,画出的分析树是一样的。分析树并未描述推导过程。 3. 在书中,用画分析树的过程解释语法分析过程,用分析树图解语法结构。 分析树是推导的图形表示。

  34. 三.子树 一棵分析树中一个特有的结点连同它的全部后裔,连接这些后裔的边以及这些结点的标记。例如: S a A S a S b A a b a

  35. 用子树解释短语,直接短语,句柄: 短语:一棵子树的所有叶子自左至右排列起来形成一个相对于子树根的短语。 直接短语:仅有父子两代的一棵子树,它的 所有叶子自左至右排列起来所形成的符号串。 句柄:一个句型的分析树中最左那棵只有父子两代的子树的所有叶子的自左至右排列。 例如,对表达式文法G[E]和句子a1+a2*a3,挑选出推导过程中产生的句型中的短语,直接短语,句柄。

  36. 例(a) E 短语 E E+T E+T T+T T T,T+T E + F+T F,F+T T * F a1+T T a1, a1+T a1+T*F a1, T*F, a1+T*F F a3 F a1+F * F a1, F,F*F, a1+F*F a1+a2 *F a1, a2,a1+ a2 *F, a2 *F a2 a1 a1+a2 *a3 a1, a2, a3, a2 *a3a1+ a2 *a3

  37. 例(b) E E E+T E+T*F T E + E+T*a3 T * F E+F* a3 T E+a2 * a3 F a3 F T+a2 * a3 F+a2 * a3 a2 a1 a1+a2 *a3

  38. 四. 文法的二义性的定义 • 描述一个句子的文法不是唯一的; • 2. 对于一个句子的分析应是唯一的。 • 考虑表达式下面的文法 G[E],其产生式如下: • EE+EE*E (E)  a • 对于句子a+a*a, 有如下两个最左推导: • 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

  39. 例(1) 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 + E E * E E + E E * E a a a a a a

  40. 例(2) EE+E E+E*E E+E*a E+a*a a+a*a E E*EE*a E+E*aE+a*a a+a*a E E 最右推导 E + E E * E E + E E * E a a a a a a

  41. 四. 二义性(歧义性,ambiquity)的定义: 如果一个文法的句子存在两棵分析树,那磨,该句子是二义性的。如果一个文法包含二义性的句子,则称这个文法是二义性的;否 则,该文法是无二义性的。几点说明: 1 . 一般来说,程序语言存在无二义性文法, 对于表达式来说,文法(2 .1)是无二义性的。对于条件语句,经常使用二义性文法描述它:S if expr then S if expr then S else S  other 二义性的句子: if e1 then if e2 then s1 else s2

  42. 描述if语句的无二义性文法的产生式: 下面是 Smathed_s  unmathed_s mathed_s if expr then mathed_s else mathed_s other unmathed_s if expr then S  if expr then mathed_s else unmathed_s 它显然比较复杂,因此: 2. 在能驾驭的情况下,使用二义性文法。

  43. 定义之3,4 3. 对于任意一个上下文无关文法,不存在 一个算法,判定它是无二义性的;但能给出一组充分条件,满足这组充分条件的文法是无二义性的。 4. 存在先天二义性语言。例如, aibicji,j1 aibjcji,j1 存在一个二义性的句子akbkck。 压缩过的文法(化简了的文法): 1.形式的产生式:  A→A P ; 2. 每个非终结符号A必须都有用处。即, S αAβ 且 A γ,γ∈VT* + *

  44. 2.4 形式语言概观 • 2.4. 1 文法分类 • 2.4. 2 非上下文无关文法的语言结构 • 2.4. 3 上下文无关语言和正规语言的区别

  45. 2.4.1 文法分类 逐渐对产生式施加限制 四种类型: 0型,1型,2型,3型 0型:G=(VT,VN,S,P) 规则形式 : , (VTVN)*,  推导: 1型(上下文有关) : 规则形式 :A  A VN, ,,.  (VTVN)*,  2型(上下文无关):规则形式 :A A VN, (VTVN)* 3型(右线性): A aB A  a (左线性) A Ba A  a a VT{}

  46. 2.4.2非上下文无关的语言结构 在我们使用的程序语言中,有些语言结构并不是总能用上下文无关文法描述的。 例2.9L1={wcw|w∈{a,b}+}。例如,aabcaab就是L1的一个句子。这个语言是检查程序中标识符的声明应先于引用的抽象  。 例2.10L2={anbmcndm|n,m≥0},它是检查过程声明的形参个数和过程引用的参数个数一致问题的抽象。

  47. 2.4.3 上下文无关语言和正则语言的区别 语言中过程定义和引用的语法并不涉及到参数个数,例如,Pascal的过程语句可描述为 s-call→id(r-list)             r-list→r-list, r  |r 实参和形参个数的一致性检查也是放在语义分析阶段完成的。 定义2.7如果一个上下文无关文法G中存在具有下列特征的非终结符A:    A αAβ 其中α,β∈{VT∪VN}+,则称A为自嵌套的, +

  48. 上下文无关文法。 包含自嵌套非终结符号的文法是   语言{anbn|n0}是上下文无关语言,原因是找不到一个非自嵌套的上下文无关文法描述它; 语言{anbm|n,m  0}是正则语言,原因是存在一个正规文法描述它。 在程序语言中,与词法有关的规则属于正规文法;与局部语法有关的规则属于上 下文无关文法;而与全局语法和语义有关的部分往往要用上下文有关文法来描述。

  49. 为什么不用上下文有关文法描述程序语言?   用上下文有关文法描述程序语言不仅相当困难,将使语法定义变得烦杂,难懂,而且一般不能构造有效的分析程序,因此,通常用上下文无关文法描述,而把与上下文有关的限制包含在非形式描述的全局语法与语义中。 把描述词法的正规文法从描述语法的上 下文无关文法中分离出来。在分离出正则文法后的上下文无关文法中,这些单词符号是属于终结符号VT中的符号。文法(2.1) 中的表达式文法,a是终结符号。

  50. 作业 :1.1 G[S]: ( b ) , ( c ), ( d ), ( e ) 1.2 G[S]: ( a ), ( b ) , ( c ), ( d ) 1.3 G[bexpr]: ( b ) 1. 写出下面语言的三型文法: (a) ann0 (b) anbmn,m1 (c) anbmckn,m1 (d)Pascal的标识符 (e) Pascal的整数 2. 已知文法G[S],其产生式如下: S(S) (a)L(G[S])是什磨? (b)对于(a)的结果,试给出证明。

More Related