3、上下文无关语言练习
《编译原理》课后习题答案第三章第3章文法和语言第1
《编译原理》课后习题答案第三章第3 章文法和语言第1 题文法G=({A,B,S},{a,b,c},P,S)其中P 为:S→Ac|aBA→abB→bc写出L(G[S])的全部元素。
答案:L(G[S])={abc}第2 题文法G[N]为:N→D|NDD→0|1|2|3|4|5|6|7|8|9G[N]的语言是什么?答案:G[N]的语言是V+。
V={0,1,2,3,4,5,6,7,8,9}N=>ND=>NDD.... =>NDDDD...D=>D......D或者:允许0 开头的非负整数?第3题为只包含数字、加号和减号的表达式,例如9-2+5,3-1,7等构造一个文法。
答案:G[S]:S->S+D|S-D|DD->0|1|2|3|4|5|6|7|8|9第4 题已知文法G[Z]:Z→aZb|ab写出L(G[Z])的全部元素。
盛威网()专业的计算机学习网站 1《编译原理》课后习题答案第三章答案:Z=>aZb=>aaZbb=>aaa..Z...bbb=> aaa..ab...bbbL(G[Z])={anbn|n>=1}第5 题写一文法,使其语言是偶正整数的集合。
要求:(1) 允许0 打头;(2)不允许0 打头。
答案:(1)允许0 开头的偶正整数集合的文法E→NT|DT→NT|DN→D|1|3|5|7|9D→0|2|4|6|8(2)不允许0 开头的偶正整数集合的文法E→NT|DT→FT|GN→D|1|3|5|7|9D→2|4|6|8F→N|0G→D|0第6 题已知文法G:<表达式>::=<项>|<表达式>+<项><项>::=<因子>|<项>*<因子><因子>::=(<表达式>)|i试给出下述表达式的推导及语法树。
(5)i+(i+i)(6)i+i*i盛威网()专业的计算机学习网站 2 《编译原理》课后习题答案第三章答案:<表达式><表达式> + <项><因子><表达式><表达式> + <项><因子>i<项><因子>i<项><因子>i( )(5) <表达式>=><表达式>+<项>=><表达式>+<因子>=><表达式>+(<表达式>)=><表达式>+(<表达式>+<项>)=><表达式>+(<表达式>+<因子>)=><表达式>+(<表达式>+i)=><表达式>+(<项>+i)=><表达式>+(<因子>+i)=><表达式>+(i+i)=><项>+(i+i)=><因子>+(i+i)=>i+(i+i)<表达式><表达式> + <项><项> * <因子><因子> i<项><因子>ii(6) <表达式>=><表达式>+<项>=><表达式>+<项>*<因子>=><表达式>+<项>*i=><表达式>+<因子>*i=><表达式>+i*i=><项>+i*i=><因子>+i*i=>i+i*i盛威网()专业的计算机学习网站 3《编译原理》课后习题答案第三章第7 题证明下述文法G[〈表达式〉]是二义的。
形式语言自动机——上下文无关文法与下推自动机(四)
无论 Xi 为终结符,还是非终结符,都有 Xi w i .
因此 ,A X1X2…Xm , w 1 w 2… w m = w
所以: 对任何 wT*, if (q,w,S)├*(q, , ), then S w.
即, wL(M) wL(G).
College of Computer Science & Technology, BUPT
(q,w,A)├ (q,w, X1X2…Xm ) ├* (q, w2…wm , X2…Xm) ├* (q, w3…wm , X3…Xm)├* …├* (q, , ).
所以: if S w, then (q,w,S)├*(q, , ).
即, wL(G) wL(M).
College of Computer Science & Technology, BUPT
13
a, z0/Az0 a, A/AA
q0 b, A/ε
b, A/ε ε, A/ε
q1 ε, z0/ε
解:(1)∵ q0,q1∈Q, ∴ 构造 S→[q0,z0,q0];
(2)对③④⑤⑥式,可构造
S→[q0,z0,q1]
由δ(q0,b,A)={( q1,ε)} 得 [q0,A,q1]→b
由δ(q1,b,A)={( q1,ε)} 得[q1,A,q1]→b
7
例3: 从文法构造等价的下推自动机
例:构造一个PDA M,使Lφ(M)= L(G)。其中G是我们常用来生 成算术表达式的文法:
G=(N,T,P,E) N={ E,T,F }, T ={ +,*,(,),a }, S = { E } P: E→E+T∣T ; T→T*F∣F; F→( E )∣a
解:构造M=({q},T,Γ,δ,q,E,φ)
形式语言与自动机理论--第六章 上下文无关语言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符号“|”表示“或”的含义。
编译原理教程课后习题答案——第三章
第三章语法分析3.1 完成下列选择题:(1) 文法G:S→xSx|y所识别的语言是。
a. xyxb. (xyx)*c. xnyxn(n≥0)d. x*yx*(2) 如果文法G是无二义的,则它的任何句子α。
a. 最左推导和最右推导对应的语法树必定相同b. 最左推导和最右推导对应的语法树可能不同c. 最左推导和最右推导必定相同d. 可能存在两个不同的最左推导,但它们对应的语法树相同(3) 采用自上而下分析,必须。
a. 消除左递 a. 必有ac归b. 消除右递归c. 消除回溯d. 提取公共左因子(4) 设a、b、c是文法的终结符,且满足优先关系ab和bc,则。
b. 必有cac. 必有bad. a~c都不一定成立(5) 在规范归约中,用来刻画可归约串。
a. 直接短语b. 句柄c. 最左素短语d. 素短语(6) 若a为终结符,则A→α·aβ为项目。
a. 归约b. 移进c. 接受d. 待约(7) 若项目集Ik含有A→α· ,则在状态k时,仅当面临的输入符号a∈FOLLOW(A)时,才采取“A→α· ”动作的一定是。
a. LALR文法b. LR(0)文法c. LR(1)文法d. SLR(1)文法(8) 同心集合并有可能产生新的冲突。
a. 归约b. “移进”/“移进”c.“移进”/“归约”d. “归约”/“归约”【解答】(1) c (2) a (3) c (4) d (5) b (6) b (7) d (8) d3.2 令文法G[N]为G[N]: N→D|NDD→0|1|2|3|4|5|6|7|8|9(1) G[N]的语言L(G[N])是什么?(2) 给出句子0127、34和568的最左推导和最右推导。
【解答】(1) G[N]的语言L(G[N])是非负整数。
(2) 最左推导:NNDNDDNDDDDDDD0DDD01DD012D0127NNDDD3D34NNDNDDDDD5DD56D568最右推导:NNDN7ND7N27ND27N127D1270127NNDN4D434NNDN8ND8N68D685683.3 已知文法G[S]为S→aSb|Sb|b,试证明文法G[S]为二义文法。
上下文无关文法例题
上下文无关文法例题在学习自然语言处理(NLP)时,上下文无关文法(CFG)是一个重要的概念。
CFG是一种形式文法,用于描述自然语言中的句子结构。
在CFG中,句子的结构由一系列规则定义,这些规则表示如何将句子分解成更小的成分,直到最终得到最基本的句子成分为止。
举个例子,考虑一个简单的CFG规则:“句子 -> 主语谓语宾语”。
这个规则表示一个句子可以分解成一个主语、一个谓语和一个宾语。
例如,句子“我看见你”符合这个规则,其中“我”是主语,“看见”是谓语,“你”是宾语。
在自然语言处理中,CFG经常用于句法分析。
句法分析是分析句子结构的过程,通过识别句子中的成分和它们之间的关系来理解句子的含义。
CFG可以帮助我们理解句子的结构,从而更好地进行句法分析。
除了句法分析,CFG还在其他领域有着广泛的应用。
例如,在编译器设计中,CFG用于描述编程语言的语法规则。
编译器可以根据这些规则来解析、分析和转换源代码。
此外,在自然语言生成、机器翻译和问答系统等领域,CFG也被广泛应用。
尽管CFG在许多领域具有重要作用,但它也有一些局限性。
最显著的局限性之一是无法处理上下文相关的语言现象。
在自然语言中,许多语言现象依赖于上下文信息,例如代词的指代关系、动词的不确定性等。
CFG无法很好地处理这些现象,因此在一些复杂的自然语言任务中,需要使用更高级的文法模型。
为了解决CFG的局限性,研究人员提出了许多扩展和改进的文法模型,如上下文无关文法(PCFG)、依存文法(DG)和转换文法(TG)等。
这些文法模型在不同程度上克服了CFG的局限性,使得对自然语言的分析和处理更加精确和有效。
总的来说,上下文无关文法在自然语言处理中扮演着重要的角色,它是理解句子结构和进行句法分析的基础。
尽管存在一些局限性,但通过结合其他文法模型和技术,我们可以更好地理解和处理自然语言,为人工智能技术的发展和应用提供更有力的支持。
上下文无关文法与语言
第 5 章上下文无关文法及语言现在我们把注意力从正则语言转移到另外一大类语言上来,它们叫做“上下文无关语言”。
这个语言类有着自然、递归的表示方法,这种表示方法叫做“上下文无关文法”。
从1960年以来,上下文无关文法一直在编译技术中扮演着重要的角色。
它们能够把分析器(一类用来在编译过程中发掘源程序结构的程序)的实现从一种费时的、不通用方式的设计工作转变成为一种能够很快完成的工作。
近年来,上下文无关文法也被用来描述文档格式:XML(eXtensible Markup Language 可扩展标记语言)中使用的DTD(Document-Type Definition 文档类型定义)就是用来描述Web上的信息交换格式的。
在本章中,我们将首先介绍上下文无关文法的表示方法,然后将介绍怎样用文法来定义语言。
我们将会讨论到“语法分析树”──对一个文法处在它所表示的语言的字符串中结构的图形描述。
语法分析树是对一个编程语言的语法分析器的产物,也是通常用来获得程序结构的途径。
上下文无关语言还有另外一种等价的自动机表示叫做“下推自动机”。
我们将在第6章介绍下推自动机。
虽然它不如有穷自动机重要,但仍然要介绍它,原因是作为一种语言的定义机制来说,它跟上下文无关文法具有等价性,后面在第7章研究如何判定上下文无关语言以及研究上下文无关语言的封闭性时,这种等价性是非常有用的。
5.1 上下文无关文法这一章的内容将从非形式化地介绍上下文无关文法的表示法开始。
形式化的定义会在读者了解到这些文法的一些重要的能力之后给出。
届时我们将会说明怎样形式地定义一个文法,并将介绍一种叫作“推导”的过程:它能够决定在一个文法的语言中到底有哪些串。
5.1.1一个非形式化的例子下面来考虑一个“回文(palindrome)”的语言。
“回文”是指正向和反向读起来都一样的串,比如otto或者madamimadam(“Madam, I’m Adam,”引自Eve在Eden的花园里听到的第一句话)。
形式语言理论中的上下文无关文法
形式语言理论中的上下文无关文法引言形式语言理论是计算机科学领域中的一个重要分支,用于研究各种形式语言的结构和性质。
其中,上下文无关文法是形式语言理论中的重要概念,用于描述自然语言、编程语言等形式语言的语法结构。
本文将介绍上下文无关文法的概念、特性和应用,以及与其相关的知识点。
通过本文的阅读,读者将能够全面了解上下文无关文法在形式语言理论中的重要性和应用价值。
一、上下文无关文法的定义上下文无关文法是形式语言理论中描述形式语言结构的一种形式化工具。
它由四个部分组成,包括一个非终结符集合、一个终结符集合、一个产生式规则集合和一个开始符号。
1.1 非终结符集合非终结符是上下文无关文法中的符号,代表语言中的各种语法成分。
一个上下文无关文法通常包含多个非终结符,用于描述语法结构的不同部分。
非终结符通常用大写字母表示,例如S、A、B等。
1.2 终结符集合终结符是上下文无关文法中的符号,代表语言中的实际词汇。
终结符是不可再分解的基本单位,可以是字母、数字、标点符号等。
终结符通常用小写字母或符号表示,例如a、b、c等。
1.3 产生式规则集合产生式规则是上下文无关文法中的规则,用于描述语法结构中的转换和推导关系。
每个产生式规则由一个非终结符和一个符号串组成,表示将一个非终结符替换为一个符号串的过程。
例如,A → α表示将非终结符A替换为符号串α。
1.4 开始符号开始符号是上下文无关文法中的非终结符,用于描述整个语法结构的起始点。
通过推导和替换产生式规则,可以从开始符号构建出整个语言的句子。
二、上下文无关文法的特性上下文无关文法具有以下几个重要特性,决定了它在形式语言理论中的重要地位。
2.1 生成能力上下文无关文法能够描述形式语言中的语法结构。
通过推导和替换产生式规则,可以使用上下文无关文法生成出该语言中的句子。
因此,上下文无关文法具有强大的生成能力,可以表示多种复杂语言的结构。
2.2 上下文无关性上下文无关文法的产生式规则只依赖于被替换的非终结符本身,而不依赖于该非终结符在语法结构中的上下文环境。
编译原理习题及答案(整理后)
第一章1、将编译程序分成若干个“遍”是为了。
a.提高程序的执行效率b.使程序的结构更加清晰c.利用有限的机器内存并提高机器的执行效率d.利用有限的机器内存但降低了机器的执行效率2、构造编译程序应掌握。
a.源程序b.目标语言c.编译方法d.以上三项都是3、变量应当。
a.持有左值b.持有右值c.既持有左值又持有右值d.既不持有左值也不持有右值4、编译程序绝大多数时间花在上。
a.出错处理b.词法分析c.目标代码生成d.管理表格5、不可能是目标代码。
a.汇编指令代码b.可重定位指令代码c.绝对指令代码d.中间代码6、使用可以定义一个程序的意义。
a.语义规则b.语法规则c.产生规则d.词法规则7、词法分析器的输入是。
a.单词符号串b.源程序c.语法单位d.目标程序8、中间代码生成时所遵循的是- 。
a.语法规则b.词法规则c.语义规则d.等价变换规则9、编译程序是对。
a.汇编程序的翻译b.高级语言程序的解释执行c.机器语言的执行d.高级语言的翻译10、语法分析应遵循。
a.语义规则b.语法规则c.构词规则d.等价变换规则二、多项选择题1、编译程序各阶段的工作都涉及到。
a.语法分析b.表格管理c.出错处理d.语义分析e.词法分析2、编译程序工作时,通常有阶段。
a.词法分析b.语法分析c.中间代码生成d.语义检查e.目标代码生成三、填空题1、解释程序和编译程序的区别在于。
2、编译过程通常可分为5个阶段,分别是、语法分析、代码优化和目标代码生成。
3、编译程序工作过程中,第一段输入是,最后阶段的输出为程序。
4、编译程序是指将程序翻译成程序的程序。
单选解答1、将编译程序分成若干个“遍”是为了使编译程序的结构更加清晰,故选b。
2、构造编译程序应掌握源程序、目标语言及编译方法等三方面的知识,故选d。
3、对编译而言,变量既持有左值又持有右值,故选c。
4、编译程序打交道最多的就是各种表格,因此选d。
5、目标代码包括汇编指令代码、可重定位指令代码和绝对指令代码3种,因此不是目标代码的只能选d。
第六章 上下文无关文法
第六章上下文无关文法第6 章习题:题1,题3,题11,题12,题13,题14,题16第六章上下文无关文法上下文无关文法相关概念2上下文无关文法定义6-1 :对于所有产生式A→β,均有| β| ≥| A|,并且,A ∈V, β∈( V∪T )∗,文法G =(V,T,P,S)被称为上下文无关文法。
特点:对于所有A ∈V,如果A→β∈P,则无论A 出现在句型的什么位置,都可以用β替换A,无需考虑A 的上下文。
例如,设文法G = S →AB,A →aA| a,B →bB| b;对于任意n ≠m,有a n b m∈L(G),A 产生a 的个数不受B 产生b 的个数的限制。
例:构造上下文无关文法G,使L( G )= { ww T| w ∈{ 0, 1 }* }。
句子结构特征-字符串及其逆:1、句子从中间分为两个部分:W = a1a2…an, W T= an…a2a1WW T= a1a2…anan…a2a12、递归定义语言:a) ∀a ∈{ε}, a ∈L;b) 如果x∈L, 则∀a ∈{ 0, 1 },a x a ∈L;c) 所有满足a) b) 的字符串属于L。
按递归定义定义文法:由基础语句:S→ε由归纳语句:S→0S0 | 1S1故有,G = ( {S}, { 0, 1 }, P, S)P:S →0S0 | 1S1 | ε上下文无关文法L( G1 )= { w ∈{ 0, 1 }* | w = w T}。
上下文无关文法定义6-2:设有CFG G = (V, T, P, S ),G 的派生树是满足如下条件的有序树:1、树的每个节点都有一个标记X,X ∈V ∪T ∪ε。
2、树的根节点的标记为S。
3、如果X 是一个非叶节点的标记,则有X ∈V。
4、如果一个非叶节点v 的标记为A,v 的子节点从左到右依此为v1, v2, …, v n, 并且,它们分别标记为X1,X2, …, X n,则有A→X1, X2, …, X n ∈P。
编译原理(龙书)习题答案(chap2-3)
状态
a
b
-A{0}
B
A
B{0,1}
B
C
C{0,2}
B
D
+D{0,3}
E
D
+E{0,1,3} E
F
+F{0,2,3} E
D
DFA的状态图:
1) a(a | b) * a
以a开头和结尾且至少包含两个字符的a,b字符串的集合
2) (( | a)b*)*
由a和b组成的任意字符串的集合
3) (a | b)*a(a | b)(a | b)
倒数第三个字符为a的任意的a,b字符串的集合
4) a*ba*ba*ba*
包含3个b的a,b字符串的集合
5)(aa | bb)*((ab | ba)(aa | bb)*(ab | ba)(aa | bb)*)*
由相同数目的a和b组成的字符串的集合,或者空串
5) S a | S S | S S | S| ( S )
以a为变量,包括+,连接,*和括号四种运算的表 达式的集合
2.2.3 练习2.2.2中哪些文法具有二义性? 3) 4) 5)具有二义性。 以5)为例进行说明: 给定字符串 a+a+a ,对应着两棵分析树:
DFA的转换表:
状态
ห้องสมุดไป่ตู้
a
b
+A{0,1,2,3,5,6,7,9,10,11} B
C
+B{1,2,3,4,5,6,7,9,10,11} B
C
+C{1,2,3,5,6,7,8,9,10,11} B
C
DFA的状态图:
4) (a | b)*abb(a | b)*
编译原理练习(3-4章)含答案
提示:知识点:语法树的构造,文法的组成,短语等概念。
4、给出生成下述语言的三型文法:{anbmck|n, k>=1,m>0 } 提示:(1)三型文法中产生式的特点 (2)可参考P49 第16题
第四章 知识结构
⑤ 正规文法
② 正规式
③
有穷自动机(NFA
DFA)
④
{正规集}
①
⑥
词法分析
自动构造工具
1、已知正规式b(ab)*和(ba)*b (1)分别构造上述两个正规式相应的DFA, (2) 将(1)构造的DFA最小化, (3)利用DFA证明b(ab)*=(ba)*b (4)构造该语言的正规文法。
提示: 使用的知识点:正规式 NFA,NFADFA,DFA的最小 化,DFA 正规文法。 由转化得到的相同的最小化DFA,进而证明两个正规式 等价。
2、(1)由偶数个0和奇数个1构成的所有01串的DFA。 (2)写出由0和1的个数都是偶数的01串的正规式。 提示:见下页PPT
参考课件 例2:接受0和1的个数都是偶数的字符串的DFA
提示:(1)生成的偶正数应不包括,若干个0。 (2)将偶正数分为两类:一类为允许若干个0(0个数>=0)后跟不以0开头 的偶正数;一类为允许若干个0后跟2|4|6|8的偶正数(如0002,即不允许只含 有若干0 )。 2、为只包含数字、 , 的表达式,例如 9 2 5等构造一个文法,使得 和 运算满足右结合, 的运算优先级高于。 提示:结合性和运算优先性可以根据语法树的层次考虑。进而思考左递归产 生式与运算符的结合性的关系。
形式语言与自动机第八章 上下文无关语言的性质
试着设计一个 CFG 或者 PDA
S → aBc | e B → ??
read a / push x read b / pop x
???
看一看CFG应该满足的特征:
设某个上下文无关文法CFG如下 :(是CNF
范式)
S BC B CS | b C SB | a
i≥1。假设在i-1步时(*)式成立。 ([p0,q0],xa,Z0)┝(i-1步) ([p´,q´],a,β)┝([p,q],ε,γ), 其中w=xa,a∈∑∪{ε}。对于第i-1步,根据归纳法假设,得到 (q0,x,Z0)┝(i-1步)(q´,ε,β)且δA(p0 ,x)= p´。
上下文无关语言的泵引理
引理8.2 设L是一个字符串的集合,假设L有下述性质: “对一切 正整数k,存在z∈L,|z|≥k,将z划分为5个子串z = uvwxy, 这里|vx|≥1,|vwx|≤k,并有某个i≥0,使得uviwxiy L”,则L 不是CFL。
和正则语言一样,若想证明某个集合不是CFL,可以设想你和对手 “打赌”,你的对手认为L是CFL,你认为不是。双方采取以下步 骤进行争论:
① 你的对手选出一个正整数k。 ② 你选出某个z∈L,且|z|≥k。 ③ 你的对手选出子串u,v,w,x,y,使z = uvwxy,且满足
|vx|≥1,|vwx|≤k。 ④ 你选出某个i≥0。如果uviwxiy L,那么你就赢了,证明了L不是
CFL。
上下文无关语言的泵引理
引理8.3(Ogden引理) 对每个CFL L ,都存在正整 数k,对每个z∈L,并且在z中标出k个或多于k个特殊 位置,将z写成z=uvwxy,且满足: ① v或x中至少有一个符号处于特殊位置; ② vwx中至多有k个符号处于特殊位置。 则对任何i≥0,uviwxiy都属于L。
编译原理练习题
《编译原理》练习题一、判题(1分/小题,共15分)1、能将某一种语言程序等价转换成另一种语言程序的系统程序称为编译程序。
2、NFA可以含有多个初态,初态同时也可以是终态。
3、每个文法都能改写为LL(1)文法。
4、规范规约与最左推导互为逆过程。
5、分析表中的动作包括移近、规约、接受和报错四种。
6、自顶向下分析过程是一种试探过程,需要进行回溯。
7、如果一个文法是二义文法,则它存在某个句子对应两棵不同的语法树。
8、中间代码只有三元式和四元式两种表示形式。
9、单词的内部码由单词的种别和单词的值两部分构成。
10、状态转换图每次只能识别一个单词。
11、一个LL(1)文法一定是无二义的。
12、目标代码生成时,应考虑如何充分利用计算机的寄存器的问题。
13、正规文法产生的语言都可以用上下文无关文法来描述。
14、一转换图只包含有限个状态,其中有一个被认为是初态,最多只有一个终态。
15、正规集可以用NFA表示出来。
16.一个有穷自动机有且只有一个终态。
17.算符优先关系表不一定存在对应的优先函数。
18.每个文法都能改写为LL(1)文法。
19.算符优先归约不是规范归约。
20.在程序流图中,对任意两个结点m和n而言,如果从流图的首结点出发,到达n的一条通路要经过m,则称m是n的必经结点。
二、填空题(1分/空,共15分)1、语法分析是依据语言的 1 规则进行的,中间代码产生是依据语言的 2 规则进行的。
2、程序语言的单词符号一般可以分为 3 、 4 、 5 、 6 、 7 等等。
3、“上下文无关文法”是描述 8 的工具。
4、如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是 9 。
5、产生式是用于定义 10 的一种书写规则6、语法分析最常用的两类方法是 11 和 12 分析法。
7、单词二元式包括单词种别code和 13 。
8、常用的中间代码有 14 和 15 表示形式。
9.一个文法所描述的语言是;描述一个语言的文法是。
上下文无关文法例题
上下文无关文法例题上下文无关文法(Context-Free Grammar,简称CFG)是计算机科学中的一种形式语言描述工具,广泛应用于编译器设计、自然语言处理等领域。
本文将介绍几个上下文无关文法的例题,帮助读者更好地理解和掌握这一概念。
1. 文法的定义上下文无关文法由四元组(N, T, P, S)组成,其中:- N表示非终结符集合,即所定义的文法中的变量;- T表示终结符集合,即文法中的输入符号;- P表示产生式集合,用于描述变量之间的生成规则;- S表示起始符号,即文法的开始符号。
2. 例题1考虑以下文法G1:- N = {S, A}- T = {a, b}- P = {S → Aa, A → bA, A → ε}- S = S这个文法G1描述了由a和b组成的字符串,并且其中b出现在a 的前面。
考虑以下文法G2:- N = {S, A, B}- T = {a, b}- P = {S → AB, A → aA, A → ε, B → bB, B → ε}- S = S这个文法G2描述了由a和b组成的字符串,并且其中a出现在b 的前面。
4. 例题3考虑以下文法G3:- N = {S, X}- T = {a, b}- P = {S → aXb, X → aXb, X → ε}- S = S这个文法G3描述了由a和b组成的字符串,并且其中a和b的数量相等。
5. 例题4考虑以下文法G4:- N = {S, A}- P = {S → AA, A → aA, A → b}- S = S这个文法G4描述了由a和b组成的字符串,并且其中a和b可以以任意顺序出现。
通过以上例题的介绍,读者可以对上下文无关文法有更深入的理解。
对于每个例题,我们通过逐步推导和应用产生式,可以生成满足特定规则的字符串。
上下文无关文法在计算机科学中有着广泛的应用,并且它的理解和掌握对于深入学习编译器设计、自然语言处理等领域非常重要。
综上所述,上下文无关文法是一种重要的形式语言描述工具,在计算机科学领域有着广泛的应用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第3章、上下文无关语言习题解答 - 练习3.1 回忆一下例3.3中给出的CFG G 4。
为方便起见,用一个字母重新命名它的变元如下:E →E +T|TT →T ×E|FF →(E )|a 给出下述字符串的语法分析树和派生。
a. ab. a+ac. a+a+ad. ((a))答:a.E TF a ⇒⇒⇒ b.E E T TF F a a a ⇒+⇒+⇒+⇒+ c.E E T E TF T F a F a a a a a ⇒+⇒++⇒++⇒++⇒++ d. ()()()(())(())(())(())E T F E T F E T F a ⇒⇒⇒⇒⇒⇒⇒⇒⇒3.2 a. 利用语言A={a m b n c n | m,n ≥0}和B={a n b n c m | m,n ≥0}以及例3.20(语言B={a n b n c n | n ≥0}不是上下文无关的),证明上下文无关语言在交的运算下不封闭。
b. 利用(a)和DeMorgan 律(定理1.10),证明上下文无关语言在补运算下不封闭。
证明:a.先说明A,B 均为上下文无关文法,对A 构造CFG C 1S →aS|T|εT →bTc|ε//生成b n c n对B,构造CFG C 2S →Sc|R|εR →aRb |ε //生成a n b n 由此知 A,B 均为上下文无关语言。
由例3.20, A ∩B={a n b n c n |n ≥0}(假设m ≤n )不是上下文无关语言,所以上下文无关语言在交的运算下不封闭。
b. 用反证法。
假设CFL在补运算下封闭,则对于(a)中上下文无关语言A,B,A,B也为CFL。
因为CFL对并运算封闭,所以A B也为CFL,进而知道A B为CFL。
由DeMorgan定律A B A B=,得出A B是CFL。
这与(a)的结论矛盾,所以CFL对补运算不封闭。
3.3 设上下文无关文法G:R→XRX|SS→aTb|bTaT→XTX|X|εX→a|b回答下述问题:a.G的变元和终结符是什么?起始变元是哪个?答:变元是:R,X,S,T;起始变元是R。
终结符是:a,b,εb.给出L(G)中的三个字符串。
答:ab,ba,aab。
c.给出不在L(G)中的三个字符串。
答:a,b,ε。
d.是真是假:T aba⇒。
答:假e.是真是假:*T aba⇒。
答:真f.是真是假:T T⇒。
答:假g.是真是假:*T T⇒。
答:假h.是真是假:*XXX aba⇒。
答:真i.是真是假:*X aba⇒。
答:假j.是真是假:*T XX⇒。
答:真k.是真是假:*T XXX⇒。
答:真l.是真是假:*Xε⇒。
答:假m.用普通的语言描述L(G):3.4和3.5 给出产生下述语言的上下文无关文法和PDA ,其中字母表∑={0,1}。
a. {w | w 至少含有3个1}S →A1A1A1AA →0A|1A|ε读输入中的符号。
每读一个1,把一个1推入栈,每读1个0,不读栈也不写栈。
同时非确定性地转移,并把1个1弹出栈。
如果能转移三次,共弹出三个1,则接受这个输入,并继续读输入符号直至结束。
否则拒绝这个输入。
b. {w | w 以相同的符号开始和结束,w 的长大于1}S →0A0|1A1A →0A|1A|ε读输入中的第一个符号并将其推入栈。
继续读后面的符号,同时非确定性地猜想输入符号和栈符号是否相同,如果相同则转移到接受状态,如果此时输入结束,则接受这个输入,否则继续输入。
c. {w | w 的长度为奇数}S →ASA|0|1A →0|1读输入中的1个符号,转移到接受状态,再读一个符号,转移到非接受状态,如此循环。
可见接受长度为奇数的字符串。
d. {w | w 的长度为奇数且正中间的符号为0}S →ASA|00,ε→ε 1,ε→ε0,ε→ε0, ε→ε0, ε→ε 0,ε→εA →0|1读输入中的1个符号,推入1个0 。
每当读到0时就非确定性地猜想已经到达字符串的中点,然后变成读输入中的1个符号,就把栈中的0弹出。
当输入结束的同时栈被排空,则接受,否则拒绝。
e. {w | w 中1比0多}答:S →T1T | T1S// T1T 可以产生1比0多1个的所有字符串。
// T1S 可以产生1比0多2个以上的所有字符串。
T →0T1T | 1T0T | ε // T 可以产生0和1数目相等的所有字符串。
如果输入0时,栈顶元素是1,则弹出1;否则将0推入堆栈。
如果输入1时,栈顶元素是0,则弹出0;否则将1推入堆栈。
非确定地猜想栈顶元素是1,且栈中都是1,如果是,则接受;否则拒绝。
f. {w | w=w R ,即w 是一个回文,回文是顺读和倒读都一样的字符串}S →0S0|1S1|1|0|ε如果W 是回文,那么它的中点有三种可能:1) 字符个数是奇数,中点的字符是1。
2) 字符个数是奇数,中点的字符是0。
3) 字符个数是偶数,中点的字符是ε。
开始时,把读到的字符推入栈中,在每一步非确定性地猜想已经到达字符串的中点。
然后变成把读到的每一个字符弹出栈,检查在输入中和在栈顶读到的字符是否一样。
0,ε→0 0,0→ε0,ε→0 1,0→ε 0,1→ε0,ε→0 0,0→ε如果它们总是一样的,并且当输入结束时栈是空的,则接受;否则拒绝。
g. 空集S →S3.6 给出产生下述语言的上下文无关文法:a . 字母表{a,b}上a 的个数是b 的个数的两倍的所有字符串组成的集合。
答:S →bSaSaS|aSbSaS|aSaSbS|εb . 语言{a n b n |n ≥0}的补集。
见问题3.25中的CFG:答:分析问题:{a n b n |n ≥0}语言的CFG 为:S →aSb|ε。
违反条件的情况可能有两种:1. 一种是在连续的a 中间插入了字符b ,或者在连续的b 中间插入了字符a 。
2. a 和b 的数目不相等。
所以可以设计文法如下:S →aSb|bT|Ta// 只能生成错序的或者a 和b 个数不相等的字符串。
T →aT|bT|ε // 生成所有由a,b 组成的字符串。
c .{w#x | w, x ∈{0,1}*且w R 是x 的子串}。
答: 分析问题:根据题义,语言w#x 可以分解成为:#R w Tw T T U其中T 是所有由0,1组成的字符串。
所以可以设计文法如下:S →UTU →0U0|1U1|#T// 生成w#Tw R T →0T|1T|ε // 生成所有由0,1组成的字符串d .{x 1#x 2#⋯#x k |k ≥1, 每一个x i ∈{a,b}* , 且存在i 和j 使得x i =x j R }。
答: 分析问题:根据题义,语言x 1#x 2#⋯#x k 可以分解成为:111#...###...###...#R i j j j kUV Wx x x x x x -+ 所以可以设计文法如下:S →UVWU→A#U|εW→#AW|εA→aA|bA|ε// 生成所有由a,b组成的字符串x iV→aVa|bVb|#U3.7 略。
3.8 证明在3.1节开始部分给出的文法G2中,字符串the girl touches the boy with the flower 有两个不同的最左派生,叙述这句话的两个不同意思。
G2如下:<句子>→<名词短语><动词短语><名词短语>→<复合名词>|<复合名词><介词短语><动词短语>→<复合动词>|<复合动词><介词短语><介词短语>→<介词><复合名词><复合名词>→<冠词><名词><复合动词>→<动词>|<动词><名词短语><冠词>→a_|the_<名词>→boy_|girl_|flower_<动词>→touch_|1ikes_|Sees_<介词>→with_答:1.第一种最左派生<句子>⇒<名词短语><动词短语>⇒<复合名词><动词短语>⇒<冠词><名词><动词短语>⇒a_<名词><动词短语>⇒a_girl_<动词短语>⇒a_girl_<复合动词>⇒a_girl_<动词>< 名词短语>⇒a_girl_touches_< 名词短语>⇒ a_girl_touches_<复合名词><介词短语>⇒a_girl_touches_<冠词><名词><介词短语>⇒a_girl_touches_the_<名词><介词名词>⇒a_girl_touches_the_boy_<介词短语>⇒a_girl_touches_the_boy_<介词><复合名词>⇒a_girl_touches_the_boy_with_<复合名词>⇒a_girl_touches_the_boy_with_<冠词><名词>⇒a_girl_touches_the_boy_with_the_<名词>⇒a_girl_touches_the_boy_with_the_flower含义是:女孩碰这个带着花的男孩2.第二种最左派生<句子>⇒<名词短语><动词短语>⇒<复合名词><动词短语>⇒<冠词><名词><动词短语>⇒a_<名词><动词短语>⇒a_girl_<动词短语>⇒a_girl_<复合动词><介词短语>⇒a_girl_<动词>< 名词短语><介词短语>⇒a_girl_touches_< 名词短语><介词短语>⇒a_girl_touches_<冠词><名词><介词短语>⇒a_girl_touches_the_< 名词><介词短语>⇒a_girl_touches_the_boy_<介词短语>⇒a_girl_touches_the_boy_<介词><复合名词>⇒a_girl_touches_the_boy_with_<复合名词>⇒a_girl_touches_the_boy_with_<冠词><名词>⇒a_girl_touches_the_boy_with_the_<名词>⇒a_girl_touches_the_boy_with_the_flower含义是:女孩用花碰这个男孩3.9 给出产生语言A={a i b j c k| i,j,k≥0且或者i=j或者j=k}的上下文无关文法。