上下文无关文法
形式语言与自动机理论--第六章 上下文无关语言2(第十五周)

先用算法6-1,文法被化简成:
Sa,Aa,C b
再用算法6-2,可得到文法:
S a
14
2.1去无用符号
例 6-2-1 设有如下文法
SAB|a|BB,Aa,Cb|ABa
先用算法6-2,文法被化简成:
SAB|a|BB,Aa
再用算法6-1,可得到文法:
S a,Aa
11
2.1去无用符号
定理 6-5 算法6-2是正确的。
证明要点: (1) 施归纳于派生步数n,证明如果Sn αXβ,则
当 X∈V 时 , X 在 算 法 中 被 语 句 (3) 或 者 语 句 (8) 放入NEWV;当X∈T时,它在算法中被语句(4) 或者语句(9)放入NEWT。 (2) 对 循环 次 数 n施 归 纳, 证 明如 果 X被放 入 NEWT 或 者 NEWV 中 , 则 必 定 存 在 α , β∈(NEWV∪NEWT)*,使得Sn αXβ。 (3) 证明L(G′)=L(G) 。
26
2.3 去单一产生式
(3)删除G2中的无用符号。 由于在删除单一产生式后,文法中可能出现新的 无用符号,因此,我们还需要再次删除新出现的无 用符号。 此外,在去ε-产生式后可能会产生新的单一产生式, 也可能会引进新的无用符号。这是值得注意的。
27
2.3 去单一产生式
例:
SA|B Aa BbB|b
G4:S0|0A A0|1|0A|1A| _C
C0用符号、 ε产生式和 单一产生式。
3
2.1 去无用符号
定义6-8:无用符号(useless symbol)
对于任意X∈V ∪ T,如果存在w∈L(G), X出现在w的派生过程中,即存在α, β∈(V∪T)*,使得S*αXβ*w,则称X 是有用的,否则,称X是无用符号。
上下文无关文法

第三部分上下文无关语言和下推自动机前面介绍的有限自动机是计算的初级模型,它所接受的正规语言不太关心字符串自身的结构。
上下文无关文法(CFL)是一种简单的描述语法规则的递归方法,语言中的字符串由这些规则产生。
所有的正规语言都能用上下文无关文法描述,它也可以描述非正规语言。
上下文无关文法描述的语法规则更复杂多变,可以在相当大的程度上,描述高级程序设计语言的语法和其他一些形式语言。
类似正则语言对应的抽象机模型是有限自动机,CFL也有对应的抽象机模型。
CFL对应的计算模型是在有限自动机的基础上增加存储空间得到,并被设想成无限空间(对应有限自动机的有限空间),采用了一种简单的管理模式,栈(stack),这种新的计算模型(或抽象机)称为下推自动机(pushdown automata),下推是栈最典型的操作。
有必要在下推自动机中保留非确定性,确定型下推自动机不能接受所有的CFL,但给定一个CFG,容易构造一个相应的非确定型下推自动机,它在识别字符串过程中的移动模拟了文法的推导过程,这个过程称为分析(parse)。
分析不是一定需要下推自动机来完成。
CFL仍然不够通用,不能包括所有有意义的、或有用的形式语言。
采用类似第五章的技术,我们将给出一些不是CFL的简单例子,这些技术也用于解决与CFL相关的判定问题。
6 上下文无关文法6.1 上下文无关文法的定义为了描述我们在第二部分考察的各种语言,包括一些非正则语言,我们引入一种语言的递归定义方法,称为文法。
文法与我们熟悉的语言的语法描述相近,是描述语言和分析语言的有力工具。
问题:文法的形式化定义似乎可以模仿有限自动机,比如5元组或6元组之类。
例子6.1 正如我们在例子2.16中所见,字母表{a, b}上的回文语言pal可以用下面的递归方法描述:1.Λ, a, b∈pal2.对每个S∈pal,aSa和bSb也属于pal3.pal中不包含其他字符串如果将上面的符号S看成一个变量,代表了所有我们希望计算(比如某种递归算法)的pal 的元素,那么上面的规则1和规则2可以非正式地重新表述如下:1.S的值可以是Λ, a, b2.每个S可以写成aSa或bSb的形式如果我们用→表示“可以取值为”,则可以写出下面的式子:S→aSa→abSba→abΛba=abba上面的产生过程可以总结成下面的两组产生式(或称规则):S→a | b | ΛS→aSa | bSb符号“|”表示“或”的含义。
形式语言理论中的上下文无关文法

