第一章编译概述94
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
08.03.2021
34
2.3 文法和语言的分类
例:2型(上下文无关)文法
文法Gຫໍສະໝຸດ Baidu:
S→aB|bA A→a|aS|bAA B→b|bS|aBB
文法G2:
S→0A|1B|0 A→0A|1B|0S B→1B|1|0
08.03.2021
35
2.3 文法和语言的分类
例:3型(正规)文法
文法G:
S→0A|1B|0 A→0A|1B|0S B→1B|1|0
VN :非终结符(nonterminals)集,其中的元素一般 用大写字母表示(A,B,C…),或者用尖括号括起,代 表语法单位,如汉语中的语句、段落,PASCAL语言中 的语句、表达式、子程序等
08.03.2021
16
2.2 文法和语言的定义
S 是一个特殊的非终结符号,称为开始符号(start symbol)
前缀:移走符号串 s 尾部的零个或多于零 个符号得到的符号串
例如: b是符号串banana的一个前缀
后缀:删去符号串 s 头部的零个或多于零 个符号得到的符号串
例如: nana是符号串banana的一个后缀
08.03.2021
5
2.1 串和语言
子串:从 s 中删去一个前缀和一个后缀得 到的符号串
08.03.2021
26
2.2 文法和语言的定义
语言的形式定义:
文法 G 推导出的所有句子组成的集合,称为语言,记 为 L(G)
L(G)={α| S * α, α∈ VT* }
08.03.2021
27
2.2 文法和语言的定义
例子: G1:
S →A A →0A1 A →01
是由一个或多个 0 开头,后跟同样数 目的 1 的符号串构成的集合(语言),
08.03.2021
20
2.2 文法和语言的定义
推导的长度
直接推导的次数
α β,长度大于等于1的推导 α *β,长度大于等于0的推导
推导的例子:
S => 0S1 => 00S11 => 000111,长度为3
记为:S 000111
S
*
S
08.03.2021
21
2.2 文法和语言的定义
Chapter2 Grammar and Language
串和语言(Strings and Languages ) 文法和语言的定义
(Definitions of Grammar and Language) 文法和语言的分类
(Classification of Grammar and Language) 分析树与句型
αn 定义为 αα…αα n个α α1 =α, α2 =αα,注:α0 =ε
08.03.2021
8
2.1 串和语言
语言的运算(operations on languages): 语言是符号串的集合,集合的运算有并、交、 差等
并运算 — 等同于集合的并运算
08.03.2021
9
2.1 串和语言
S 至少要在一条产生式中作为左部出现
P是一个产生式(production)的集合
产生式(重写规则、生成式),是形如α→β或α∷=β
的(α,β)有序对,且α∈V+,β∈V*
其中 V
= (VT∪VN)
α称为产生式的左部,不能为空ε
β称为产生式的右部,可以为空ε(如:A → ε )
08.03.2021
例如:ana是符号串banana的一个子串
* 对于每个符号串s, s和ε两者都是符号串 s的 前缀,后缀和子串
符号串的真(proper)前缀、真后缀和真 子串——非空
08.03.2021
6
2.1 串和语言
语言(Language):
某个字母表上的符号串的集合
例: 汉语——所有符合汉语语法的句子构成的集合 PASCAL语言——所有合法的PASCAL程序构成的
08.03.2021
36
2.3 文法和语言的分类
0型文法产生的语言称为0型语言
1型文法或上下文有关文法( CSG )产生的语 言称为1型语言或上下文有关语言(CSL)
最左推导:E=lm>T=lm>T*F=lm>F*F=lm>a*F=lm>a*a
最右推导:E=rm>T=rm>T*F=rm>T*a=rm>F*a=rm>a*a
** 最右推导又称为规范推导
08.03.2021
23
2.2 文法和语言的定义
最右归约与最左归约
最左推导的逆过程是最右归约,即对最右边的可归 约串进行归约
连接(乘积) 两个符号串集合 A 和 B 的乘积定义为: AB ={ xy | x A 且 y B }
例如:集合A={ab,cde} B={0,1} 则 AB={ ab1,ab0,cde0,cde1 }
{ε}L = L{ε} = L LL…L = Ln L0 = {ε}
08.03.2021
(Parse Tree and Sentential form)
08.03.2021
1
2.1 串和语言
字母表(alphabet):
字母表是符号(symbols)的非空有穷集合, 用∑表示
符号:可以相互区别的记号(元素)
不同的语言有不同的字母表
汉语——汉字 英语——26个英文字母
08.03.2021
最左推导与最右推导
α =>β是一步推导, α ,β∈ (VT∪VN)* 最左推导(=lm>) — 对 α 中的最左非终结符进行展
开 最右推导(=rm>) — 对 α 中的最右非终结符进行展
开
08.03.2021
22
2.2 文法和语言的定义
例子:表达式文法 E → E + T E→T T→T*F T→F F → (E) F →a
08.03.2021
14
2.2 文法和语言的定义
语言的有穷表示有两个途经:
生成方式 (文法):语言中的每个句子可以用严格 定义的规则来构造。
识别方式(自动机):用一个过程,当输入的一任 意串属于语言时,该过程经有限次计算后就会停止 并回答“是”,若不属于,要么能停止并回答“不 是”,(要么永远继续下去。)
分类的方法是对文法的产生式进行不同的限制
08.03.2021
32
2.3 文法和语言的分类
0型文法— | α | ≠ 0,即 α ≠ ε ( α→β )
1型(上下文有关)文法— | α | ≤ | β | ( α→β )
2型(上下文无关)文法— A ∈ VN, β ∈ (VT∪VN)* ( A→β )
产生的也是表达式的集合
08.03.2021
30
2.2 文法和语言的定义
一个文法对应一个语言,但一个语言可能有若干个文 法产生它,这若干个文法是等价的,称为 等价(equivalent)文法
例 G2 与 G3
08.03.2021
31
2.3 文法和语言的分类
乔姆斯基(Chomsky)在1956年提出形式语言 理论,他将形式文法分为四类(0,1,2,3),对应四 类形式语言(0,1,2,3)
文法即是以生成方式描述语言的:语言中的每 个句子可以用严格定义的规则来构造.
08.03.2021
15
2.2 文法和语言的定义
文法 G 定义为四元组(VT,VN,S,P):
VT :终结符(terminals)集,其中的元素一般用小写 字母或数字表示(a,b,c…0,1..),代表语言中不可再 分的基本符号,如汉语中的汉字、PASCAL语言中的基 本字
2
2.1 串和语言
符号串(String):
符号串是由字母表中的符号所组成的有穷序列
例如: Σ={a,b} a, b, aa, ab, aabba…都是Σ上的符号串
ε是任何Σ上的符号串
在语言理论中,符号串又称为: 句子(sentence)、字(word)
08.03.2021
3
2.1 串和语言
10
2.1 串和语言
* 闭包(Kleene closure) L* = L0∪L1∪L2∪L3∪…
+闭包(Positive closure) L+ = L1∪L2∪L3∪… L* = L+ ∪ε
08.03.2021
11
2.1 串和语言
注: 后面通常是考虑字母表∑的 * 闭包和 + 闭包
例2:文法 G = (VT,VN,S,P) VN = {<标识符>,<字母>,<数字>} VT = {a,b,c,…x,y,z,0,1,…,9} P = { <标识符>→<字母> <标识符>→<标识符><字母> <标识符>→<标识符><数字> <字母>→a,…, <字母>→z <数字>→0,…, <数字>→9 } S = <标识符>
集合
注意:空集{ }、 和{ε}的不同
08.03.2021
7
2.1 串和语言
符号串的运算:
连接(concatenation):符号串x、y的连接,是把 y 的符号写在 x 的符号之后得到的符号串 xy
如 x = ab, y = cd 则 xy = abcd 注:εα = αε = α
方幂(exponentiation):符号串自身连接n次得到 的符号串
符号串的长度
符号串中包含符号的个数 符号串 s 的长度记为 |s|
例,对于字母表{a,b,c},aab 是其上的一个符号 串, | aab |=3
注意:空符号串ε, | ε |=0
08.03.2021
4
2.1 串和语言
符号串的前缀(prefix)、后缀(suffix)、子 串(substring)
把 L 和 D 两个字母表看作长度为1的符号串集 合,即语言
1. L ∪ D 2. LD 3. L4 4. L* 5. L(L ∪ D)* 6. D+
08.03.2021
13
2.2 文法和语言的定义
如何来描述一种语言?
如果语言是有穷的(只含有有穷多个句子), 可以将句子逐一列出来表示
如果语言是无穷的,找出语言的有穷表示。
例:Σ={a,b} Σ*={ε,a,b,aa,ab,ba,bb,aaa,aab,…} Σ+={a,b,aa,ab,ba,bb,aaa,aab,…}
08.03.2021
12
2.1 串和语言
综合性的例子:P93 example 3.2 L = {A,B,C,…,Z,a,b,c,…,z} D = {0,1,…,9}
17
2.2 文法和语言的定义
例1:文法 G = (VT,VN,S,P) VN = { S } VT ={ 0, 1 } P = { S→0S1, S→01 }
可以只写出产生式,通过产生式可以得到文法的其它 部分
左部相同的产生式可以写在一起,如: S →0S1 | 01
08.03.2021
18
2.2 文法和语言的定义
3型(正规)文法
A→a 或 A→aB(右线性)
A→a 或 A→Ba(左线性)
08.03.2021
33
2.3 文法和语言的分类
例:1型(上下文有关)文法
文法G:
S→CD
C→aCA
C→bCB
AD→aD
BD→bD
Aa→bD
Ab→bA Ba→aB Bb→bB C→ε D→ε
L(G)={ww|w∈{a,b}*}
句型:从文法的开始符号出发进行零步或多于零步的
推导得到的文法符号串
S
*
α
句型可以既包含终结符号又包含非终结符号,只包含 终结符号的句型称为句子
句子是一种特殊的句型
08.03.2021
25
2.2 文法和语言的定义
例:在推导 E =>T =>T*F =>F*F =>a*F =>a*a 中,
句型有: E 、T、T*F 、F*F 、a*F 、a*a 句子是: a*a
可记为:L(G)={0n1n|n≥1}
08.03.2021
28
2.2 文法和语言的定义
G2:
E → id E →E + E E →E * E E → (E)
产生的是表达式的集合
08.03.2021
29
2.2 文法和语言的定义
G3: E → E + T E→T T→T*F T→F F → (E) F → id
a*a <= a*F <= F*F <= T*F <= T<= E
最右推导的逆过程是最左归约,即对最左边的可归 约串进行归约
a*a <= F*a <= T*a <= T*F <=T <= E
**最左归约称为规范归约
08.03.2021
24
2.2 文法和语言的定义
句型(sentential form)与句子(sentence):
08.03.2021
19
2.2 文法和语言的定义
推导(derivation)与归约(reduction): 直接推导与直接归约
如果 A → γ 是 G 的一条产生式,则称用αγβ代替 αAβ为一步直接推导,记为αAβ =>αγβ;称用αAβ 代替αγβ为一步直接归约,记为αγβ<=αAβ
推导是用产生式的右部代替左部,归约是用产生式的 左部代替右部,归约是推导的逆过程