2.3.3 语言的形式定义

2.3.3 语言的形式定义

1. 直接推导

令 G 是一文法,我们从 xAy 直接推出xαy ,即 xAy⇒xαy ,仅A → α 是 G 的一个规则且x , y ∈ ( V N ∪ V T )* 。也就是说,从符号串 xAy 直接推导出xαy仅使用一次规则。
例如,设有文法 G [ S ](符号 G [ S ]表示 S 为文法 G 的开始符号):
G [ S ] = ({ S },{ 0 , 1 }, P , S )
其中,P 为S →01|0 S 1
有如下直接推导:
S ⇒01 使用规则 S →01 , 此时 x = ε , y = ε
S ⇒0 S 1使用规则 S →0 S 1 , 此时 x = ε ,y = ε
0 S 1⇒0011 使用规则 S →01 , 此时 x =0 , y =1
00 S 11⇒000 S 111 使用规则 S →0 S 1 , 此时 x =00 , y =11
000 S 111⇒00001111 使用规则 S →01 , 此时 x =000 ,y =111

注意推导和规则的区别:一是形式上的区别,推导用“ ⇒ ”表示,规则用“ → ”表示;二是对文法 G 中任何规则 A → α ,有 A ⇒ α ,即推导的依据是规则

2. 推导

**如果存在一个直接推导序列:

α 0 ⇒ α 1 ⇒ α 2 ⇒ … ⇒ α n

则称这个序列是一个从 α0 至 α n 的长度为 n 的推导,记为 α 0 ⇒+ αn 。即α 0 ⇒+ αn表示从 α 0 出发,经一步或若干步或使用若干次规则可推导出 αn。
例如,设有文法 G [ E ]:

G [ E ] = ({ E , T , F },{ i , + , * ,(,)}, P , E )

其中,P 为

E → E + T | T  
 T → T * F | F
F → ( E ) | i

对 i + i * i 有如下直接推导序列

E ⇒ E + T ⇒ T + T ⇒ F + T ⇒ i + T
⇒ i + T * F ⇒ i + F * F ⇒ i + i * F ⇒ i + i * i

我们可记为 E ⇒+ i +i * i

3. 广义推导

α 0 ⇒* α

n 表示从 α 0 出发,经 0 步或若干步,可推导出 α n 。也就是说, α 0 ⇒* αn 意味着, α 0 = α n ,或者 α0 ⇒+ αn 。
对上例,有

E ⇒* E
E ⇒* i +i * i

显然,直接推导的长度为 1 ,推导的长度大于等于 1 ,而广义推导的长度大于等于 0

4. 句型和句子

设有文法 G [ S ]( S 是文法 G 的开始符号),如果 S ⇒ x* ,
x ∈ ( V N ∪ V T )* ,则称符号串 x 为文法 G [ S ]的句型S ⇒ x ,x ∈ V T* * ,则称 x 是文法 G [ S ]的句子
【例 2.5 】
设有文法 G [ S ]:
S →01|0 S 1

S ⇒* 01
S ⇒* 0S1
S ⇒* 00S 11
S ⇒* 000111

显然,符号串 01 ,0 S 1 , 00 S 11 和 000111 都是文法 G [ S ]的句型,而 01 和 000111 又是文法G [ S ]的句子。

【例 2.6 】设有文法 G [ E ]:E → E + E | E * E | ( E ) | i
试证明符号串(i * i + i )是文法 G [ E ]的一个句子。
分析 只要证明符号串(i * i + i )对文法 G 存在一个推导,就可证明符号串( i * i + i )是文法 G [ E ]的一个句子。因为有

E ⇒ ( E ) ⇒ ( E + E ) ⇒ ( E * E + E ) ⇒ ( i * E + E ) ⇒ ( i * i + E ) ⇒ ( i * i + i )

即有 E ⇒*(i * i + i ),所以符号串( i * i + i )是文法 G [ E ]的一个句子。

5. 语言

法 G [ S ]产生的所有句子的集合称为文法 G 所定义的语言,记为 L ( G [ S ]):L ( G [ S ]) = { x | S ⇒+ x且 x ∈ V T * }
注意,这里用 S ⇒+ x ,而不是用 S ⇒ * x 。因为 S 是文法的开始符号,S ∈ V N ,若用 S ⇒* x ,那么有可能有 S = x ,这与 x ∈ V T * 相矛盾。此时的 x 不可能是句子。此处,如果用 S ⇒

  • x,由于后面的条件是且的关系,也会自然在集合中去除掉开始符号,所以得到的最终集合与这里定义的 L 相同。
    由语言定义可知:
    (1 )当文法给定,语言也就确定
    (2 ) L ( G )是 V T * 的子集,即属于 V T * 的符号串 x 不一定属于 L ( G )
    【例 2.7 】
    设有文法 G [ S ]:
S →01|0 S 1

求该文法所描述的语言。
分析 问题归结为由识别符号 S 出发,将推出一些什么样的句子,也就是说, L ( G [ S ])是由一些什么样的符号串所组成的集合,找出其中的规律,用式子或自然语言描述出来。
此处应用第二个规则 n -1 次,然后再应用第一个规则 1 次,有

S ⇒0 S 1⇒00 S 11⇒000 S 111 … ⇒0(n -1)S 1(n -1) ⇒0n1n

即 S ⇒+ 0n1n ,可见,此文法定义的语言为

L ( G [ S ]) = { 0n1n |n ≥1 }

【例 2.8 】
设有文法 G [ S ]:

S →0 S |1 S | ε

求该文法所定义的语言。
由该文法所确定的语言为

L ( G [ S ]) = { ε , 0 , 1 , 00 , 01 , 10 , 11 ,…} = { x | x ∈ { 0 , 1 }* }

【例 2.9 】
设有文法

G [ A ]:A →yB, B → xB | x

求该文法所定义的语言。
分析 从文法开始符号 A 出发可推导出以 y 开头后面跟一个或多个 x 结尾的符号串,所以该文法定义的语言为 L ( G [ A ]) = {yxn |n ≥1 }
由此可见,从已知文法确定语言的中心思想是:从文法的开始符号出发,反复连续地使用规则,对非终结符施行替换和展开,找出句子的规律,用式子或自然语言描述出来。
形式语言理论可以证明如下两点:
(1 )给定一个文法,就能从结构上唯一地确定其语言,即 G → L ( G )
(2 )给定一种语言,能确定其文法,但这种文法不是唯一的,即 L→ G 1 或 G 2 或 … 或 G n
对此我们不予证明,但已通过前面的举例说明了这两点。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值