2.3   文 法 和 语 言 的 形 式 定义

2.3 文 法 和 语 言 的 形 式 定义

2.3.1 形式语言

序列的集合称为形式语言。具体地说,每个形式语言都是某个字母表上按某种规则构成的所有符号串的集合,反之,任何一个字母表上符号串的集合均可定义为一个形式语言
对每个具体语言,都有语法和语义两个方面,形式语言是指不考虑语言的具体意义,即不考虑语义。例如,C 语言是其基本符号字母表上的符号串的集合,而每个 C 语言程序是基本符号的符号串。
对形式语言的描述有两种方法,一种方法是当语言为有穷集合时,用枚举方法来表示语言。例如,设有字母表 A = {a , b , c },则
L 1 = { a , b , c }
L 2 = { a , aa , ab , ac }
L 3 = { c , cc }

均表示字母表 A 上的一个形式语言。由于这 3 个语言均是有限符号串的集合,因此,可枚举出其全部句子来表示该语言。但并不是所有语言都是有穷集,例如,设字母表 Σ = { 0 ,1 },则Σ+ = Σ 1∪ Σ2∪ Σ3∪ … = { 0 , 1 , 00 , 10 , 11 , 01 , 000 , 100 ,…},它是 0 和 1 构成的所有可能的符号串的集合,对这种无穷集合的语言,无法用枚举法来描述,我们需要设计文法来描述无穷集合的语言。假设用符号 A 代表该无穷集合 Σ + ,则 A 中自然包含符号串 0 ,1 , 00 , 10 ,……;或者说 A 由 0 ,1 , 00 , 10 等符号串组成。我们可以记为 A →0 , A →1 , A →00 , A →10 ,……。但如此下去,又将产生一个无穷集合,仍然不便于计算机的存储和处理。为了将无穷转换成有穷表达,可以借鉴递归函数、数学归纳法的类似思想。我们考虑,无穷集合中的任何一个字符串,其结尾一定是 0 或 1 ,而去掉这个结尾字符后,剩余的串仍由 0 和 1 构成,所以剩余串也必定在 A 中。这里注意,串的长度为 2 以上,则有递归表达 A → A 0 , A → A 1 ;也可以理解为,将 A 中的所有串,按结尾的不同,分为以 0 结尾或以 1 结尾的两类。反过来, A 中的任意串,其尾添加 0 或 1 ,仍在 A 中。下面用 A 表示 Σ + ,用式子 A →0 表示符号串 0∈ A 或 A 生成符号串 0 ,符号“ → ”读做“生成”或“由 …… 组成”,则集合 A 可表示成
A →0
A →1
A → A 0
A → A 1
显然,由 A 生成的符号串属于 Σ,这就是所谓用文法描述语言,它描述了无穷集合的语言。

.3.2 文法的形式定义

1. 规则

规则也称产生式,它是一个符号与一个符号串的有序对(A ,β ),通常写作A → β (或 A ∷ = β )其中,A 是规则左部,它是一个符号;β 是规则右部,它是一个符号串;“ → ”和“ ∷ = ”表示“定义为”或“生成”,意思是左部符号用右部的符号串定义或左部符号生成右部符号串
例如,前述例中一组规则
A →0
A →1
A → A 0
A → A 1
描述的语言序列只可能是由 0 和 1 组成的符号串,即 Σ + = { 0 ,1 , 00 , 01 , 10 , 000 , 100 ,…}。
从例子可以看出,规则的作用是告诉我们如何用规则中的符号串生成语言中的序列,也就是说,一组规则规定了一个语言的语法结构。
规则中出现的符号分为两类,一类是终结符号,另一类是非终结符号。非终结符号是出现在规则左部能派生出符号或符号串的那些符号,即每个非终结符号表示一定符号串的集合,用大写字母表示或用尖括号把非终结符号括起来。例如,上例中的 A 。终结符号是不属于非终结符号的那些符号,它是组成语言的基本符号,是一个语言的不可再分的基本符号,通常用小写字母表示。例如,上例中的 0 和 1 。

2. 文法

