8. 1. 字母表表: 符号(元素)的非空有穷集合。
字符(符号): 可以相互区别的记号(元
素)。
2. 符号串: 由字母表表中的符号组成的任何有
穷序列称为该字母表上的符号串。
( 1 )空符号串 ε : 没有 符号的符号串 。
例如: Σ ={ a , b }
ε , a , b , a a , a b , a a b b a … 都是是上的符号串
8
9. ( 2 )符号串 s 的头(前缀): 移走符号串
s 尾部的零个或多于零个符号得到的符号串。
如: b 是符号串
b a na na 的一个前缀。
符号串 s 的尾(后缀): 删去符号串 s 头
部的零个或多于零个符号得到的符号串。
如 : na na 是符号串 b a na na 的一
个后缀。
( 3 )符号串 s 的子串: 从 s 中删去一个
前缀和一个后缀得到的符号串。
如 : a na 是符号串
b a na na 的一个子串。 9
10. 对于每个符号串 s , s 和 ε 两者都是
符号串 s 的前缀,后缀和子串。
( 4 )符号串 s 的真前缀,真后缀,真子
串
3. 符号串的运算
( 1) 符号串的长度: 符号串中符号的个数 .
符号串 s 的长度记为 | s | 。 ε 的长度为 0 。
( 2) 连接: 符号串 x 、 y 的连接 , 是把 y 的符
号写在 x 的符号之后得到的符号串 xy 。
如 x=a b , y=c d 则
xy=a b c d 有 ε a = a ε = a
( 3) 方幂: 符号串自身连接 n 次得到的符号串
10
n 1
11. ( 4) 符号串集合: 若集合 A 中所有元素都是某
字母表表上的符号串,则称 A 为字母表表上的
符号串集合。
两个符号串集合 A 和 B 的乘积定义为:
A B ={xy| x∈A 且 y∈B }
若 集合 A ={a b , c d e } B = {0, 1} ,则
A B ={a b 1, a b 0, c d e 0, c d e 1}
4. 闭包: 使用 用 * 表示示上的一切符号串(包
括 ε )组成的集合。 Σ * 称为 Σ 的闭包。
上的除 ε 外的所有符号串组成的集合记 11
为为 + 。 Σ + 称为 Σ 的正闭包。
30. 直接推导““”
α→β 是文法 G 的产生式,若有 v,w 满足:
v=γαδ,w= γβδ, 其中 γ∈ V*,δ∈ V*
则称 v 直接推导到 w, 记作 v ⇒ w 。
也称 w 直接归约到 v 。
例: G : ① S→0S1 , ② S→01
0S1 ⇒00S11 使用产生式
①
00S11 ⇒000S111 使用产生式
①
000S111 ⇒00001111 使用产生式 30
②
31. 推导序列
1. 若存在 v ⇒w0 ⇒w1 ⇒... ⇒wn=w,
(n>0)
+
则记为 v => w ,称 v 推导出 w ,
或 w 归约到 v 。
+ *
2. 若有 v => w ,或 v=w ,则记为 v 31
=> w
32. 推导举例
例:文法 G : S→0S1 , S→01
0S1 ⇒00S11
00S11 ⇒000S111
000S111 ⇒00001111
S ⇒0S1 ⇒00S11
⇒000S111⇒00001111
+
S => 00001111
32
33. 句型、句子的定义
1. 句型 : 有文法 G ,若 S =>* x ,则称 x 是
文法 G 的
句型。
2. 句子 : 有文法 G ,若 S =>* x ,且
x∈ VT* ,则称
G 的句型 :
x 是文法 G 的句子。
S , 0S1 , 00S11 ,
例: G : S→0S1 | 01
000S111 , 00001111
S ⇒0S1
⇒00S11 G 的句子: 00001111,
⇒000S111 01 33
⇒00001111
44. 语法树的构造过程
以文法开始符号 S 为根结点,
随着推导的逐步展开,对句型中某个非
终结符 A 用相应产生式 A→α 的右部替
换时,为 A 的结点生成其子结点依次为
α 的子树,直至推导结束。
44
45. 构造语法树
G[E] : E→E+T|T E E
T→T*F|F E+T E + T
F→(E)|a
T
E⇒ E+T ⇒T+T ⇒ E
F+T E + T
⇒ a+T ⇒ a+T*F T
⇒ a+F*F ⇒ a+a*F
F
⇒a+a*a
45
46. E⇒E+T ⇒T+T ⇒F+T
⇒a+T ⇒ a+T*F E
⇒a+F*F ⇒ a+a*F
⇒a+a*a E + T
T T * F
E⇒E+T ⇒E+T*F F F a
⇒E+T*a ⇒E+F*a
⇒E+a*a⇒T+a*a a a
⇒F+a*a ⇒a+a*a
看不出句型中的符号
被替代的顺序
E⇒E+T ⇒T+T
⇒T+T*F ⇒F+T*F
⇒F+F*F ⇒a+F*F
⇒a+F*a ⇒a+a*a 46
48. 语法树 --- 句型推导的直观表示
给定文法 G=(VN,VT,P,S) ,对于
G 的任何句型都能构造与之关联的语法
树 ( 推导树 ) 。
定理:
G 为上下文无关文法,
对于 α≠ε ,有 S =>* α ,当且仅当
文法 G 有以 α 为结果的一棵语法树 ( 推
导树 )
48
49. 语法树要满足的条件
1. 每个结点都有一个标记,此标记是 V 的一
个符号。
2. 根的标记是 S (开始符号)。
3. 若一结点 n 至少有一个它自己除外的子孙
,并且有标记 A ,则肯定 A∈ VN 。
4. 如果结点 n 有标记 A, 其直接子结点从左到
右的次序是 n1 , n2 , … , nk ,其标记分别
为 A1 , A2 , … , Ak ,那么 A→A1A2 , …
, Ak 一定是 P 中的一个产生式。
49
50. 语法树的用处
用于描述上下文无关文法句型推导的直观方法。
例 : G[S]: 句型 aabbaa 的语法树(推导
S→aAS | a 树) S
A→SbA a A S
A→SS S b A a
A→ba a b a
叶子结点:树中没有子孙的结点。
从左到右读出推导树的叶子结点连接成的文
法符号串,为 G[S] 的句型。 50
51. 推导过程中施用产生式的顺序
例 : G[S]:
S
S→aAS | a
a A S
A→SbA
S b A a
A→SS
a b a
A→ba
S⇒aAS⇒aAa⇒aSbAa⇒aSbbaa⇒aabbaa
S⇒aAS⇒aSbAS⇒aabAS⇒aabbaS⇒aabbaa
S⇒aAS⇒aSbAS⇒aSbAa⇒aabAa⇒aabbaa 51
53. 例: G[E]: E E
E→i E + E E * E
E → E+E
E * E i i E +
E → E*E
E
E → (E) i i
i
句型 i*i+i 的两个不同的最左推导:
i
推导 1 : E ⇒ E+E 推导 2 : E ⇒ E*E
⇒ E*E+E ⇒ i*E
⇒ i*E+E ⇒ i*E+E
⇒ i*i+E ⇒ i*i+E
⇒ i*i+i ⇒i*i+i 53