形式语言理论中的上下文无关文法引言形式语言理论是计算机科学领域中的一个重要分支,用于研究各种形式语言的结构和性质。
其中,上下文无关文法是形式语言理论中的重要概念,用于描述自然语言、编程语言等形式语言的语法结构。
本文将介绍上下文无关文法的概念、特性和应用,以及与其相关的知识点。
通过本文的阅读,读者将能够全面了解上下文无关文法在形式语言理论中的重要性和应用价值。
一、上下文无关文法的定义上下文无关文法是形式语言理论中描述形式语言结构的一种形式化工具。
它由四个部分组成,包括一个非终结符集合、一个终结符集合、一个产生式规则集合和一个开始符号。
1.1 非终结符集合非终结符是上下文无关文法中的符号,代表语言中的各种语法成分。
一个上下文无关文法通常包含多个非终结符,用于描述语法结构的不同部分。
非终结符通常用大写字母表示,例如S、A、B等。
1.2 终结符集合终结符是上下文无关文法中的符号,代表语言中的实际词汇。
终结符是不可再分解的基本单位,可以是字母、数字、标点符号等。
终结符通常用小写字母或符号表示,例如a、b、c等。
1.3 产生式规则集合产生式规则是上下文无关文法中的规则,用于描述语法结构中的转换和推导关系。
每个产生式规则由一个非终结符和一个符号串组成,表示将一个非终结符替换为一个符号串的过程。
例如,A → α表示将非终结符A替换为符号串α。
1.4 开始符号开始符号是上下文无关文法中的非终结符,用于描述整个语法结构的起始点。
通过推导和替换产生式规则,可以从开始符号构建出整个语言的句子。
二、上下文无关文法的特性上下文无关文法具有以下几个重要特性,决定了它在形式语言理论中的重要地位。
2.1 生成能力上下文无关文法能够描述形式语言中的语法结构。
通过推导和替换产生式规则,可以使用上下文无关文法生成出该语言中的句子。
因此,上下文无关文法具有强大的生成能力,可以表示多种复杂语言的结构。
2.2 上下文无关性上下文无关文法的产生式规则只依赖于被替换的非终结符本身,而不依赖于该非终结符在语法结构中的上下文环境。
上下文无关文法的概念

上下文无关文法的概念上下文无关文法的概念一、引言上下文无关文法(Context-Free Grammar,CFG)是形式语言理论中的一种重要的语法描述工具,它是由 Noam Chomsky 在 1956 年提出的。
CFG 是一种用于产生形式语言的形式化体系,它可以描述自然语言、编程语言等各种形式语言。
二、基本概念1. 文法(Grammar)文法是一个四元组 G = (V, T, P, S)。
其中 V 是非终结符集合,T 是终结符集合,P 是产生式规则集合,S 是起始符号。
非终结符表示语法规则中可以被替换的部分,终结符表示不能被替换的部分。
2. 产生式规则(Production Rule)产生式规则也称为产生式或规则,它是一个形如A → α 的表达式。
其中A 是一个非终结符号,α 是由非终结符号和终结符号组成的字符串。
3. 推导(Derivation)推导也称为生成或演算,它是指根据 CFG 的产生式规则从起始符号开始逐步推导出一个字符串的过程。
4. 句子(Sentence)句子也称为字符串或序列,它是由 CFG 的终结符号构成的序列。
三、上下文无关文法的特征CFG 的产生式规则中,只有一个非终结符号可以被替换成一个字符串,而且这个非终结符号出现在产生式规则左侧。
四、上下文无关文法的形式定义一个 CFG G = (V, T, P, S) 是上下文无关的,当且仅当它的产生式规则集合 P 中的每个规则都是形如A → α 的形式,其中A ∈ V,α ∈ (V ∪ T)*。
五、上下文无关文法的应用CFG 可以描述自然语言、编程语言等各种形式语言。
在编译器设计和自然语言处理中,CFG 是一种常用的工具。
六、总结上下文无关文法是一种用于产生形式语言的形式化体系。
它可以描述自然语言、编程语言等各种形式语言。
CFG 的特征是产生式规则中只有一个非终结符号可以被替换成一个字符串,并且这个非终结符号出现在产生式规则左侧。
上下文无关文法 例题

