Alphabet
)与字母表的运算∑
是一个有穷符号集合
{ 0,1 }
ASCII
字符集Unicode
字符集∑1
和∑2
的乘积product
∑1∑2 ={ab|a ∈ ∑1 , b ∈ ∑2 }
{0, 1} {a, b} ={0a, 0b, 1a, 1b}
∑
的n
次幂power
{0, 1}^3 ={0, 1}*{0, 1}*{0, 1} ={000, 001, 010, 011, 100, 101, 110, 111}
字母表的
n
次幂:长度为n
的符号串构成的集合
字母表∑
的正闭包positive closure
∑^+ = ∑ ∪ ∑2 ∪ ∑3 ∪ …
例如
{a, b, c, d }
^+ = {a, b, c, d,
aa, ab, ac, ad, ba, bb, bc, bd, …,
aaa, aab, aac, aad, aba, abb, abc, …}
字母表的正闭包:长度正数的符号串构成的集合
∑
的克林闭包(Kleene closure)
∑* = ∑0 ∪ ∑+ = ∑0 ∪ ∑ ∪ ∑2 ∪ ∑3 ∪ …
{a, b, c, d }
* = {ε, a, b, c, d,
aa, ab, ac, ad, ba, bb, bc, bd, …,
aaa, aab, aac, aad, aba, abb, abc, …}
字母表的克林闭包:任意符号串(长度可以为零)构成的集合
设∑
是一个字母表,x∈∑* ,x称为是∑上的一个串
串s的长度,通常记作|s|
,是指s
中符号的个数
|aab|=3
空串是长度为0
的串,用ε(epsilon)
表示
|ε|= 0
如果 x
和y
是串,那么x
和y
的连接(concatenation)
是把y
附加到x
后面而形成的串,记作xy
x=dog
且y=house
,那么xy=doghouse
identity
,即对于任何串s
都有,εs = sε = s
设x,y,z
是三个字符串,如果x=yz
, 则称y
是x
的前缀,z
是x
的后缀
串上的运算——幂
串s
的幂运算
s^0= ε,
s^n = s^n-1s, n ≥1
s^1 = s^0*s = εs = s,s^2 = ss,s^3 = sss,…
例:如果 s =ba,那么s^1= ba,s^2=baba,
s^3=bababa
串
s
的n
次幂:将n
个s
连接起来
<句子> -> <名词短语> <动词短语>
<名词短语> -> <形容词> <名词短语>
<名词短语> -> <名词>
<动词短语>-> <动词> <名词短语>
<形容词> ->
<名词> ->
名词
动词
- 未用尖括号括起来部分表示 语言的基本符号
- 尖括号括起来部分称为语法成分
G = (VT , VN , P , S )
VT
:终结符集合terminal symbol
)是文法所定义的语言的基本符号,有时也称为token
VT = { apple, boy, eat, little }
VN:非终结符集合
nonterminal
是用来表示语法成分的符号, 有时也称为语法变量
VN = { <句子>, <名词短语>, <动词短语>, <名词>, … }
production
描述了将终结符和非终结符组合成串的方法 产生式的一般形式:
α→β
α
定义为β
α∈(VT∪VN ) +
,且α
中至少包含VN
中的一个元素:称为产生式的头 (head )
或左部(left side)
β∈(VT∪VN ) *
:称为产生式的体body
或右部right side
G = (VT , VN , P , S )
P
:产生式集合
产生式production
描述了将终结符和非终结符组合成串的方法产生式的一般形式:
α→β
S
:开始符号对一组有相同左部的α
产生式
α→β1 , α→β2 , … , α→βn
α→β1 | β2 | … | βn
读作:α
定义为β1
,或者β2
,…,或者βn
。
β1
,β2
,…,βn
称为α
的候选式Candidate
a、b、c
+
、 *
等0、1、. . . 、9
A、B、 C
S
。通常表示开始符号X
、Y
、Z
) 表示文法符号(即终结符或非终结符)u
、v
、. . . 、z
) 表示终结符号串(包括空串)α
、β
、γ
,表示文法符号串(包括空串)G=(VT , VN , P , S )
,如果 α→β ∈ P
,那么 可以将符号串γαδ
中的α
替换为β
,也就是说,将γαδ
重写(rewrite
)为γβδ
,记作 γαδ
-> γβδ
。此时,称文法中的符号串 γαδ
直接推导(directly derive
)出 γβδ
α0 -> α1
,α1 -> α2
,α2->α3
,…,αn-1-> αn
,则可以记作α0->α1->α2->α3-> …-> αn-1->αn,称符号串 α0
经过n
步推导出αn
,可简记为α0 ->n αn
G
的开始符号S
推导出的所有句子构成的集合称为文法G
生成的语言,记为L(G )
。 即S → L | LT
T → L | D | TL | TD
L → a | b | c | … | z
D → 0 | 1 | 2 | 3 |…| 9
该文法生成的语言是:标识符
令L={A,B,…,Z,a,b,…,z},D={0,1, …,9}。则L(L∪D) *表示的语言是标识符
0
型文法 (Type-0 Grammar)1
型文法 (Type-1 Grammar)2
型文法 (Type-2 Grammar)3
型文法 (Type-3 Grammar)α → β
无限制文法Unrestricted Grammar
/ 短语结构文法 Phrase Structure Grammar, PSG
∀α → β∈P
, α
中至少包含1
个非终结符0型语言
L(G )
α → β
(Context-Sensitive Grammar , CSG )
∀α → β∈P,|α|≤|β|
α1Aα2 → α1βα2 ( β≠ε )
1
型语言)1
型文法) G生成的语言L(G)
CSG
中不包含ε-产生式
α → β
Context-Free Grammar, CFG
)∀α → β∈P,α ∈ VN
A→β
例:
S → L | LT
T → L | D | TL | TD
L → a | b | c | d |…| z
D → 0 | 1 | 2 | 3 |…| 9
α → β
正则文法 (Regular Grammar, RG
)
A→wB
或 A→w
A→Bw
或 A→w
正则语言(3型语言)
由正则文法 (3型文法) G生成的语言L(G )
正则文法能描述程序设计语言的多数单词
0
型文法:α
中至少包含1
个非终结符1
型文法CSG
:|α|≤|β|
2
型文法CFG
:α ∈ VN
3
型文法(RG
):A→wB
或 A→w
(A→Bw 或A→w)G:
1. E → E + E
2. E → E * E
3. E → - E
4. E → ( E )
5. E → id
A→β
的应用,该结点的标号是此产生式左部A 。该结点的子结点的标号从左到右构成了产生式的右部βyield
)或边缘(frontier
)给定一个推导 S -> α1-> α2 ->… -> αn ,对于推导过程中得到的每一个句型αi
,都可以构造出一个边缘为αi
的分析树
推导过程:E -> -E
-> - ( E )
-> - ( E+E )
-> - ( id+E )
-> - ( id+id )
给定一个句型,其分析树中的每一棵子树的边缘称为该句型的一个短语phrase
如果子树只有父子两代结点,那么这棵子树的边缘称为该句型的一个直接短语immediate phrase