第二章 文法和语言基本知识
z第二章 文法和语言
![z第二章 文法和语言](https://img.taocdn.com/s3/m/107be68aec3a87c24028c483.png)
例子:考虑一个文法
G=({a, b}, {S}, S,P) 其中 P:SaSb ab。试推导其语言。 SaSb aaSbb a3Sb3 …… an-1Sbn-1 anbn 其语言为:L(G)={anbn |n>=1}
说明:
★ 只用一个产生式并不足以定义一个语法范 畴,在绝大部分情况下都需要用好几个产生式, 特别是需要含有递归的产生式(产生式左部的 符号直接在右部出现). ★ VN∩VT=Φ:即文法中的任意一个符号要么 为非终结符号,要么为终结符号.
A A1 A 2 A 3 ......
定理2.1 若A是符号串集合,则A*=(A*)* 。
证明 显然 A* (A*)* , 现证 (A*)* A* 任给符号串 x∈(A*)*,则存在n,使得 x∈(A*)n, x 必存在n个子串x1 ,…,xn , 使得x= x1…xn ,且 xi∈A* (i=1,…,n)。 由xi∈A* ,必存在整数pi ,使得xi∈Api , 令 n
句型、句子和语言
* ,其中 S 是开始符号, ∈ V* ,则称 若S 为文法G的句型。 * 特别地,若 S ,且 ∈ VT* ,则称 为 G 的 句子。 文法G所定义的语言,记作:
L(G)={|∈VT*,且S}
*
同一句型有不同的推导序列
设有文法G[N1]: N1→N N →ND|D D→0|1|2 则句子12可由三种不同的推导序列推导出来: (1) N1 N ND N2 D2 12 (2) N1 N ND DD 1D 12 可见,同一句型(句子)可以通过不同的推导 序列推导出来。
|x|= 2 |y|= 3 |z|= 5
|xy|=|x|+|y|
编译原理第02章文法和语言的基本知识
![编译原理第02章文法和语言的基本知识](https://img.taocdn.com/s3/m/7aeab477f08583d049649b6648d7c1c709a10b12.png)
01
02
03
04
05
短语、直接短语和句柄
文法和语言的形式定义
语法树和文法的二义性
字母表和符号串
文法和语言的分类
第二章 文法和语言的基本知识
对程序设计语言的描述是从语法、语义和语用三个因素来考虑。
1
语法是对语言结构的定义。
2
语用则是从使用的角度去描述语言。
3
语义是描述了语言的含义。
4
2.0 概 述
文法的形式定义 A→n …
对于若干个左部相同的规则,如
A→1
缩写为:A→1 | 2 | … | n i称为A的一个候选式。
A→2
第一条规则的左部是识别符号。
对文法G不用四元式显示表示,仅
只将规则写出。
我们约定:
2.3.1 文法的形式定义
VN={A}
S=A
VT={0,1} P: A→ 0 | 1 | A0 | A1
4. 句型和句子
设有文法G[S](S是文法G的开始符号)
如果S x, x ∈(VN∪VT)* 则称符号串x 为文法G[S]的句型。
*
如果S x, x ∈VT* 则称符号串x为文法 G[S]的句子。
*
2.3.2 语言的形式定义
例1 设有文法G[S]:
我们有:
由该文法所确定的语言为
该文法所定义的语言是什么?
L(G[S])={ε, 0, 1, 00, 01, 10, 11, …} ={ x | x∈{0,1}* }
1
2
3
4
2.3.2 语言的形式定义
L(G[A])={ yxn | n≥1}
A→yB
B →xB | x 例5 设有文法G[A]: 该文法所定义的语言是什么?
第二章 文法和语言基本知识
![第二章 文法和语言基本知识](https://img.taocdn.com/s3/m/33b12bc884254b35eefd34dd.png)
0型(无限制):G=(VT,VN,S,P) 规则形式 : , (VTVN)*, 并且至少含有一个非终结符号; 1型(上下文有关) : A u u (V V )+, A u ,S 除外; 2型(上下文无关):规则形式 : A A VN, (VTVN)* ; 3型(右线性): A B或 A (左线性) A B 或 A , VT*, A,B VN
S a
A
b b A a
S
a
S
a
关于分析树的几点说明
1. 一个句型推导或分析用一棵树结构图示 出来,它反应了一个句型语法结构的层次。
2. 对于一个句子的多种推导(若文法是无二义 性的),采用各种推导过程,画出的分析树是 一样的。分析树并未描述推导过程,它是不同 推导过程的抽象共性。 3. 在书中,用画分析树的过程解释语法分析过 程,用分析树图解语法结构。
1. 2. 3. 4. 5. • • • • 符号串的连接 εy=yε=y 集合的乘积 {ε}A=A{ε}=A 符号串的幂运算 y0=ε y1=y y2=yy 集合的幂运算 A0={ε} A1=A A2=AA 集合A的闭包A*与正闭包A+ ∑的闭包∑*: ∑上所有符号串的全体 例如,若 ∑={a,b}, 则∑+={a,b,aa,ab,ba,bb,aaa,…} 则∑*={ε,a,b,aa,ab,ba,bb,aaa,…}= ∑0 U ∑+
+
文法对应的语言示例:
见课本p16,例2.7—2.9 S → 01 | 0S1 S → 0S | 1S | ε
A → yB
例
B → xB | x
S → aB | bA A → a | aS B → b | bS | | bAA aBB
编译原理第二章文法和语言
![编译原理第二章文法和语言](https://img.taocdn.com/s3/m/bfcc7f2f0a1c59eef8c75fbfc77da26924c5967f.png)
语言的语法结构
总结词
语言的语法结构是语言形成和发展的核心要素,决定 了语言的表达方式和意义。
详细描述
语言的语法结构是指语言的组织规律和规则,包括词 法、句法、语义等方面的规则。词法规定了词汇的构 成和变化规则,如名词、动词、形容词等词类的划分 ;句法规定了句子结构的规则,如主语、谓语、宾语 等句子的成分及其排列顺序;语义则涉及到词汇和句 子的意义和解释。语言的语法结构是语言理解和生成 的基础,也是语言演变和发展的关键因素。
文法和语言的应用前景
1 2
人工智能领域
文法和语言是人工智能领域的重要基础,可用于 自然语言处理、机器翻译、语音识别等技术的研 究和应用。
计算机科学教育
文法和语言是计算机科学专业的重要课程之一, 对于培养计算机科学人才具有重要意义。
3
软件工程领域
文法和语言可用于软件工程领域中的编译器设计 和开发,提高软件开发的效率和可靠性。
05
文法和语言的未来发展
文法和语言的研究方向
形式语言理论
深入研究形式语言的基本理论, 包括语法、语义和语用等方面, 为自然语言处理和人工智能等领 域提供理论基础。
自然语言处理
结合自然语言处理技术,研究自 然语言的语法、语义和语用规律, 提高自然语言处理的准确性和效 率。
计算语言学
将计算语言学与形式语言理论相 结合,研究语言处理算法和模型, 为机器翻译、语音识别等领域提 供技术支持。
文法和语言的发展趋势
深度学习与文法和语言的结合
01
随着深度学习技术的发展,文法和语言的研究将更加注重与深
度学习的结合,以提高语言处理的性能和效率。
跨媒体语言处理
02
随着多媒体数据的普及,文法和语言的研究将逐渐扩展到跨媒
编译原理第2章文法和语言
![编译原理第2章文法和语言](https://img.taocdn.com/s3/m/f5f4ab95db38376baf1ffc4ffe4733687e21fcbf.png)
2.1 文法和语言的定义
文法分类
2型文法(上下文无关文法):如果对1型文法施加以下的限制,就得到2 型文法: G的任何产生式为Aβ, A∈VN,β∈(VN∪VT)*
这种文法意味着,每一规则左部只有一个非终结符,无需考虑该非终结 符在上下文中的出现情况。
总结3型:文法(正则文法):如果对2型文法施加以下的限制,就得到3型文法: 右α,β其部G3称2∈中型的正、形文任A规V法3,何式文TB型称产∈)法仅为生V。文则N右式为, 法线为α为A,性Aβ规3∈文型αV法则αBT或|文B左β左|,法或β线部,者性或,仅A文者否法为B;Aα则非3|β型为,终文B2法结α型等|符β价文(于,法正A若规,式B规,∈则所V以N又,
VVVNN=,VV∪NT,∪PV三T=VФ个T表集VVP示=NT合==文{均{{N法为0NG,}非10的;}空N字;,有N母穷表集1或N合词,N汇表0, N1};
S=N。
2.1 文法和语言的定义
文法
文法产生式的其它表示法:
规则1:{a}表示a的0次或多次重复出现,即{a}表示ε或a或aa或aaa或 a…a;{a}mn 表示a的m到n次出现。
要求: (1)能根据文法分析其所产生的语言; (2)能根据语言构造其文法。
2.1 文法和语言的定义
根据文法抽象语言
文法 G={VN,VT,P,S},其中: VN={<数>,<数字串>,<数字>}; VT={0,1,2,3,4,5,6,7,8,9}; P: <数><数字串> <数字串><数字串><数字>|<数字> <数字>0|1|2|3|4|5|6|7|8|9 S=<数>
编译原理第二章 文法和语言资料
![编译原理第二章 文法和语言资料](https://img.taocdn.com/s3/m/a1e673a0d4d8d15abf234e01.png)
第二章文法和语言本章讲述目前广泛使用的上下文无关文法。
即用上下文无关文法作为程序设计语言语法的描述工具。
阐明语法的一个工具是文法。
本章将介绍文法和语言的概念。
本章重点:上下文无关文法及其句型分析中的有关问题。
第一节文法的直观概念当我们表述一种语言时,无非是说明这种语言的句子,如果语言只含有有穷多个句子,则只需列出句子的有穷集就行了,但对于有无穷句子的语言来讲,存在着如何给出它的有穷表示的问题。
以自然语言为例,人们无法列出全部句子,但是人们可以给出一些规则,用这些规则来说明(或者定义)句子的组成结构,比如:“我是大学生”。
是汉语的一个句子。
汉语句子可以是由主语后随谓语而成,构成谓语的是动词和直接宾语,我们采用EBNF来表示这种句子的构成规则:〈句子〉∷=〈主语〉〈谓语〉〈主语〉∷=〈代词〉|〈名词〉〈代词〉∷=我|你|他〈名词〉∷=王明|大学生|工人|英语〈谓语〉∷=〈动词〉〈直接宾语〉〈动词〉∷=是|学习〈直接宾语〉∷=〈代词〉|〈名词〉“我是大学生”的构成符合上述规则,而“我大学生是”不符合上述规则,我们说它不是句子。
这些规则成为我们判别句子结构合法与否的依据。
一旦有了一组规则以后,我们可以按照如下方式用它们去推导或产生句子。
我们开始去找∷=左端的带有〈句子〉的规则并把它表示成∷=右端的符号串,这个动作表示成:〈句子〉⇒〈主语〉〈谓语〉,然后在得到的串〈主语〉〈谓语〉中,选取〈主语〉或〈谓语〉,再用相应的规则∷=右端代替之。
比如,选取了〈主语〉,并采用规则〈主语〉∷=〈代词〉,那么得到:〈主语〉〈谓语〉⇒〈代词〉〈谓语〉,重复做下去,我们得到句子:“我是大学生”的全部动作过程是:〈句子〉⇒〈主语〉〈谓语〉⇒〈代词〉〈谓语〉⇒我〈谓语〉⇒我〈动词〉〈直接宾语〉⇒我是〈直接宾语〉⇒我是〈名词〉⇒我是大学生符号⇒的含义是,使用一条规则,代替⇒左边的某个符号,产生⇒右端的符号串。
显然,按照上述办法,不仅生成“我是大学生”这样的句子,还可以生成“王明是大学生”,“王明学习英语”,“我学习英语”,“他学习英语”,“你是工人”,“你学习王明”等几十个句子。
编译原理第02章_文法与语言的基本知识
![编译原理第02章_文法与语言的基本知识](https://img.taocdn.com/s3/m/5e86b1637c1cfad6185fa706.png)
L(G)={anbncn,n>1}
2.3.2 语言的形式定义
由文法确定语言的方法: 从文法的开始符号出发,反复使
用规则替换、展开非终结符,找出句 子的规律,用式子或自然语言描述出 来。
2.3.3 文法的形式定义
由语言构造文法
例1 设字母表∑={a, b},试设计一个文法, 描述语言 L= { a2n , b2n | n≥1 }
即:闭包为集合中元素的任意组合。 闭包比正闭包多含一个空符号串。
2.3 文法和语言的形式定义 ∑+=∑1∪∑2∪∑3∪… ={ 0, 1, 00, 10, 11, 01, 000, 100, …}
用A表示∑+
A→0 A→1 A→A0 A→A1
2.3.1 文法的形式定义
1. 规则 也称产生式
规则是一个符号与一个符号串的 有序对(A,β),通常写作:
2.2 符号串的运算
例如,设A={ a, b },则 A0={} A1=A={ a, b } A2=AA={ aa, ab, ba, bb } A3=AAA=A2A
={ aaa, aab, aba, abb, baa, bab, bba, bbb }
…
2.2 符号串的运算
5. 集合A的正闭包A+与闭包A* 设A是符号串的集合,则A的正闭
我们有 εx=xε=x
2.2 符号串的运算
2. 符号串集合的乘积 设A和B是符号串的集合, 则A和B
的乘积定义为:
AB={xy | x∈A, y∈B}
集合的乘积是满足于 x∈A, y∈B 的所有符号串 xy 所构成的集合。
2.2 符号串的运算
例如:设A={ aa, b }, B={ c, d } 则AB={ aac, aad, bc, bd }
编译原理讲义(第二章文法与语言)
![编译原理讲义(第二章文法与语言)](https://img.taocdn.com/s3/m/3873cacba76e58fafbb00365.png)
整理ppt
9
文法和语言的定义(文法)
• 文法:文法G[Z]是一组有穷非空的重写 规则的集合。其中Z称为识别符号。G为 文法名字
• 文法例子:P22, 例子2.10。
• 所有的规则都是基于同一个符号表V。符 号表又可分划非终结符号集合VN和终结 符号结合VT。
整理ppt
10
• 〈句子〉::= <主语><谓语><状语> • <主语>::=<名词> • <名词>::=Peter | Berry | River • <谓语>::=<动词> • <动词>::=Swims • <介词>::= in • <状语>::= <介词> <名词>
=> 123
整理ppt
17
语言的定义(句型,句子)
• 对于文法G[Z],x称为G的一个句型如果:
Z =>* x 识别符号是最简单的句型。 • G[Z]的一个句型x被称为句子,如果:
xVT* 也就是说句子是全部由终结符号组成的 句型。
整理ppt
18
语言的定义(短语,简单短语)
• 短语:对于文法G[Z],如果Z =>* xUy, U=>+ u。显然,w=xuy是一个句型。我
• 句柄:一个句型的最左简单短语称为该 句型的句柄。
• 定义句柄的原因:在自底向上识别一个 符号串时,总是规约这个句柄。
整理ppt
20
语言的定义(文法的语言)
• 文法的语言:一个文法G[Z]的语言,用 L(G[Z])表示,定义如下:
L(G[Z]) = {x | Z=>* x 并且 x VT+} • 一个文法的语言就是该文法的所有的句子的
编译原理 第2章 文法和语言的基本知识
![编译原理 第2章 文法和语言的基本知识](https://img.taocdn.com/s3/m/d8a5058971fe910ef12df8dc.png)
=> the big elephant <动词><宾语>
=> the big elephant ate <宾语> => the big elephant ate <冠词><名词>
编译原理
2013年11月17日
2.1
字母表和符号串
不对 符号就是字符,对吗? 如={if,else,for,while} 字母表:符号的非空有限集 例:={0,1} C语言的字母表 A={a,b,…,0,1,…,9, +,-,×,_/, ( , ), =… if, else,for...} 符号:字母表中的元素 例: 0,1 符号串:由字母表中的符号组成的任何有穷序列 例:0,1, 01, 10, 011,.. 空符号串:无任何符号的符号串,用ε 表示
编译原理
2013年11月17日
2.2
文法和语言的形式定义
文法是对语言结构的定义与描述。(或称为“语法”)。
<赋值语句>::=<标识符>“=”<表达式> <表达式>::=<表达式>“+”<表达式> | <表达式>“*”<表达式> <表达式>::=“(”<表达式>“)” | <标识符> | <整数> | <实数>
T N
编译原理
2013年11月17日
第2章 文法和语言
![第2章 文法和语言](https://img.taocdn.com/s3/m/240e1fb60342a8956bec0975f46527d3240ca622.png)
句型。
2.句子:有文法G,若S =>* x,且x∈VT*,则称
x是文法G的句子。
例:G: S→0S1 | 01 S 0S1 00S11
G的句型: S,0S1 ,00S11, 000S111,00001111
000S111
00001111
G的句子:00001111, 01
32
推导句子a+a*a
例:G[E]:E→E+T|T T→T*F|F F→(E)|a
本章目的
构造编译程序,需针对特 定的程序语言,故需对被编 译的程序语言本身做精确地 描述。
为语言的语法(文法)描 述寻求工具。工具要对程序 设计语言给出精确无二义的 语法描述。(严谨、简洁、 易读)。
对于程 序设计者而 言,文法给 出了语言的 精确的语法 规范说明。
1
程序设计语言描述
语法Syntax:对语言结构的定义。 语义Semantics:描述语言的含义。 语用Pragmatics:从使用者角度描述语言。
2. 符号串:由字母表中的符号组成的任何有穷序
列称为该字母表上的符号串。
(1)空符号串ε:没有符号的符号串 。 例如: Σ={a,b} ε,a,b,aa,ab,aabba…都是上的符号串
7
(2)符号串s的头(前缀):移走符号串s尾部
的零个或多于零个符号得到的符号串。
如:b是符号串banana的一个前缀。 符号串s的尾(后缀):删去符号串s头部的零个
E E+T T+T F+T a+T a+T*F a+F*F a+a*F a+a*a
句子:用符号a,+,*,(和)构成的算术表达式
33
编译原理:文法与语言的基本知识
![编译原理:文法与语言的基本知识](https://img.taocdn.com/s3/m/385542a0eefdc8d377ee3200.png)
符号与符号串
– 例1: 1={0,1} 1是二进制数的字母表 2={a,b…….z} 2是英文小写字母 3={A….Z,0….9,+,-,*,/,.,(,),=,$,’,:} 3是FORTRAN4语言的字母表
注意:符号可能是字符的组合
– 如: 5= {ASCII码} 则<=为一个符号 再如: pascal语言的:= C语言的&&等等
若<U> +………<U>
称为右递归
3. 对文法G1、G2,如L(G1)=L(G2)
称文法 G1、G2等价
19
短语与句柄
• 2.3.3 短语与句柄
–定义7:设G[<S>]是一个文法,并设w=xuy 是该 文法的一个句型。若<S>*x<U>y且<U>+u, 则称u为句型w=xuy对非终结符<U>的一个短语。 若<S>*x<U>y且<U>u,则称u为句型w=xuy 相对于非终结符<U>的一个简单(直接)短语。 任何一个句型的最左简单短语称为柄短语(句 柄)。
– A0={}
An=AAn-1 (n>0)
– A*= A0∪ A1∪A2∪…∪An ∪……
称为A的闭包
– A+= A1∪A2∪…∪An ∪……
称为A的正闭包
7
• 由定义可知:A+=AA*=A*A • 例3:令A= 1={0,1}
– A*={,0,1,00,10,01,11…….} – A+= {0,1,00,10,01,11…….} – 令A= 3 则任一FORTRAN4语言所编
14
直接推导与推导
编译原理第二章_文法与语言
![编译原理第二章_文法与语言](https://img.taocdn.com/s3/m/d284be3ddc36a32d7375a417866fb84ae45cc306.png)
(8)符号串集合的自反闭包
设符号串集合为A,则A的自反闭包记为A* ,定义为: A* = A0 ∪ A1 ∪ A2∪… ∪ An
即A* = A0 ∪ A+ = {ε} ∪ A+ 例如: A= {a,b},则 A*={ε, a, b, aa, ab, ba, bb, aaa, …… }
AB={xy|x∈A,y∈B} 如:若A={ab,c}, B={d,efg},则AB={abd,abefg,cd,cefg} 特别地,有:{ε}A=A{ε}=A
• 空集φ 表示不含任何元素的空集{ }。 有: φA=A φ= φ
<注>请区别: ε,{},{ε}三种表示方法的含义
12
(5) 符号串的方幂
a1 an 表示:从a1出发经过一步或若干步,可推导出an 。
定义2.5 长度为n(n≥0)的推导 a1 an 表示:从a1出发经过0步( a1 =an )或若干步,可推导
出an 。
22
2.2.3 句型、句子、语言
1.句型:设G[S]是一个文法,S是它的开始符号,若S α , 则称α是文法G[S]的句型。
5
(1) <句子>::= <主语> <谓语>
推导过程(3/5)
(2) <主语>::= <代词> | <名词> (3) <代词>::= 我 | 你 | 他 (4) <名词>::=王明| 大学生|工人|英语
(5) <谓语>::=<动词> <直接宾语>
编译原理_文法和语言
![编译原理_文法和语言](https://img.taocdn.com/s3/m/561059ad1a37f111f1855b95.png)
2.3.3 语言的形式定义 例 文法G: S→0S1,S→01 有直接推导:
υ
ω
S 0S1 ( S→0S1 ) 0S1 00S11 ( S→0S1 ) 00S11 000S111 ( S→0S1 ) 000S111 00001111( S→01 )
2.3.3 语言的形式定义
从语言构造文法具体步骤为:(一般采用“凑规则” 的方法) • 找出语言的若干句子; • 分析句子的特点; • 根据句子的特点凑规则; • 形成文法; • 检验两个方面:语言的所有句子是否都是能由 文法的开始符推ห้องสมุดไป่ตู้得到;文法推导出的所有终 结符号串是否都是语言的句子。 • 注意:得到的文法是不唯一的。
例:给出语言为{anbn|n1}的文法。 解:G3(S):S aSb S ab 例:给出语言为{ambn|1nm2n}的文法。 解:G4(S): S aSb | aaSb S ab | aab
文法与语言的关系:
给定一个文法,就能从结构上唯一的确定其语言,即G L(G) 给定一种语言,能确定其文法,但这种文法不是唯一的, 即L—>G1、G2…等 若L(G1) = L(G2),则称文法G1和G2是等价的。
第二章 文法和语言的基本知识
学习目标
字母表和字符串 文法与语言的形式定义 短语、直接短语和句柄 语法树和文法二义性 文法和语言的分类
2.1 概述
一. 编译程序功能:高级语言翻译成等价的低级语 言 。
二. 构造编译程序,需针对特定的程序语言,故需 对被编译的程序语言本身进行精确描述。 三. 程序设计语言描述
2.3.2 文法的形式定义
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2、 子树
一棵分析树中一个特有的结点连同它的全部后裔, 连接这些后裔的边以及这些结点的标记。例如: S a A S
3、简单 子树
S
a
b
b
A
a
a
与短语等概念 的对应关系
2.5.2 文法的二义性( ambiguity)的定义
一个句型是否只对应一颗语法树? 考虑表达式下面的文法 G[E],其产生式如下: EE+EE*E (E) a
1. 2. 3. 4. 5. • • • • 符号串的连接 εy=yε=y 集合的乘积 {ε}A=A{ε}=A 符号串的幂运算 y0=ε y1=y y2=yy 集合的幂运算 A0={ε} A1=A A2=AA 集合A的闭包A*与正闭包A+ ∑的闭包∑*: ∑上所有符号串的全体 例如,若 ∑={a,b}, 则∑+={a,b,aa,ab,ba,bb,aaa,…} 则∑*={ε,a,b,aa,ab,ba,bb,aaa,…}= ∑0 U ∑+
2.2 字母表和符号串的基本概念
2.2.1 字母表和符号串
1、字母表:元素的非空有穷集合。 2、符号:字母表∑中的元素。 3、符号串(字) • 符号串:字母表∑中的符号所构成的一个有穷序列。 • 空字ε :不包含任何符号的序列。 • φ :不含任何元素的空集{}
2.2 字母表和符号串的基本概念
2.2.2 符号串的运算
设L和M是两个符号串集合,则
1.合并:L∪M={s|sL or sM} 2.乘积:LM={ st|sL and tM} 3.幂: L0={ε }, L1=L, L2=LL, ..., Ln=LLn-1 4. L的闭包,记作L*, L*=∪Li(i>=0) =L0∪L1∪L2∪L3 ∪… 5.L的正则闭包,记作L+(L+=L L*) L+=∪Li(i >=1) =L1∪L2∪L3∪L4∪…
如果一个文法存在某个句子对应两棵不同的语法树, 则称这个文法是二义的。 也就是某个句子有两个不同的最左(最右)推导。
人们已经证明,二义性问题是不可判定的。
为无二义性找寻一组充分条件 例如文法 G[E],其产生式如下:
EE+EE*E (E) i 是二义性文法,加 上限制规则:‘*’优先级高于‘+’且都 服从左结合,则有无二义文法如:
2.2 字母表和符号串的基本概念
2.2.1 字母表和符号串
1、字母表 字母表:字母表是元素的非空有穷集合。 任何程序语言都有自己的字母表,例如: • 机器语言:由符号“0”和“1”组成的字母表,∑={0,1} • ASCII字符集; • C语言字母表为: ∑= {AZ, az, 09, +, -, *, /, <, =, >,:, ‘,’, ; ,.,!, ~,%,&, ¦ ,^, (, ), {, },[, ] }
+ 有推导A A… + A …A + A …A…
注:语言是无穷集合,描述的文法一定是递归的。
2.4 短语、直接短语、句柄
短语: 设文法G=(VT,VN,P,S) * + 若有 S αAδ 且 A β, 则称β是句型αβδ相对于非终结符A的短语。
* 若S αAδ 且A=>β,则称β是直接短语。
E
E + E
最左推导 E
E
* E a E
E a a
*
E
a
E a
+
a
EE+E E+E*E E+E*a E+a*a a+a*a E E + E
E E*EE*a E+E*aE+a*a a+a*a E E * E a a E
最右推导 E a +
E
a a
*
E
a
ห้องสมุดไป่ตู้ 结论:
一个句型可能有不止一个最左(最右)推导, 对应不同的语法树,可以用完全不同的办法生 成一个句型。
a 2 S 5
a 9
A3 b 6 A 7
b 10
S 4
8 a 11 a
如何画出分析树
(自顶向下)
根据推导序列,对每步推导画相应分枝
S aAS aSbAS aabAS aabbaS aabbaa S a S a A b A S a a
b
如何画出分析树
(自底向上)
根据归约序列,对每步归约画相应分枝 S aAS aAa aSbAa aSbbaa aabbaa
例如: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的数字串所构成的 集合。
+
n
3、 广义推导
0
*
n 表示 0 = n或者 0
+ n
2.3.3 语言的形式定义
4、句型和句子
设有文法 G=(VT,VN,S, P)。 * 如果S ,则称是一个句型。
仅含终结符号的句型是一个句子。
5、语言
由文法G产生的所有句子所组成的集合就是语言L(G)。 L(G)={ |S 且 ∈VT*} 注: L(G)是VT*的子集
第二章 文法和语言基本知识
本章知识点: • • • • • • 字母表和符号串的概念 文法和语言的形式定义 直接推导、推导、句型、句子 短语、直接短语、句柄 语法树、文法的二义性 了解文法和语言的分类
2.1 概述
• 编译程序是针对某种程序设计语言的。
• 程序设计语言的精确定义和描述: – 语法:语言结构的定义 – 语义:描述语言的含义 – 语用:从使用的角度来描述语言 • 非形式化描述 • 形式化描述:用一整套带有严格规定的符号体 系来描述问题。
+
文法对应的语言示例:
见课本p16,例2.7—2.9 S → 01 | 0S1 S → 0S | 1S | ε
A → yB
例
B → xB | x
S → aB | bA A → a | aS B → b | bS | | bAA aBB
2.3.4 规范推导和规范归约 • 最左推导: 推导中的每一步β,都是替换中最 左的非终结符号。 例如:EE+T T+T F+T a+T a+T*F a+F *F a+a *F a+a*a • 最右推导:推导中的每一步β,都是替换中最右 的非终结符号。 例如:EE+T E+T *F E+ T*a E+F*aE+a*a T+a*a F+a*a a+a*a
S a
A
b b A a
S
a
S
a
关于分析树的几点说明
1. 一个句型推导或分析用一棵树结构图示 出来,它反应了一个句型语法结构的层次。
2. 对于一个句子的多种推导(若文法是无二义 性的),采用各种推导过程,画出的分析树是 一样的。分析树并未描述推导过程,它是不同 推导过程的抽象共性。 3. 在书中,用画分析树的过程解释语法分析过 程,用分析树图解语法结构。
它显然比较复杂,因此:
在能驾驭的情况下,可以使用二义性文法。
2.7 文法的实用限制
化简了的文法(限制条件)
1.产生式: A→A P ; 2. 每个非终结符号A必须都有用处。即,
* S αAβ , 且 A
+ * γ, γ ∈ V T
2.6 文法和语言分类
语言的分类:
对文法中的规则施加不同的限制 四种类型: 0型,1型,2型,3型
2.3
文法和语言的形式定义
2.3.1 形式语言
• 形式语言:符号串的集合
不考虑语义
程序←→符号串 • 有穷集合的语言描述:枚举法 • 无穷集合的语言描述:文法(含递归) 例 ∑={0,1} , 则集合 ∑+表示为递归文法: A→0 A →1 A→A0 A →A1
2.3
文法和语言的形式定义
2.3.2 文法的形式定义
其中,A是规则的左部, β是规则的右部
→表示生成或定义为
• 语言的语法结构用一组规则来表示。
• 终结符号、非终结符号
例 赋值语句→变量=表达式
2. 文法 文法是规则的非空有穷集合,通常表示成四元式 G= (VT,VN , S, P ),其中: VT是一个非空有穷终结符号集合; VN是一个非空有穷的非终结符号集合, 且VT∩VN=Φ; P是一个产生式的非空有穷集合,每个产生式的形式是 A (或A ::= ),其中 A∈VN, ∈(VT∪VN)*。 S VN ,称为开始符号,S必须至少在某个产生式的左部 出现一次 。 左部相同的产生式可以缩写成:A 1| 2| •文法是对语言结构的定义和描述,规则是其关键。
• 等价文法
2.3.3 语言的形式定义 1、直接推导
令G=(VT,VN,S,P), 若Aγ∈P,
且,β,γ ∈(VT∪VN)*,则称 Aβ直接推导出 γβ,表示成
Aβ γβ 2、推导
如果存在一个直接推导序列: 0 1 2 … n(n>0) 称为 0至 n的一个长度为n的推导, 表示成 0
2.3.4 规范推导和规范归约
• 最左推导: 推导中的每一步β,都是替换中最左的非终结符号。
•
最右推导:推导中的每一步β,都是替换中最右的非终结符号。
• 规范推导、规范句型 • 归约:推导的逆过程 β • 规范归约(最左归约)
.
2.3.5 递归规则与文法的递归性 1、递归规则 规则形如: A → A… 或 A → … A 或 A → …A… 2、文法的递归性