上下文无关文法例题
【实用版】
目录
1.什么是上下文无关文法
2.上下文无关文法的特点
3.例题解析
4.上下文无关文法在自然语言处理中的应用
正文
一、什么是上下文无关文法
上下文无关文法(Context-Free Grammar,简称 CFG)是形式语言理论中的一种文法,用来描述由符号组成的字符串。
这种文法能够生成任意长度的字符串,且生成的字符串与上下文无关,即与符号出现的顺序无关。
二、上下文无关文法的特点
1.确定性:上下文无关文法能够生成的字符串是确定的,即给定一个符号串,可以通过文法生成唯一的字符串。
2.无歧义性:上下文无关文法生成的字符串中,任意一个符号的出现都取决于其前面的符号,而不受后面的符号影响,因此不存在歧义。
3.最小性:上下文无关文法生成的字符串是最小的,即生成的字符串长度最短。
三、例题解析
假设有一个上下文无关文法如下:
```
S → AB
A → a
B → b
```
根据该文法,可以生成如下字符串:
```
S → AB → A → a → B → b
```
可以看出,字符串 "ab" 是由该文法生成的,且 "a" 和 "b" 的顺序与上下文无关。
四、上下文无关文法在自然语言处理中的应用
上下文无关文法在自然语言处理中有广泛应用,例如在编译器、词性标注、句法分析等方面。
通过研究上下文无关文法,可以更好地理解和生成自然语言,从而提高自然语言处理的效果。
综上所述,上下文无关文法是一种描述符号串的文法,具有确定性、无歧义性和最小性等特点。
上下文无关文法

mcy
35
3.2 上下文无关文法的形式定义
1.
2. 3. 4. 5. 6. 7. 8.
上下文无关文法(即2型文法)的形式定义 chomsky文法的分类 推导和规约的定义 句型和句子的定义 最左和最右推导 文法定义的语言 递归产生式和递归文法 文法和语言
mcy
36
5. 最左和最右推导
最左推导 对于文法G[S]: S * 是一个最左推导 是指:在推导过程中的任何一步直接推导α β , 都是对字符串α 中的最左非终结符进行替换,其中 α 、β 是句型。 简单整型算术表达式文法:
mcy
20
3型文法:通常,我们把右线性文法及左线性文法
统称为3型文法或正规文法。 若文法G中任一产生式α→β的形式都为A→aB 或 A→a,其中 A∈VN ,B∈VN ,a∈VT ,则称G 为右线性文法; 类似地,如果G中仅含有形如A→Ba 或 A→a的 产生式,则称G为左线性文法;
mcy
mcy
32
4. 句型和句子的定义
定义4 句型和句子:设G=(VN , VT , P , S)是一文 法,且 V=VN∪VT 若S =>*α,α∈V*,则称α为文法G的句型;
若S=>+α,α∈VT*,则称α为文法G的句子;
mcy
33
简单整型算术表达式文法:
exp → exp op exp|(exp)|number op → +|-|* 给出算术表达式(34-3)*42的一个推导,请 列出推导过程中出现的句型和句子。
28
例:G[S]:S→0S1,S→01 直接推导: S 0S1 0S1 00S11 00S11 000S111 000S111 00001111
上下文无关文法的定义

上下文无关文法的定义
上下文无关文法是一种表示语言结构的形式语法,它描述了一种语言的所有句子所具有的一般结构。
上下文无关文法是一种形式化语言,其表达能力相对较强,因此在自然语言处理、编译器构造等领域中得到了广泛应用。
上下文无关文法由四个部分组成:终结符、非终结符、产生式规则以及起始符号。
其中,终结符是文法中出现在句子中的单词或标点符号,而非终结符则是表示一组可能的词序列的符号。
产生式规则定义了由一个非终结符生成一个字符串的过程,而起始符号则是整个文法的根节点。
在上下文无关文法中,一个非终结符可以产生多个字符串,而每个字符串则是由另一个非终结符或者终结符组成。
例如,在一个简单的语法中,我们可以定义一个句子由一个名词短语和一个动词短语组成,而名词短语则consist of 一个名词和一个形容词短语。
这种语法可以表示一个简单的句子,例如“The cat drinks milk.”,它包含一个主语“the cat”和一个谓语“drinks milk”。
上下文无关文法之所以被称为“上下文无关”,是因为它描述的是一种结构,而不是一种语义。
这意味着,所有符合语法规则的句子都被认为是合法的,而与实际语境是否相符合则无关。
在自然语言处理中,上下文无关文法广泛应用于句法分析、依存分析和语义分析等方面。
通过建立适当的文法规则,可以对分析出的句子进行语法上的分析,从
而进一步实现对语义信息的抽取和理解。
总之,上下文无关文法是一种重要的基础语法规则,它对于自然语言处理等领域的技术应用具有重要的意义。
通过使用上下文无关文法,可以有效地描述和理解各种自然语言表达方式,从而实现对语言的深入分析和处理。
离散数学中上下文无关文法详解

