![](https://csdnimg.cn/release/download_crawler_static/86294999/bg5.jpg)
例 2.12 文法 G = (V
N
, V
T
, P, S)
V
N
= {A, B}
V
T
= {c, d}
P = {A → Bc, B → d}
S = A
通常情况下,在对文法进行描述时可以省略 V
N
和 V
T
,文法的开始符号也可以不需要“显
式地”指定,仅需将开始符号写在 G 后的中括号中即可。上述文法也可以简单描述为:
G[A]: A → Bc,B → d
2.2.2 通过文法产生语言的方式
定义语言的目的是为了产生语言,下面讨论如何由文法产生语言。
定义 2.11(直接推导和直接归约)文法 G = (V
N
, V
T
, P, S)有一条产生式 α → β, α∈(V
N
∪V
T
)
+
,
β∈(V
N
∪V
T
)
*
,假设存在符号串 x, y∈(V
N
∪V
T
)
*
,使得有符号串 v 和 w 满足 v = xαy 和 w =
xβy,则称符号串 v
直接推导出符号串 w,符号串 w 直接归约到符号串 v,并把符号串 w 叫
做符号串 v 的直接派生式,记为:
v ⇒ w
显然,如果 x = y = ε,对于文法 G 的任何规则 α → β,一定有 α ⇒ β,一次直接推导其实
就是用产生式右部去替换左部的过程。
例 2.13 文法 G[S]: S → 0S | 01
S ⇒ 01
S ⇒ 0S ⇒ 001
S ⇒ 0S ⇒ 00S ⇒ 0001
例 2.14 G[<标识符>]:
<标识符>∷=<字母>|<下划线>|<标识符><字母>|<标识符><下划线>|<标识符><数字>
<字母>∷=A|B|C|…|Z|a|b|c|…|z
<下划线>∷=_
<数字>∷=0|1|2…|9
<标识符>⇒<字母>
<标识符>⇒<字母>⇒A
<标识符>⇒<标识符><数字>⇒<字母><数字>⇒A<数字>⇒A4
定义 2.12(推导和归约)假设 u
0
∈(V
N
∪V
T
)
+
,u
1
, u
2
, …, u
n
都是(V
N
∪V
T
)
*
上定义的符号串,
如果存在直接推导序列 v = u
0
⇒ u
1
⇒ u
2
⇒…⇒ u
n
= w (n≥1),则称符号串 v 推导出符号串 w,
符号串 w 归约到符号串 v,记为:
v ⇒ +w
v = u
0
⇒ u
1
⇒ u
2
⇒…⇒ u
n
= w (n≥1)也被称为长度为 n 的推导。
例 2.15 S ⇒ 0S ⇒ 00S ⇒ 0001 称为长度为 3 的推导,记为 S ⇒ +0001。
<标识符>⇒<标识符><数字>⇒<标识符><数字>⇒<字母><数字>⇒A<数字>⇒A4 称为长
度为 5 的推导,记为<标识符>⇒+A4。
定义 2.13(广义推导和广义归约)假设 v ⇒ +w,或者 v = w(表示 0 步推导),则记为