2.3.5 递归规则与文法的递归性

2.3.5 递归规则与文法的递归性

1. 递归规则

所谓递归规则,是指在规则的左部和右部具有相同非终结符的规则。
如果文法中有规则 A → A … 称为规则左递归。
如果文法中有规则 A → … A 称为规则右递归。
如果文法中有规则 A → … A … 称为规则递归

2. 文法的递归性
文法的递归性是指对文法中任一非终结符,若能建立一个推导过程,在推导所得的符号串****中又出现了该非终结符本身,则文法是递归性的,否则是无递归性的
若文法中有推导 A ⇒+ A … 称文法左递归。
若文法中有推导 A ⇒+… A 称文法右递归。
若文法中有推导 A ⇒+… A … 称文法递归

例如,文法中有如下规则:
U → Vx
V →Uy| z
这三条规则都不是递归规则,但有 U ⇒+ Uyx ,则该文法是左递归的
在文法中使用递归规则,使得我们能用有限的规则去定义无穷集合的语言。

【例 2.11 】
考虑文法 G [ A ]:

A → aB | bB
B → a | b

由于该文法无递归性,由它所描述的语言是有穷的。该文法描述的语言为 L ( G [ A ]) ={aa , ab , ba , bb }

【例 2.12 】
考虑文法 G [ N 1 ]:

N 1 → N
N → ND | D
D →0|1|2

该文法有直接左递归规则 N → ND ,则称该文法为左递归文法或称文法左递归,其定义的语言为{0 , 1 , 2 }+ 。
由于文法中使用了递归规则,使得我们可用有限的规则去刻画无穷集合的语言。若不用递归规则来定义文法,要表示无穷集合的语言需要用无穷多条规则。例如,例 2.12 中若不用递归规则 N → ND ,则需要用 N → D | DD | DDD | … 即无穷多条规则来定义由数字 0 ,1 , 2 组成的所有无符号整数。

也就是说,当一个语言是无穷集合时,则定义该语言的文法一定是递归的
需要指出的是,程序设计语言都是无穷集合,因此描述它们的文法必定是递归的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值