离散数学中上下文无关文法详解离散数学是计算机科学的重要基础学科之一,而上下文无关文法(Context-Free Grammar,简称CFG)则是离散数学中一个重要的概念。
本文将对上下文无关文法进行详细解析。
1. 什么是上下文无关文法?上下文无关文法是一种形式语言的描述方法,它用一组产生式(Production Rules)来定义一个语言的结构。
上下文无关文法由四个元素组成,分别是终结符(Terminals)、非终结符(Nonterminals)、开始符号(Start Symbol)和产生式(Productions)。
终结符是语言中的基本符号,一般表示具体的词汇,如字母、数字等。
非终结符则表示语言中的语法结构,可以由一个或多个终结符和非终结符组成。
开始符号表示一个语法结构的起始点,一般为一个非终结符。
产生式则是规定如何将一个符号串替换为另一个符号串,它由一个非终结符和一个符号串组成。
2. 语法推导和派生树在上下文无关文法中,可以通过一系列的推导步骤将一个符号串转换为另一个符号串。
这些推导步骤又称为语法推导,其中每一步的推导都使用一个产生式来替换符号。
通过一系列的推导,可以得到最终的终结符串,也就是语言中的句子。
语法推导可以用派生树来表示,派生树是一种树状结构,其中每个非终结符都对应一个节点,从根节点到叶子节点的路径表示了一个语法推导的过程。
派生树可以帮助我们更直观地理解推导过程,方便对语言结构进行分析。
3. 上下文无关文法的应用上下文无关文法在计算机科学中有广泛的应用,特别是在编译原理、自然语言处理和语法分析等领域。
在编译原理中,上下文无关文法被用来描述编程语言的语法结构。
通过定义符合上下文无关文法的产生式和终结符,可以将源代码转换为抽象语法树,进而进行编译、优化和代码生成等过程。
在自然语言处理中,上下文无关文法可以用来描述自然语言的句子结构。
通过定义合适的产生式和终结符,可以进行句法分析和语义分析等任务。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第三部分上下文无关语言和下推自动机前面介绍的有限自动机是计算的初级模型,它所接受的正规语言不太关心字符串自身的结构。
上下文无关文法(CFL)是一种简单的描述语法规则的递归方法,语言中的字符串由这些规则产生。
所有的正规语言都能用上下文无关文法描述,它也可以描述非正规语言。
上下文无关文法描述的语法规则更复杂多变,可以在相当大的程度上,描述高级程序设计语言的语法和其他一些形式语言。
类似正则语言对应的抽象机模型是有限自动机,CFL也有对应的抽象机模型。
CFL对应的计算模型是在有限自动机的基础上增加存储空间得到,并被设想成无限空间(对应有限自动机的有限空间),采用了一种简单的管理模式,栈(stack),这种新的计算模型(或抽象机)称为下推自动机(pushdown automata),下推是栈最典型的操作。
有必要在下推自动机中保留非确定性,确定型下推自动机不能接受所有的CFL,但给定一个CFG,容易构造一个相应的非确定型下推自动机,它在识别字符串过程中的移动模拟了文法的推导过程,这个过程称为分析(parse)。
分析不是一定需要下推自动机来完成。
CFL仍然不够通用,不能包括所有有意义的、或有用的形式语言。
采用类似第五章的技术,我们将给出一些不是CFL的简单例子,这些技术也用于解决与CFL相关的判定问题。
6 上下文无关文法6.1 上下文无关文法的定义为了描述我们在第二部分考察的各种语言,包括一些非正则语言,我们引入一种语言的递归定义方法,称为文法。
文法与我们熟悉的语言的语法描述相近,是描述语言和分析语言的有力工具。
问题:文法的形式化定义似乎可以模仿有限自动机,比如5元组或6元组之类。
例子6.1 正如我们在例子2.16中所见,字母表{a, b}上的回文语言pal可以用下面的递归方法描述:1.Λ, a, b∈pal2.对每个S∈pal,aSa和bSb也属于pal3.pal中不包含其他字符串如果将上面的符号S看成一个变量,代表了所有我们希望计算(比如某种递归算法)的pal 的元素,那么上面的规则1和规则2可以非正式地重新表述如下:1.S的值可以是Λ, a, b2.每个S可以写成aSa或bSb的形式如果我们用→表示“可以取值为”,则可以写出下面的式子:S→aSa→abSba→abΛba=abba上面的产生过程可以总结成下面的两组产生式(或称规则):S→a | b | ΛS→aSa | bSb符号“|”表示“或”的含义。
上式的含义是aSa或bSb,而不是a或b,即连接运算的优先级高于“|”。
我们使用的这套术语中,小写字母a和b表示终结符,大写字母S表示非终结符,或称变量。
总共有5条规则,或产生式(production)。
符号S是非终结符,也是起始终结符,即我们生成字符串的起始符号是S,然后不断利用规则替换符号串中的非终结符,直到最终得到一个不含非终结符的符号串,就生成了规则所定义的语言的一个字符串。
例子2中的产生式具有除起始符S外的多个非终结符,我们设想S表示了语言中任意的字符串,其他非终结符表示了其他辅助性的字符串类型,他们可用来方便地生成S表示的字符串。
例子6.2 我们要构造一个生成所有在字母表{a, b}上的非回文字符串的文法,那样的字符串可以描述如下:从字符串的两端开始比较,也许能够发现一些相同的字符对,但最终能够发现一对不同的字符。
对于前一种情况,我们可以借用回文语言的产生式:S→aSa | bSb如果加入产生式S→a | b | Λ则这种左右匹配的形式将体现在整个字符串上,为了中断这种左右匹配的情况,即体现上面提到的第二种情况,我们引入新的非终结符,比如D,表示那些左右两个端点上的字符不同的字符串。
且所有符合D的字符串也符合S,因此有S→D。
非终结符的定义比较简单,它唯一的条件是左右两个端点的字符不相同,中间的字符串可以是任意的,我们用非终结符A表示任意的字符串,则有D→aAb | bAa。
A表示任意的字符串,因此A的产生式更简单了,不用添加新的非终结符来简化问题,它的产生式是,A→Λ | aA | bA。
我们把上面三个非终结符的产生式写在一起,就得到了描述所规定语言的产生式集:S→aSa | bSb | DD→aAb | bAaA→Λ | aA | bA因此一个完整的非回文字符串“abbaaba”的产生过程是,S→aSa→abSba→abDba→abbAaba→abbaAaba→abbaΛaba→abbaaba定义6.1 上下文无关文法(context-free grammar, CFG)是一个4元组G=(V, ∑, S, P),其中,V和∑是不相交的有限集,S∈V,P是一组有限的产生式规则,形如A→α,其中A∈V,且α∈(V⋃∑)*。
V的元素称为非终结符(或变量),∑的元素称为终结符,S是一个特殊的非终结符,称为起始符,P的元素称为语法规则,或产生式。
设G=(V, ∑, S, P)是一个CFG,我们将符号→保留给P的产生式专用,符号⇒G用于表示字符串的产生过程的每一步,如α⇒Gβ表示字符串β能够通过替换α中的某些变量(根据P定义的产生式来替换)得到,即如果有α=α1Aα2且A→γ∈P,则β=α1γα2。
这里能够看到,我们命名为上下文无关(context-free)的含义,即我们在利用产生式规则,用一组符号替换某个非终结符时,与非终结符的上下文无关(此处,A的替换与α1和α2无关),替换是无限制的。
在没有多个文法出现,很清楚用到文法G是什么的情况下,推导符号⇒G可以简写成⇒。
多步的推导可以写成⇒*G,即如果存在一组符号串,α=α0、α1、…、αk=β,每个后者都是前者的直接推导,则称为α可以多步推导出β,记为α⇒*Gβ,简写成α⇒*β。
定义6.2 G=(V, ∑, S, P)是一个CFG,则G产生的语言是所有可由G产生的字符串组成的集合,即L(G)={x∈∑* | S⇒*G x}。
一个语言L是上下文无关语言(context-free language, CFL),当且仅当存在一个CFG G,使得L=L(G)。
此处可以把文法设想成类似自动机的抽象模型,则一个语言L是CFL当且仅当存在一个CFG G接受它(或识别它),类似前面正则语言与有限自动机的关系,接受(或识别)的含义是两方面的,一方面凡是L中的字符串都能由G产生,另一方面,凡是不属于L的字符串都不能由G产生。
前面的例子,能够比较容易地说明这两方面的限制,下面的例子则不是很明显。
例子6.3 考虑语言L={x∈{0, 1}* | n0(x)=n1(x)},其中n i(x)表示数字i在x中的出现次数(即含有相同数目0和1的语言)。
写出生成L的CFG。
分析:既然CFG的本质是一个递归定义,那么类似例子6.1,我们可以先发现归纳基础,然后找到归纳推理。
显然Λ∈L,另外如果存在一个字符串x∈L,那么得到更长的属于L的字符串的两个方法是,0x1和1x0,即分别在两端添加相同数量的0和1。
(当然,还有很多生成方法,比如x01,x10,或在x中插入相同数量的0和1),这样得到三个产生式:S→Λ | 0S1 | 1S0显然,还遗漏了一些字符串,如0110。
我们注意到L中任意两个元素的连接仍然属于L,因此可以增加一个产生式,S→SS。
与前面的三个产生式合并,我们得到一个CFG G如下,S→Λ | 0S1 | 1S0 | SS显然G产生的字符串都满足0和1数目相等这个条件,即L(G)⊆L,现在只要证明L⊆L(G)。
令d(x)=n0(x)-n1(x)。
则字符串x∈L,当且仅当d(x)=0。
因此只需证明每个满足d(x)=0的x,都有x∈L(G)。
我们用数学归纳法来证明L⊆L(G)。
归纳对象是字符串的长度|x|。
1.归纳基础,|x|=0且d(x)=0,则x∈L(G),这是显然的,因为此时x=Λ,而Λ可以由产生式S→Λ得到。
2.归纳推理,设k>=0,每个满足|y|<=k,d(y)=0的字符串y都属于L(G)。
要证明每个长度等于k+1且d(x)=0的字符串x也属于L(G)。
分情况讨论如下:a)如果x以0开始,以1结尾,则可以写成x=0y1,且d(y)=0,根据归纳假设y∈L(G),即存在一组推导,S⇒*G y。
因此对于x,存在推导,S⇒0S1⇒*0y1⇒x。
b)如果x以1开始,以0结尾,类似a)的处理,能够得到从S到x的推导。
c)如果x以0开始,且以0结尾。
则x的长度至少为2,设x=0y0。
现在考察x的所有前缀z的d(z),其中d(0)=1,d(0y)=d(0y0)-d(0)=-1,而d(z)随着z的长度增1,至多增加1或减少1,而当前缀从0变化到0y时,d(z)从1变化到-1,因此存在某个长于0短于0y的前缀z,使得d(z)=0,则x=zw,显然d(w)=0,由于z、w的长度都<=k,因此z、w都属于L(G),分别存在从S出发到z和w的推导。
为了得到从S出发到x的推导,首先用产生式S→SS。
d)如果x以1开始,且以1结尾,类似c)的处理。
例子6.4 考查语言L={x∈{0, 1}* | n0(x)≠n1(x)},写出它的CFG。
分析:例子6.3看起来与本例关系很大,但实际上没有什么帮助,我们在第8章,将详细解释为什么一个语言的CFG并不能帮助发现它的补集语言的CFG。
L中的字符串可以分为两大类,一类含有的0的个数多于1,另一类含有1的个数多于0,前者组成集合L0,后者组成L1。
如果能够发现L0和L1的CFG,由于L= L0⋃L1,就能够很容易找到L的CFG。
类似以前的做法,我们尽力找到语言L0的递归特征。
显然0∈L0,且如果x∈L0,则0x和x0也属于L0,由此得到三个产生式:S→0 | S0 | 0S我们无法保证L0中的字符串连接1仍然属于L0,但是如果两个L0中的字符串连接后再连接一个1能够保证新字符串仍然属于L0,因此得到另外三个产生式:S→1SS | SS1 | S1S合并这两组产生式就得到了生成L0的CFG G0如下,S→0 | S0 | 0S | 1SS | SS1 | S1S类似前面,我们只要证明L0⊆L(G0)。
令d(x)=n0(x)-n1(x),要证明凡是d(x)>0的x都能由G0产生,对x的长度应用数学归纳法。
1.归纳基础,显然|x|=1且d(x)>0时,即x=0,x可由S→0推导,属于L(G0)。
2.归纳推理,设k>=0,对每个|x|<=k且d(x)>0的x都属于L(G0),要证明每个|x|<=k且d(x)>0的x也属于L(G0)。
分情况讨论,此处仅讨论x=0y0的情况(即以0开始和结尾的情况),a)x仅由0组成,易证。
b)x至少含有一个1。
则x=w1z,现在证明d(w)>0且d(z)>0。