从一个具体英文例句的分析出发,引进有关上下文无关文法的
基本概念。比如,我们
写了这样一个句子:
He gave me a book.
这是一个语法上正确的句子,
因为它满足英语中的基本语法规则。
有下面语法规则:
<
句子>→<主语><谓语><间接宾语><直接宾语>
<
主语>→
<代
词
>
<
谓语>→
<动
词
>
<间
接宾语>→<代词>
<直
接宾语>→<冠词><名词>
<代
词>→
He
<代
词>→
me
<冠
词>→
a
<动
词
>→gave
<名
词>→
book
<
句子>
==> <
主语><谓语><间接宾语><直接
宾
语>
==> <代
词><谓语><间接宾语><直接宾语>
==> He<
谓语><间接宾语><直接宾语>
==> He<动
词><间接宾语><直接宾语>
==> He gave<间
接宾语><直接宾语>
==>He gave<代
词><直接宾语>
==> He gave me<直
接宾语>
==> He gave me<冠
词><名词>
==> H gave me a<名
词>
==> He gave me a book
语法分析树 :用一种
图示化的方法来表示这种 推导
句子
主语 谓语 间
接宾语
直
接宾语
代
词
动
词
冠
词
名
词
He gave me a book
代
词
一个上下文无关文法 G是一个四元式
(V
T
,V
N
,
S,
ρ),
其中
V
T是一个
非空有限集,它的每个元素称为 终结符号;
V
N是一个
非空有限集,它的每个元素称为 非终结符
号,V
T∩V
N=φ
S是一个
非终结符号,称为开 始符号;
ρ是一个产生式集合(有限),每个产生式的形式
是P→α,其中, P€
V
N
, α €(
V
T
∪V
N
)
*
。开
始
符号S至少必须
在某个产生式的 左部出现一次。
例: G = ({E}, {i, +, *, (, ) } , P , E)
P: E E + E | E * E | ( E ) | i
句子 ( i * i + i)的语法树:
(1) E (E) (E + E) (E * E + E) (i * E + E) (i *i + i)
(2) E (E) (E + E) (E * E + E) (i * E + E) (i *i + i)
例题
与习题解答
[例2.1]:
试
构造生成语言
L={a
n
b
n
c
i
|n1, i 0}的文法
分析:要
求
a和b的个数一样多,并
至少为一个,而
c的个数为 0个以上即可,所以可以用一个
非终结
符
去生成
a
n
b
n
串,用另一个
非终结符去生成
c
i
。
G(Z): ZAB
A aAb|ab
B cB|
[例2.2]:
已知
语言
L={a
n
bb
n
| n 1}, 写
出产生
L的文法。
[解]: G[S]: S aAb
A aAb|b
[例2.3]:
已知
文法
G=({A,B,C},{a,b,c},A,P)
其中产生式 P由以下组成:
A abc A aBbc
Bb bB Bc Cbcc
bC Cb aC aaB
aC aa
问:
此文法表式的语言是什么?
[解]:由于A为开
始符。
由于AaBbc abBc abCbcc
aCbbcc
aabbcc
语言为: {a
n
b
n
c
n
, n>0 }