赞
踩
A ∈ N → α ∈ ( T ∪ N ) ∗ A \in N \rightarrow \alpha \in (T \cup N)* A∈N→α∈(T∪N)∗
G
=
(
{
S
}
,
{
(
,
)
}
,
P
,
S
)
S
→
S
S
S
→
(
S
)
S
→
(
)
上面的文法表示任意嵌套的所有匹配好的括号串
G
=
(
{
S
}
,
{
a
,
b
}
,
P
,
S
)
S
→
a
S
b
S
→
ϵ
可以有很多的情况
约定: 如果没有明确指定, 第一个产生式的头部就是开始符号,用来避免写如上例子中的一些描述
下述符号是终结符号:(通常的约定)
下述符号是非终结符号:
E → − E ∣ E + E ∣ E ∗ E ∣ ( E ) ∣ i d E \rightarrow -E|E + E | E ∗ E | (E) | id E→−E∣E+E∣E∗E∣(E)∣id
E ⇒ − E ⇒ − ( E ) ⇒ − ( E + E ) ⇒ − ( i d + E ) ⇒ − ( i d + i d ) E \Rightarrow -E \Rightarrow −(E) \Rightarrow −(E+E) \Rightarrow −(id+E) \Rightarrow −(id+id) E⇒−E⇒−(E)⇒−(E+E)⇒−(id+E)⇒−(id+id)
E
⇒
−
E
:
经
过
一
步
推
导
得
出
E
⇒
+
−
(
i
d
+
E
)
:
经
过
一
步
或
多
步
推
导
得
出
E
⇒
∗
−
(
i
d
+
E
)
:
经
过
零
步
或
多
步
推
导
得
出
E ⇒ − E ⇒ − ( E ) ⇒ − ( E + E ) ⇒ − ( E + i d ) ⇒ − ( i d + i d ) E \Rightarrow -E \Rightarrow −(E) \Rightarrow −(E+E) \Rightarrow −(E+id) \Rightarrow −(id+id) E⇒−E⇒−(E)⇒−(E+E)⇒−(E+id)⇒−(id+id)
如果 S ⇒ ∗ α S \xRightarrow{*} \alpha S∗ α,且 α ∈ ( T ∪ N ) ∗ \alpha \in ( T \cup N)^* α∈(T∪N)∗,则称 α \alpha α是文法G的一个句型(包含非终结符)
E
→
−
E
∣
E
+
E
∣
E
∗
E
∣
(
E
)
∣
i
d
E
⇒
−
E
⇒
−
(
E
)
⇒
−
(
E
+
E
)
⇒
−
(
i
d
+
E
)
⇒
−
(
i
d
+
i
d
)
文法F的语言L(G)是它能推导出的所有句子构成的集合。
w ∈ L ( G ) ⇔ S ⇒ ∗ w w \in L(G) \Leftrightarrow S \xRightarrow{*} w w∈L(G)⇔S∗ w
这是程序设计语言设计者需要考虑的问题
例子一
S → S S S → ( S ) S → ( ) S → ϵ L ( G ) = { 良 匹 配 括 号 串 }S→SSS→(S)S→()S→ϵL(G)={良匹配括号串}S→SSS→(S)S→()S→ϵL(G)={良匹配括号串}
例子二
S → a S b S → ϵ L ( G ) = a n b n ∣ n ≥ 0S→aSbS→ϵL(G)=anbn∣n≥0S→aSbS→ϵL(G)=anbn|n≥0
S
→
a
S
a
S
→
b
S
b
S
→
a
S
→
b
S
→
ϵ
S
→
a
S
a
∣
b
S
b
∣
a
∣
b
∣
ϵ
目标生成:
b
n
a
m
b
2
n
∣
n
≥
0
,
m
≥
0
{b^na^mb^{2n}|n \geq 0, m \geq 0}
bnamb2n∣n≥0,m≥0
S
→
b
S
b
b
∣
A
A
→
a
A
∣
ϵ
目标生成: { x ∈ { a , b } ∗ ∣ x 中 a , b 个 数 相 同 } \{x\in \{a, b\}^* | x 中a,b个数相同 \} {x∈{a,b}∗∣x中a,b个数相同}
V
→
a
V
b
V
∣
b
V
a
V
∣
ϵ
S
→
T
∣
U
T
→
V
a
T
∣
V
a
V
U
→
V
b
U
∣
V
b
V
V
→
a
V
b
V
∣
b
V
a
V
∣
ϵ
上图中的L是顺序语句
L-System:这不是上下文无关文法, 但精神高度一致
v
a
r
i
a
b
l
e
s
:
A
B
c
o
n
s
t
a
n
t
s
:
+
−
s
t
a
r
t
:
A
r
u
l
e
s
:
(
A
→
B
−
A
−
B
)
,
(
B
→
A
+
B
+
A
)
a
n
g
l
e
s
:
6
0
′
v
a
r
i
a
b
l
e
s
:
X
Y
c
o
n
s
t
a
n
t
s
:
F
+
−
s
t
a
r
t
:
F
X
r
u
l
e
s
:
(
X
→
X
+
Y
F
+
)
,
(
Y
→
−
F
X
−
Y
)
a
n
g
l
e
s
:
9
0
′
E
→
E
+
E
∣
E
∗
E
∣
(
E
)
∣
i
d
E
⇒
l
m
−
E
⇒
l
m
−
(
E
)
⇒
l
m
−
(
E
+
E
)
⇒
l
m
−
(
i
d
+
E
)
⇒
l
m
−
(
i
d
+
i
d
)
E ⇒ r m − E ⇒ r m − ( E ) ⇒ r m − ( E + E ) ⇒ r m − ( E + i d ) ⇒ r m − ( i d + i d ) E \xRightarrow[rm]{} -E \xRightarrow[rm]{} -(E) \xRightarrow[rm]{} -(E+E) \xRightarrow[rm]{} -(E + id) \xRightarrow[rm]{} -(id+id) E rm−E rm−(E) rm−(E+E) rm−(E+id) rm−(id+id)
E ⇒ l m − E ⇒ l m − ( E ) ⇒ l m − ( E + E ) ⇒ l m − ( i d + E ) ⇒ l m − ( i d + i d ) E \xRightarrow[lm]{} -E \xRightarrow[lm]{} -(E) \xRightarrow[lm]{} -(E+E) \xRightarrow[lm]{} -(id + E) \xRightarrow[lm]{} -(id+id) E lm−E lm−(E) lm−(E+E) lm−(id+E) lm−(id+id)
E ⇒ r m − E ⇒ r m − ( E ) ⇒ r m − ( E + E ) ⇒ r m − ( i d + E ) ⇒ r m − ( i d + i d ) E \xRightarrow[rm]{} -E \xRightarrow[rm]{} -(E) \xRightarrow[rm]{} -(E+E) \xRightarrow[rm]{} -(id + E) \xRightarrow[rm]{} -(id+id) E rm−E rm−(E) rm−(E+E) rm−(id+E) rm−(id+id)
E
→
E
+
E
∣
i
d
E
→
E
+
T
T
→
i
d
E
→
T
+
E
T
→
i
d
乘号更靠近叶子节点
E
→
E
+
E
∣
E
∗
E
∣
(
E
)
∣
i
d
E
→
E
+
T
∣
T
T
→
T
∗
F
∣
F
F
→
(
E
)
∣
i
d
E
→
E
+
E
∣
E
−
E
∣
E
∗
E
∣
E
/
E
∣
(
E
)
∣
i
d
∣
n
u
m
b
e
r
E
→
E
+
T
∣
E
−
T
∣
T
T
→
T
∗
F
∣
T
/
F
∣
F
F
→
(
E
)
∣
i
d
∣
n
u
m
b
e
r
每个else与最近的尚未匹配的then匹配
L
(
G
′
)
⊆
L
(
G
)
简
单
容
易
证
明
文法是递归的,我们可以使用数学归纳法,对推导步骤进行归纳
L ( G ) ⊆ L ( G ′ ) x ∈ L ( G ) → x ∈ L ( G ′ ) s t m t → . . . → xL(G)⊆L(G′)x∈L(G)→x∈L(G′)stmt→...→xL(G)⊆L(G′)x∈L(G)→x∈L(G′)stmt→...→x
L
(
m
a
t
c
h
e
d
_
s
t
m
t
)
∩
L
(
o
p
e
n
_
s
t
m
t
)
=
∅
L
(
m
a
t
c
h
e
d
_
s
t
m
t
1
)
∩
L
(
m
a
t
c
h
e
d
_
s
t
m
t
2
)
=
∅
L
(
o
p
e
n
_
s
t
m
t
1
)
∩
L
(
o
p
e
n
_
s
t
m
t
2
)
=
∅
上面的下标代表子句
每个正则表达式r对应的语言L® 都可以使用上下文无关文法来描述
r = ( a ∣ b ) ∗ a b b r=(a|b)^∗abb r=(a∣b)∗abb
S
→
a
S
b
S
→
ϵ
L
=
a
n
b
n
∣
n
≥
0
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。