文法是规则的非空有穷集合,通常表示成四元组 G = (V N , V T , P , S )。其中,
V N 是规则中非终结符号的集合。
V T 是规则中终结符号的集合。 V N ∩ V T = Ø 。通常用 V 表示 V N ∪ V T ,称为文法 G 的字汇表。
P 是文法规则的集合。
S 是一个非终结符号,称为文法的开始符号或文法的识别符号,它至少要在一条规则中作为左部出现
。由它开始,识别出我们所定义的语言。
由文法定义可知,文法是对语言结构的定义和描述,文法四大要素中,关键是规则的集合。
为了书写方便,对于若干个左部相同的规则,如
A → α 1
A → α 2

A → α n
将它们缩写为 A → α1 | α 2 | … | α n ,其中每个 α n 有时也称为 A 的一个候选式。我们约定:第一
条规则的左部是识别符号;对文法 G 不用四元式显示表示,而只将规则写出。
下面举例说明给定语言 L 后,如何写出能正确描述此语言的文法 G.

【例 2.1 】设字母表 Σ = { a , b },试设计一个文法,描述语言
L = { a2 n ,b2 n |n ≥1 }
分析 设计一个文法来描述一个语言,关键是设计一组规则生成语言中的符号串。因此,为设计该语言文法,必须分析这个语言是由怎样一些符号串组成的,即首先分析语言中符号串的结构特征:
当 n =1 L = { aa , bb }
当 n =2 L = { aaaa , bbbb }
当 n =3 L = { aaaaaa , bbbbbb }

L = { aa , bb , aaaa , bbbb , aaaaaa , bbbbbb ,…}
即语言 L 是由偶数个 a ,偶数个 b 这样的符号串组成的集合。因此,定义语言 L 的文法
G = ( V N , V T , P , S )
其中,
V N = { A , B , D }, V T = { a , b }
P = { A → aa | aaB | bb | bbD
B → aa | aaB
D → bb | bbD }
S = A
那么,描述该语言的文法是否唯一呢? 我们不难对语言 L 设计出文法 G’
G’ = ({ A , B , D },{ a , b }, P , A )其中,P 为
A → B | D
B → aa | aBa
D → bb | bDb
显然,G 不同于 G’ 。由此可见,对于一个给定的语言,描述该语言的文法不是唯一的。G 和 G’ 是两个不同的文法,如果它们描述的语言相同,那么称 G 和 G’ 为等价文法。等价文法的存在,使我们能在不改变文法所确定的语言的前提下,为了某种目的而对文法进行改写。

【例 2.2 】试设计一个表示所有标识符的文法。
分析 题意是用文法定义标识符,必须确定 P 中规则。为了设计出一组规则,首先应搞
清楚集合中符号串的结构特征。标识符的定义是字母或以字母开头的字母或数字串,其结构
如图 2.1 所示。
在这里插入图片描述
图 2.1 标识符的结构
用 I 代表标识符, L 代表字母, D 代表数字,则定义标识符的文法为
G = ( V N , V T , P , S )
其中,
V N = { I , L , D }
V T = { a , b , c ,…, x , y , z , 0 , 1 , 2 ,…, 9 }
P = { I → L | IL | ID
L → a | b | c | … | x | y | z
D →0|1|2|3| … |9 }
S = I
若将定义标识符的文法设计成G’ = ( V N , V T , P , S )其中,V N , V T , S 同上,
P = { I → L | ID
L → a | b | c | … | x | y | z
D →0|1|2|3| … |9 }
该文法不能定义 ab ,abc ,… 仅由字母串组成的标识符,缩小了所定义语言的范围。

【例 2.4 】
设字母表 Σ = { a , b },试设计一个文法,描述语言 L = { abna | n ≥0 }。
分析 该语言中符号串的结构特征是
当 n =0 L = { aa } ( b0= ε )
当 n =1 L = { aba }
当 n =2L = { abba }

L = { aa , aba , abba ,…}
所以,定义语言的文法为G = ({ A , B },{ a , b },{ A → aBa , B → Bb | ε }, A )

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值