第3章 上下文无关文法与下推自动机
第三章:上下文无关文法与下推自动机
![第三章:上下文无关文法与下推自动机](https://img.taocdn.com/s3/m/66d15180bceb19e8b8f6ba0b.png)
19
②构造P1: 如果B→α∈P且不是单产生式,则对于B∈NA中的所有 A,把A→α加入P1中, ③得G1=( N1,T1, P1 ,S) 结论:对于每个单产生式得CFG G,存在一个等效的无 单产生式的文法G1 。 例: G=({E,T,F},{+,*, (,),a},p,E) E→ E+T∣T P: T→ T*F∣F F→ (E)∣a 解:G是无ε产生式文法,但有单生成式E → T,T → F ①N0={E} ②因为E→ T ∈P, F→ T ∈P,则N’={E,T,F}=NE ③同理:NT={T,F},NF={F},
2
上下文无关文法和它所描述的上下文无关语言,在定 义程序设计语言、语法分析、简化程序设计语言的翻译 等方面有重要的意义. 内容:1、上下文无关文法 2、两个范式:Chomsky 范式,Greibach范式 3、确定的下推自动机、非确定下推自动机(PA)
(Pushdown Automaton)
4、对任何CFA都能找到一种具有特有形式的 等价的CFG (Context-Free Grammar) 与上下文无关文法相应的识别器是下推自动机. 确定的下推自动机对应于上下文无关语言的一个子集(大 部分程序设计语言) 例如:程序设计语言中的嵌套结构,用CFG描述而RG不行
10
例:N={S,A,B} T={0,1} P={S→ 0,A→ 1,B→ 0} 解: (1)N0=φ (2)N'={S,A,B } (3)N0≠N‘∴N0=N‘ P={S→ 0,A→ 1,B→ 0} (4)N'=N0∪{ }=N0 ∴有用非终结符集=N0={S,A,B}
上一页
下一页
退 出
11
定理2:CFG:G=(N,T,P,S)则必可找到等效的 G1=(N1,T1,P1,S) 对x∈N1∪T1 * 存在α ,β∈(N1∪T1)*,有S⇒ α x β (证:从文法起始S能推出含X的句型) 证明: 构造G1: S∈N1 (1)若A∈N1且A→ α ∈P,则含α中的非终结符是属 于N1,终结符∈T1。 (2)重复(1),直到再没有新的符号加入N1,T1为止 (3)P1={A→α |A→α ∈P,A∈N1, α ∈(N1∪T1)*} 由G1的构造可知:
(22)第三章 第五讲 上下文无关文法与下推自动机(简介)
![(22)第三章 第五讲 上下文无关文法与下推自动机(简介)](https://img.taocdn.com/s3/m/9f829ec876eeaeaad1f3309f.png)
END
RETURN
三、上下文无关语言的判定问题 1. 空问题 上下文无关语言的空问题是可以判定的。
2. 成员问题
上下文无关语言的成员问题也是可以判定的。 3. 等价问题 上下文无关语言的等价问题是不可以判定的。
四、上下文无关文法的二义性
1. 定义
若对于上下文无关文法G产生的语言L(G),如果有句子 w∈L(G),存在两个不同的推导树,或者说对w存在两个不 同的最左或最右推导,那么就称文法G是二义的。
2={ 2 k a |k≥1}
都不是
二、上下文无关语言的性质
1.上下文无关语言的封闭性 定理21:若L1和L2是上下文无关语言,则L1∪L2也是上下 文无关语言。
(证明略) 定理22:若L1和L2是上下文无关语言,则L1L2也是上下文 无关语言。 (证明略) 定理23:若L是上下文无关语言,则L的闭包L*也是上下文 无关语言。 (证明略)
特例:在定义中只要取w2=ε,则生成式的形式变为: A→w1C , A→w3 。这显然是右线性文法。因此,右线性 文法是线性文法的特例。
五、受限型上下文无关文法
2. 顺序文法
定义:对于上下文无关文法G , 如果非终结符可以排序为: A1,A2,A3,......,An ,当P中有生成式Ak→β时,若β内不含有l < k的Al,则称G是顺序文法。 实例:设文法G=({A2},{a,b},P,A2),其中生成式P如下: A2→aA2b , A2→ε 由定义可知,该文法G是顺序文法,由它产生的语 言为: L(G)={anbn | n≥0}。(参考书第181页的例2有错) 结论:线性文法总可以设法转换为顺序文法。利用顺序文 法进行文法分析是比较方便的。这样一来,前面所有的有 关右线性文法的分析都可以转换为对顺序文法的分析。
(21)第三章 第四讲 下推自动机
![(21)第三章 第四讲 下推自动机](https://img.taocdn.com/s3/m/eb5a1d2eeefdc8d376ee329f.png)
..........
显然,上述无限状态的模型是无法用有限状态自动机来表示的, 因此需要扩充机器的能力。 下推自动机拥有一个容量不受限制的下推“栈”,所以它可以 解决许多实际问题。例如:对于非正则语言L(M)={anbn|n≥1},由于 PDA能够利用栈容量的无界性保存大量的信息,可以动态跟踪保存 a的个数,从而PDA能够识别这个语言。
注意1:上述定义中,“只含一个元素”保证了δ函数的“确定性”,
同时①②避免了在同样的状态、同样的栈顶元素下,在读入一个符 号时发生状态转移和在不读入字符时发生状态转移之间作选择的可 能性。也即在任何一个格局状态下只有唯一的一个后继格局。
注意2:不满足条件①②的PDA 即为不确定的PDA。与有限自动机
b b b b b b
..........
显然,上述无限状态的模型是无法用有限状态自动机来表示的, 因此需要扩充机器的能力。
一、有关概念
1、下推自动机的特点 引例:前面曾用泵浦定理(定理6)证明:L(M)={anbn|n≥1}不是正则
集。这就表明无法用有限自动机来识别该语言。这是因为: 对于任意的正整数k,至少必须有一个状态用以记住“k个a”, 则用状态转换图表示这种情况,在对任意大的n来说,有如下无限 状态转换图: a a a a ..........
δ(q2,b,a)={(q2,ε)}, δ(q2,ε,Z0)={(q0,ε )} 。
一、有关概念
在q2状态下,一旦遇见栈底元素Z0, 2、不确定的下推自动机 且此时剩余输入串恰好为空串,则弹 nbn|n≥1}。 构造一个PDA M,能够接受语言 L(M)={a 实例: 出Z0使栈为空,同时进入终止状态q0 从而以终止状态接受输入字符串。 设 PDA M=(Q , T , Γ,δ, q0 , Z0 , F),其中: Q={q0,q1,q2} , T={a,b} , Γ={Z0,a} , F={q0} ,δ定义如下: δ(q0,a,Z0)={(q1,aZ0)}, δ(q1,a,a)={(q1,aa)}, δ(q1,b,a)={(q2,ε)},
形式语言和自动机上下文无关文法与下推自动机课堂PPT
![形式语言和自动机上下文无关文法与下推自动机课堂PPT](https://img.taocdn.com/s3/m/4f298e09814d2b160b4e767f5acfa1c7aa008206.png)
(3)由(q1,)(q1, 1, X) 得 [q1 ,X ,q1] 1;
(4)由(q2,)(q1, , Z0) 得 [q1 ,Z0 ,q2] ;
(5)由(q0,XZ0)(q0, 0, Z0) 得 [q0 ,Z0 ,qj] 0[q0 ,X ,qi] [qi ,Z0 ,qj] , i, j = 0,1,2;
从上下文无关文法构造等价的下推自动机
定理4.5.1(由CFG可导出PDA): 设上下文无关文法G=(N,T,P,S),产生语
言L(G),则存在PDA M,以空栈接受语言Lφ(M), 使Lφ(M)=L(G)。
证明:构造下推自动机M,使M按文法G的最左推导 方式工作。
1
从上下文无关文法构造等价的下推自动机
q0 b, A/ε
b, A/ε ε, A/ε
q1 ε, z0/ε
(3) 对①式δ(q0,a,z0)={( q0, A z0)} , ∵所有可能的状态序列为:q0q0,q1q0,q0q1,q1q1 ∴可构造出产生式:
[q0,z0,q0]→ a [ q0,A, q0 ][ q0,z0, q0 ] [q0,z0,q0]→ a [ q0,A, q1 ][ q1,z0, q0 ] [ q0,z0,q1]→ a [ q0,A, q0 ][ q0,z0, q1 ] [ q0,z0,q1]→ a [ q0,A, q1 ][ q1,z0, q1 ]
then A w.
归纳于 (q, w,A)├*(q, , ) 的步数 n.
基础 n=1,必有 w = ,且 A 为 G 的产生式,所以 A w.
归纳 n>1,设第一步使用产生式 AX1X2…Xm , 可以将w 分为 w = w 1 w 2… w m ,满足 (q, wi , Xi )├*(q, , ),
计算理论第3章
![计算理论第3章](https://img.taocdn.com/s3/m/e2b0c5b51a37f111f1855bec.png)
下面证明此算法的有效性。 显然对任何变元A∈NEWVN,不论A是在第⑵步还是在第 ⑸步加入到NEWVN中的,都有派生A*w,其中w∈VT*。 只证明G中任何派生A*w,w∈VT*,必有A∈NEWVN。 (对派生的步数归纳证明) a)若此派生是一步完成的,即有Aw,则说明P中有产 生式Aw,于是A在算法的第⑵步被添加到NEWVN中。 b)假设G中派生A*w是少于k步完成的,则A∈NEWVN。 c)当G中有k步派生AX1X2 …Xnk-1w,不妨设 w=w1w2 …wn,其中Xi*wi,(i=1,2,…,n),而且由于这些 派生的步数少于k步,如果Xi是变元,则根据假设b)得Xi 最终会加入到NEWVN中。在执行算法的第⑷步时 OLDVN:=NEWVN,当最后一个Xi加入OLDVN时,在执 行算法的第⑸步时,就将A加入到NEWVN中。
149
2.构造P’:是由P中只含有(VN’∪VT’)中的符号的 产生 式构成的。 3.证明L(G)=L(G’) a)显然有L(G’)L(G),因为VN’VN,VT’VT, P’ P,所以G’中任何派生S*w,在G中也有S*w。所以 L(G’)L(G)。 b)证明L(G)L(G’),任取w∈L(G),不妨设w在G中的 派生为S*αXβ*w,其中α,β∈(VN∪VT)*,由上 述算法可知,在此派生中出现的所有符号,都不会因为 对G使用此引理而被去掉,所以这些符号必在VN’∪V T’ 中,此派生中所用到的产生式也在P’中,所以这个派生 在G’中也可以实现,因而必有w∈L(G’)。 故 150 L(G)L(G’)。
解:先对G应用引理3-2.1方法处理,执行此算法得到的 结果如表3-2.2所示。 循环次数i OLDVN NEWVN 初值 Φ {S,A} 1 {S,A} {S,A }
152
第三章:上下文无关语法
![第三章:上下文无关语法](https://img.taocdn.com/s3/m/0e3b1780f5335a8102d220ff.png)
Bb
A1 SA Ua
After Step 4 Grammar is in CNF
第三章:上下文无关语法
6
第三章:上下文无关语法
26
主要内容
2.1 上下文无关文法概述
2.2 下推自动机
2.3 非上下文无关语言
第三章:上下文无关语法
27
下推自动机
考虑语言 { 0n1n | n≥0} 的识别装置
, $
q1
q2
1, 0
q4
q3
, $
0, 0 1, 0
M = ({q1,q2,q3,q4}, {0,1}, {0,$}, , q1, {q1,q4}),
(q1, , ) = { (q2, $) }, (q2, 0, ) = { (q2, 0) }
(q2, 1, 0) = { (q3, ) }, (q3, 1, 0) = { (q3, ) }
S ASA | aB | a | SA | AS
Ab|S B b
Before removing
After removing
A B
第三章:上下文无关语法
A B
23
例题
Then, we remove A S
S0 ASA | aB | a | SA | AS
S ASA | aB | a | SA | AS
第三章:上下文无关语法
18
例题
S ASA | aB AB|S Bb|
S0 S S ASA | aB AB|S Bb|
第三章:上下文无关语法
19
例题
After that, we remove B
S0 S S ASA | aB AB|S Bb|
3第三章 上下文无关文法及分析1
![3第三章 上下文无关文法及分析1](https://img.taocdn.com/s3/m/49f83102aeaad1f347933f12.png)
例 设有文法 G2=(VN,VT,P,S) 其中,VN={A}、VT={a}、P={ A→Aa, A→ } 试问:此文法描述的语言L(G2)=?
解:由于从开始符号A出发,可以有 AAaa=a AAa Aaa aa=aa AAa Aaa Aaaa =aaa =aaa 得L(G2)={a,aa,aaa,aaaa,}={an,n>1}
其中符号“*”表示经过0步或多步推导(S=u则称 为0步推导,而Su则称为1步推导,“+”则称为 一步或多步推导)。
仅含终结符的句型称为句子。
• 语言的形式化定义
文法G所描述的语言用L(G)表示,它由文法G所产 生的全部句子组成,即:
L(G)={w|wVT+ 且S+w } 这个定义式的意义如下: (1)符号串w是从开始符号推导出来的; (2)w仅由终结符号组成; (3)w称为该语言的句子; (4)L(G)是由所有这样的句子构成的。
• 问题:属于VT+的符号串x,是否一定属于L(G)?
例 设有文法 G1=(VN,VT,P,S) 其中,VN={A}、VT={a}、P={A→a} 试问:此文法描述的语言L(G1)=?
解:由于从开始符号A出发,只能推导出一个句子 a,所以 L(G1)={a},因此文法G1所定义的语言 L(G1)是有穷语言。 由于VT+ ={a,aa,aaa, },因此L(G1)只是 VT+ 的一个真子集。
第3章
语言和上下文无关文法及分析
主要内容
文法及语言的表示及定义 分析过程 分析树与抽象语法树 二义性 文法的扩展表示:EBNF和语法图 TINY语言的语法
• 什么是语言? • 如何描述语言? • 如何识别语言中的句子?
• 语言的定义
计算理论复习课2习题---答案
![计算理论复习课2习题---答案](https://img.taocdn.com/s3/m/eaa6b368f5335a8102d22092.png)
第三章 上下文无关语言与下推自动机a. {w | w 至少含有3个1} S →A1A1A1A A →0A|1A|εb. {w | w 以相同的符号开始和结束}S →0A0|1A1 A →0A|1A|εc. {w | w 的长度为奇数}0, ε→ε0,ε→ε 0,ε→ε1,ε→ε0,ε→εS →0A|1A A →0B|1B|ε B →0A|1Ad.{w | w 的长度为奇数且正中间的符号为0} S →0S0|1S1|0S1|1S0|0e.{w | wS →A1AA →0A1|1A0|1A|AA|εf.{w | w=w R }S →0S0|1S1|1|0g.空集 S →S3.6 给出产生下述语言的上下文无关文法: a . 字母表{a,b}上a 的个数是b 的个数的两倍的所有字符串组成的集合。
S →bSaSaS|aSbSaS|aSaSbS|εb .语言{a n b n |n ≥0}的补集。
见问题3.25中的CFG: S →aSb|bY|Ta T →aT|bT|εc .{w#x | w, x ∈{0,1}*且w R 是x 的子串}。
S →UV0,ε→0,0→0,ε→1,0→0,1→0,ε→0,0→U→0U0|1U1|WW→W1|W0|#V→0V|1V|εd.{x1#x2#⋯#x k|k≥1, 每一个x i∈{a,b}* , 且存在i和j使得x i=x j R}。
S→UVWU→A|εA→aA|bA|#A|#V→aVa|bVb|#B|#B→aB|bB|#B|#W→B|ε3.14解:添加新起始变元S0, 去掉B→εS0→A S0→AA→BAB|B|εA→BAB|AB|BA|B|εB→00|εB→00去掉A→ε, 去掉A→BS0→A S0→AA→BAB|AB|BA|B|BB A→BAB|AB|BA|00|BBB→00 B→00去掉S0→A, 添加新变元S0→BAB|AB|BA|00|BB S0→VB|AB|BA|UU|BBA→BAB|AB|BA|00|BB A→VB|AB|BA|UU|BBB→00 B→UUV→BAU→03.15 证明上下文无关语言类在并,连接和星号三种正则运算下封闭---答案。
编译原理课程设计之第三章上下文无关文法及分析
![编译原理课程设计之第三章上下文无关文法及分析](https://img.taocdn.com/s3/m/fcf2a2c4a300a6c30d229f76.png)
14
无关文法及分析
1. 上下文无关文法(即2型文法)的形式定义:
上下文无关文法是一个四元组(VT , VN , P , S):
① ②
终非结终符 结集 符合 集合VTVN(与VT产的不生左相式部交)
产生式 的右部
③ 产生式或文法规则A→α形成的集合P,
其中A∈VN,α∈(VT∪VN)* 4) 开始符号S,其中S∈VN
25
无关文法及分析
3.2 上下文无关文法的形式定义
1. 上下文无关文法(即2型文法)的形式定义 2. chomsky文法的分类 3. 推导和规约的定义 4. 句型和句子的定义 5. 最左和最右推导 6. 文法定义的语言 7. 递归产生式和递归文法 8. 文法和语言
mcy
编译原理课程设计之第三章上下文
mcy
编译原理课程设计之第三章上下文
1
无关文法及分析
第三章 上下文无关文法及分析
本章的目的是为语言的语法 描述寻求形式工具,要求该 工具对程序设计语言给出精 确无二义的语法描述。
mcy
编译原理课程设计之第三章上下文
2
无关文法及分析
第三章 上下文无关文法及分析
✓3.1 语法分析过程 ▪ 3.2 上下文无关文法的形式定义
下面的2型文法描述了包含加法、减法和乘法的简 单整型算术表达式的语法结构。
文法G[exp]:
exp → exp op exp exp →(exp) exp → number
34-3 是符合该 语法结构的简单 整型算术表达式 (句子)吗?
op → + | - | *
mcy
编译原理课程设计之第三章上下文
令G是一个如上所定义的文法,则G=(VT,VN,P,S)
上下文无关文法自顶向下分析
![上下文无关文法自顶向下分析](https://img.taocdn.com/s3/m/5ea3af085f0e7cd1842536d7.png)
3.2 上下文无关文法(CFG)
CFG的定义与表示 上下文无关文法,Context Free Grammar,CFG 定义3.1 CFG是一个四元组: G =(N,T,P,S),其中 (1) N是非终结符(Nonterminals)的有限集合; (2) T是终结符(Terminals)的有限集合,且N∩T=Φ; (3) P是产生式(Productions)的有限集合,形如: A→α,其中A∈N(左部),α∈(N∪T)*(右部), 若α=ε,则称A→ε为空产生式(也可以记为A →); (4) S是非终结符,称为文法的开始符号(Start symbol)。
13
3.3 语言与文法简介
计数问题 L3={anbncn|n≥1} L3'={ambmcn|m,n≥1} L3''={akbmcn|k,m,n≥1} CSL A→AC A→aAb|ab C→cC|c ? CFL 正规集 a+b+c+
命题:L3'不是正规集,因为构造不出可以识别L3'的DFA。 证明:(反证) 假设L3'是正规集,则可构造n个状态的DFA D,它接受L3'; 考察D读完ε,a,aa,...,an,分别到达S0,S1,...,Sn, 共有n+1个状态。根据鸽巢原理,序列中至少有两个状态相 同,设Si=Sj(j>i),因为aibick∈L3',所以存在路径aibick。 但是D中也有路径ajbick,矛盾。故L3'不是正规集。 aj-i bi ai ck 14 S0 Si Sk f
8
语言与文法简介
3.3 语言与文法简介
正规式与上下文无关文法 1. 正规式到CFG的转换 推论3.1 正规式描述的语言结构均可用CFG描述,反之不一定
形式语言自动机——上下文无关文法与下推自动机(五)
![形式语言自动机——上下文无关文法与下推自动机(五)](https://img.taocdn.com/s3/m/5b6512f7ba0d4a7302763a8f.png)
§4.6 上下文无关语言的性质1. 2型语言的泵浦引理:设L 是上下文无关语言,存在常数p ,如果ω∈L , 且︱ω︱≥p ,则ω可以写为ω=ω1ω2ω0ω3ω4,使ω2ω3≠ε,∣ω2ω0ω3∣≤p ,对于i ≥0有ω1ωi2ω0ωi3ω4∈L 。
(不含L ={ε}的情况) 物理意义:线性语言的泵浦引理是说,在正规集合中,每个足够长的字符串都包含一个短的字串,随便将这个子串在原处重复插入多少次,所得的新字串还是在原正规集中。
2型语言的泵浦引理是说,有两个靠得很近的子串,它们可以重复任意多次(但二者重复的次数相同),所得的新串依然属于该2型语言。
证明:设G 是Chomsky 文法(形如A →BC,A →a ),产生语言L -{ε} 若ω∈L 且ω有一定的长度,则边缘为ω的推导树有一定长度的路径。
对于Chomsky 范式,设路径长度为n ,则有边缘长度 ︱ω︱≤ 2n -1,如下图所示a 路径 =1︱ω︱=︱a ︱=21- 1=1a a路径 =2︱ω︱=︱aa ︱=22- 1=2设文法G 有n 个非终结符,取p =2n若ω∈L ,且︱ω︱≥p (即︱ω︱≥ 2n)则必有︱ω︱≥ 2n -1,即存在一条长度 > n 的路径,至少为n+1。
这时,该路径上的结点数为n+2(包括最高层顶点及最底层叶子)。
∵G 中只有n 个非终结符∴在这条路径上必然有某两个结点相同设为v 1= v 2=A, v 1靠近树根,v 1到叶子的最长路径为n+1。
路径=4︱ω︱≤24- 1=8 (第i 层最多有2i个非终结符。
第i+1层若全为终结符,则与第i 层非终结符个数相等。
)ω2 ω0 ω3=εv 1靠近根,其子树为T 1,Z 1v 2远离根,其子树为T 2,ω0如图:Z 1=ω2ω0ω3︱Z 1∣≤2 n =p (∵v 1到叶子的路径最多为n+1) 而v 1* =>ω2v 2ω3, v 2* =>ω0∵v 1=v 2=A ∴v 1 *=>ω2v 2ω3 =>ω2ω2v 2ω3ω3=>ωi2ω2v 2ω3ωi3 =>ωi2v 2ωi3 =>ωi2ω0ωi3∴ S =>ω1ω2ω0ω3ω4 *=>ω1ωi 2ω0ωi3ω4 v 1的子树得证#2型文法泵浦引理的用途:判断一给定语言是否是上下文无关文法。
编译原理-西安交通大学(冯博琴)第三章上下文无关文法
![编译原理-西安交通大学(冯博琴)第三章上下文无关文法](https://img.taocdn.com/s3/m/ba363b8bc8d376eeaeaa317f.png)
2、二义性问题
定义:
文法G的某一句子有两棵不同的树,则G为二义的。
二义性对语法分析不便,因此希望:
1)判定二义否 2)无二义性的充分条件 3)如何消除二义性
解决办法:尽量去掉二义性
①如对上例,可以通过阐明运算符的优先性和 结合性来解除文法的二义性
②通过重写一个文法,把结合性和优先规则结 合进文法本身中去 注意到,L(G)=L(G’),G≠G’
该文法的: VN是出现P的左部所有符号集合 V是P的所有符号
∴VT = V \ VN S是该文法所定义的句子名字
∴写出了P ,就能找出其它三元素
2、从此可见
终结符:是用以组成语言中的串的基本符号,与
程序语言中“单词”是同义语; 如:表达式id+(id)*( - id)中,+、-、*、/、↑、id均为 终结符
得到相同的语法树 •有的语法,对于同一句子、应用不同规则进行推
导得到不同的语法树
例4 根据文法G对句子id + id * id进行推导
①文法G E -> E+E|E*E|( E )| i
②推导1 E => E+E => id+E => id+E*E => id+id*E => id+id*id ③推导2 E => E*E => E+E*E => id+E*E => id+id*E => id+id*id
问题: 如何描述语言 定义: 文法是描述语言的语法结构的形式规则(即语法规
则) 目的: 解决语言的有穷说明问题,包含对语法的描述,但
却不表达任何语义
1、文法的描述应达到要求:
(19)第三章 第二讲 上下文无关文法的变换
![(19)第三章 第二讲 上下文无关文法的变换](https://img.taocdn.com/s3/m/5e79e9542b160b4e767fcf45.png)
算法3:对给定的一个上下文无关文法G=(N,T,P,S),一定 可以删除所有形如A→ε的生成式,从而得到一个与G 等效的文法G1=(N1,T,P1,S1)是无ε的上下文无关文法, 其算法如下:
(1) 修改算法1 , 使之能够逐步求得集合N'={A | A∈N 且 A + ε} ① N0 :=Ø , N0为非终结符集合; ② N ' :={A|A→w ∈P且w∈T*} , N' 亦为非终结符集合; ③ 如果N0 ≠N' , 则转④; 如果N0 =N' ,转⑥; ④ N0 :=N' ;
二、对文法进行变换的有关算法
3、进一步删除无用符号之思想 定理 9:已知一个由算法1 得到的上下文无关文法 G1=(N1,T1,P1,S),则必能找到一个等效的上下文无关文法 G2=(N2,T2,P2,S),使对于G2的每一个符号X∈N2∪T2 ,一 定存在α,β∈(N2∪T2)*,使得S * αXβ。 (证明略) 算法2:进一步删除所有无用符号。根据定理 9,对文法G P2 P1 进行算法1处理后所得文法G1=(N1,T1,P1,S),一定可以进一 N N1 T2 T1 步删除 G 2 1中所有无用符号及相关的生成式,从而得到一个 与原文法G等效的文法G2=(N2,T2,P2,S),其算法如下:
二、对文法进行变换的有关算法
6、删除ε生成式 目的:对上下文无关文法G来说,如果某生成式右部是空 串,即形如A→ε的生成式,则在一般情况下这样的生成 式是不必要的,应予以删除。但有一种情况例外:若G生 成的语言L(G)中含有ε作为合法的句子,则不能删除生成 式S→ε,其中S是起始符。 无ε 文法之定义:设有一个上下文无关文法G=(N,T,P,S),如果生
计算理论课后题及答案2
![计算理论课后题及答案2](https://img.taocdn.com/s3/m/f82f6c5c581b6bd97e19ea1e.png)
第三章上下文无关语言略。
a. 利用语言A={a m b n c n | m,n0}和A={a n b n c m | m,n0}以及例,证明上下文无关语言在交的运算下不封闭。
b. 利用(a)和DeMorgan律(定理,证明上下文无关语言在补运算下不封闭。
证明:a.先说明A,B均为上下文无关文法,对A构造CFG C1S aS|T|T bTc|对B,构造CFG C2S Sc|R|R aRb由此知 A,B均为上下文无关语言。
但是由例, A∩B={a n b n c n|n0}不是上下文无关语言,所以上下文无关语言在交的运算下不封闭。
b.用反证法。
假设CFL在补运算下封闭,则对于(a)中上下文无关语言A,B,A,B也为CFL,且CFL对并运算封闭,所以BA 也为CFL,进而知道B A ⋃为CFL ,由DeMorgan 定律B A ⋃=A ∩B ,由此A ∩B 是CFL,这与(a)的结论矛盾,所以CFL 对补运算不封闭。
略。
和 给出产生下述语言的上下文无关文法和PDA ,其中字母表={0,1}。
a. {w | w 至少含有3个1}S →A1A1A1A A →0A|1A|b. {w | w 以相同的符号开始和结束}S →0A0|1A1 A →0A|1A|c. {w | w 的长度为奇数,11,1 0,,1,11,1 1, 0,0,0 1,10,0 1, 0, 1,0,S →0A|1A A →0B|1B| B →0A|1Ad. {w | w 的长度为奇数且正中间的符号为0}S →0S0|1S1|0S1|1S0|0e. {w | w 中1比0多}S →A1AA →0A1|1A0|1A|AA|f. {w | w=w R}S →0S0|1S1|1|01,0 0,0,0 1,00,0 ,$ ,$1,1,10,0 ,1,$,$1,0 0,1g. 空集S →S给出产生下述语言的上下文无关文法:a .字母表{a,b}上a 的个数是b 的个数的两倍的所有字符串组成的集合。
确定的下推自动机-Read
![确定的下推自动机-Read](https://img.taocdn.com/s3/m/1b141d35e87101f69e319581.png)
P2={B β |B Aβ ∈P,A∈V0, β ≠ε }. 令P’’=P- P1 +P2 从而,构造出G”=(N,T,S,P’’) 显然,G”中没有ε 产生式,如果G的某步推导中,用到 P中的产生式B Aβ (A∈V0 , β ≠ε ),而再以后的 每一步推导中,必须要用A ε 的,那么再G’’相应推导 中,用P’’中的 B β ,而不必用 Aε ,推导照样进行 ,; 反之亦然,L(G’’)=L(G) 再对G”应用定理1,2,便得到CFG G’=(N’,T’,S,P’), G’没有无用符号,且L(G’)= L(G’’)= L(G), 又P’ P’’,所以,G’也无ε 产生式,可得 无ε 字产生 式及无用符号的文法G’。
上一页 下一页 退 出
G是二义的 ω∈L(G),有两棵不同的语法树(叶子为ω) 定义:CFG G是二义的 ω∈L(G),有两T不同的最 左(右)推导 文法二义的语言二义表示字的文法均二义 定义:CFG
3.2上下文无关文法的改写 不改变文法描述能力前提下改写文法满足一定要求. 改写目标:将CFG改写成某种标准形式. (1) 改写成Chomsky范式:产生式形式均为:文法二义的
上一页 下一页 退 出
定理:CFG G=(N,T,S,P),若L(G)≠Φ , L(G)≠{ε },则 存在一个没有无用符号,没有ε 产生式的 CFG G‘=(N’,T’,S,P’),使:L(G’)=L(G) 证明:先构造一个与CFG G=(N,T,S,P)等价,又没有ε 产生式的CFG G”=(N,T,S,P”)。为此,先找出G中所 有的可零化的非终结符号。 设:V0={A| A ε ,A ∈N} 可零化的非终结符号。 构造V0: (1)若:A ε ∈P,则 A V0 (2)若:A X1X2 …Xn∈P,且Xi∈V0(1≤i≤n),则 A∈V0 (3)重复(2),直到没有新的非终结符加入V0为止, 现将P改造为P”: P1={A ε |A ε ∈P}
上下文无关文法的形式化
![上下文无关文法的形式化](https://img.taocdn.com/s3/m/cc43ea3ded630b1c59eeb5bc.png)
24
例题
S ASA | aB AB|S Bb| S0 S S ASA | aB AB|S Bb|
25
例题
After that, we remove B
S0 S S ASA | aB AB|S Bb|
Before removing B
S0 S S ASA | aB | a AB|S| Bb
7
CFG的术语
假设 u 与 v 由变元及终结符构成的字符串,Aw 是文法 的一条规则,称 uAv 生成 uwv,记作 uAv uwv 。 如果 u = v ,或者存在 u1, u2, …, uk, k 0 使得 u u1 u2… uk v,则称 u 派生 v,记作 u * v。
3
如何利用 CFG 产生字符串
A 0A1 AB A# (1) 写下起始变元——第一条规则左边的变元。 (2) 取一个已写下的变元,并找到以该变元开始 的规则,把这个变元替换成规则右边的字符 串。 (3) 重复步骤2,直到写下的字符串没有变元。 获取一个字符串的替换过程叫派生。
例如字符串 000#111 的过程如下:
13
歧义性
一个串可能有两个甚至更多的最左派生。 例如 CFG G=( {S}, {+,*,a}, R, S) ,其中规则为 SS+S|S*S|a 产生串 a + a * a S S + S a + S a +S *S a + a * S a+a*a S S *S S + S * S a +S * S a + a * S a+a*a
19
REVIEW(2011-03-14)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
情况 2:对 (V T)* ,若 S ,则 中不含 X 。即 X 是不 出现在任何句型中的字符。这种情况下的无用符号 X 既可能是变 量,也可以是终极符。 算法 3.2 是寻找这种不出现在任何句型中的变量或终极符的算 法。这个算法的基本思想是 1) 所有出现在 S 产生式右边的变量和终极符都可以出现 在句型中; 2) 若已知 A 是可以出现在句型中的变量,则所有出现在 A 产生式右边的变量和终极符都是可以出现在句型中 的字符; 3) 反复使用 2) 直到找不出新的字符为止, , 剩下的变量或 终极符就是那些不出现在任何句型中的字符。 在文法中删去无用字符时,同时要删去包含这些字符的产生 式。
* *
3.2.3 最左推导与最右推导
再进一步考察前面给出的文法 G 和 G 的一个推导树 Tr 。这个推 导树产生的终极符串为 aabbaa 。 前面我们给出了这个终极符串的一 个推导。另外,我们还可以给出这个串的另一些推导,如: S aAS aAa aSbAa aSbbaa aabbaa (3.2) S aAS aSbAS aSbbaS aSbbaa aabbaa (3.3) 推导式(3.1)(3.2)和(3.3)的推导过程显见是不一样的。不过 、 仔细观察可以发现,它们都是通过 5 步推导从 S 推导出 aabbaa 。而 且这 3 个推导过程中,所使用到的产生式(包括每个产生式的重复 使用次数)都是一样的,只是顺序不一样而已。 (3.1)式的推导过 程中,每一步推导都是对句型中最左边的变量使用产生式; (3.2) 式的推导过程中, 每一步推导都是对句型中最右边的变量使用产生 式; (3.3)式的推导过程中,各步推导使用产生式的变量在句型中 的位置则是随意的。
3)若节点 n 的标注符号为 ,则 n 必为叶节点,且是其父节点 的唯一子节点。 例 3.3 设有一个上下文无关文法 G ({S , A},{a, b}; P, S ) P: S AS | a 其中 A SbA | SS | ba 下面给出的是文法 G 的一个推导树
1
S A
4
a 2 S 5
3.3 上下文无关文法的化简
对于一个上下文无关语言 L ,可能有多个上下文无关文法产生它。 这其中可能不是最简的。所谓不是最简的,是指文法中包含无用的字 符或无用的产生式。 本节就是讨论怎样在一个文法中删去无用的字符 和无用的产生式。
3.3.1
无用字符
设 G (V , T ; P, S ) 为一个 CFG,字符 X V T ,如果存在一个推 导:
上下文无关文法最早是用于描述自然语言的一些规则。例如,自 然语言中的一个句子可以通过下列规则来确定: 句子 名词短语 动词短语
名词短语 形容词 名词短语 名词短语 名词 然而,对于自然语言,这种描述并不是完美无缺的。还涉及到语 义是否明确的问题(例如“桌子唱歌”虽然符合上述规则 ,语义却不 够明确) 。 把这种规则应用于计算机语言,却更为合适。例如,用 Backus 范式来表示程序设计语言的规则
算术表达式 算术表达式 算术表达式 算术表达式 算术表达式 算术表达式 算术表达式 算术表达式 算术表达式 id
这些规则比用自然语言来说明“什么是算术表达式”更为明确、清 晰和简明。 定义 3.1 设 G (V , T ; P, S ) 为一个文法, 如果 G 中的产生式都有 A A V , (V T )*
例 3.1 构造一个上下文无关文法 G ,它所产生的语言为字母表 {0,1}上的全体回文的集合,即
L(G) w {0,1}*| w wR
(3.1)
为求解这个问题, 我们先分析一下回文的特点。 当一个回文 w 的 长度为偶数时,设| w | 2n, w的第 n 个字符与第 n 1个字符相同,第 n 1个字符与第 n 2 个字符相同,„余类推。当回文 w 的长度为奇 数时,设 | w | 2n 1,那么 w 的第 n 1个字符可以是字母表中的任 意一个字符,第 n 个字符与第 n 2 个字符相同,„余类推。因此, 我们只须找出长度为偶数的最短回文和长度为奇数的最短回文。 然 后从这些出发, 通过产生式规则,在任意一个回文的前后都加上相 同的字符,就可以得到一个新的回文。这样可以得到全体回文。
3.2 推导树(derivation tree)
对于一个上下文无关文法 G ,如果 w L(G) ,那么从初始符 S 推导 出 w 的过程可以用一个节点带标注符号的树来描述。
3.2.1
推导树的定义和例子
定义 3.2 设 G (V , T ; P, S ) 为一个上下文无关文法, G 的推导树是 指满足下列条件的一个节点带标注符号的树Tr : 1)Tr 中的每个节点都有一个标注符号,其中根节点的标注符号为 初始符 S ,内节点的标注符号为变量集V 的元素,叶节点的标注符号 为终极符集T 的元素或者空串 ; 2)若内节点 n 的标注符号为 A , n 的子节点从左到右依次 为 n1 , n2 ,, nk ,它们的标注符号分别为 X1 , X 2 ,, X k ,那么 A X1 X 2 X k 是 G 的一个产生式;
S X w
* *
, (V T ) *
w T *
那么就说 X 是文法 G 中的一个有用字符,否则说 X 是一个无用字符。
上下文无关文法化简的任务之一,就是要删去文法中出现的无 用字符。对文法中的无用字符,可以分成两种情况来讨论: 情况 1 :对 A V ,不存在 w T * 使得 A w 。这种情况的无 用字符只可能是变量。 算法 3.1 是找出那些不能推导出终极符串的变量的算法。这个 算法的基本思想是: 1) 若存在产生式 A w, w T *) ( ,那么从 A 可以推导出 终极符串; 2) 若已求出部分可以推导出终极符串的变量,且有产生式 A ,其中 只含终极符和那些已知可推导出终极符 串的变量,则从 A 也可以推导出终极符串; 3) 反复使用 2) 直到再也不能求出新的可推出终极符串的 , 变量。剩下的变量就为所求。
形式语言与自动 机理论
2010-2011
第3章 上下文无关文法与下推自动机
本章讨论第 2 种类型的语言:上下文无关语言(context-free language)
上下文无关文法 上下文无关语言 下推自动机
上下文无关语言在程序设计语言和编译程序中有广泛的应用。
3.1 上下文无关文法(context-free grammer)
定义 3.3
设 G (V , T ; P, S ) 为一个 CFG, L(G) 。 如果在 S x x
*
的推导过程中,每一步都是对句型中最右(左)边的变量使用产生 式,则称这个推导为最右(左)推导。
3.2.4
上下文无关文法的歧义性
再次考察前面的文法 G 。显然有多个推导过程推出 L(G) 中的一 个串 aabbaa ,但它们所对应的推导树都是一样的,都是前面给出 的Tr 。换句话,我们可以说 aabbaa 只一个推导树。 有些 CFG 中,可能有这样的情况:一个终极符串对应两个(或 两个以上)不同的推导树。 例如, G1 ({S , A, B},{a, b}; P, S )
S a S a A b b S A a a
3.2.2
推导树与推导的关系
上面给出的文法 G 的一个推导树,这个推导树的叶节点的标注 符号从左到右按顺序排成的终极符串为 aabbaa 。 我们就说 aabbaa 是由这个推导树产生的。另一方面, G 中也存在一个推导 S aAS aSbAS aabAS aabbaS aabbaa (3.1) 从 S 推导出串 aabbaa 。 这种推导树与推导之间的关系不是偶然的。下面的定理说明这 一点。 定理 3.1 设 G (V , T ; P, S ) 为一个上下文无关文法, x T *。那 么 S x 当且仅当存在一个推导树产生 x 。 书上对这个定理给出了证明,这里不作细述。只是顺便指出, 书上证明的是一个更强的结论:对任意变量 A : A x 当且仅当存 在一个 A 树(以 A 为根节点标注符号的子推导树)产生 S 。由于 S 也是一个变量,因此所证明的结论涵盖了定理的内容。
把上述分析归纳为 3 条: 1) 空串 是回文,0 是回文,1 也是回文; 2) 如果 w 是回文,那么 0w0 是回文,1w1也是回文; 3) 除此之外,字母表{0,1}上再没有其它回文。 把这 3 点转化为形式表示,就可以得到产生{0,1}上的全体回文 的集合(即(3.1) )的文法如下: G ({S},{0,1}, P, S ) P: S | 0 |1 S 0S 0 |1S1 例 3.2 自己阅读(堂上给 5 分钟阅读)
其中
P:
S SA | SB | a Ab B b
容易知道 ab L(G) , 而且这个终极符串可以由两个不同的推导 树产生:
S
S
S
A
S
B
a
b
a
b
我们说它是两个不同的推导树,是因为它们所对应的推导过程 中所使用的产生式是不一样的。 左边的推导树对应的产生式有 S S A S , a 和 A ;b 右边的推导树对应的产生式有 S S B S , 和 a B 。b 由此,可以引出上下文无关文法和上下文无关语言的歧义性定 义。 定义 3.4 设 G (V , T ; P, S ) 为一个 CFG。若存在 x L(G) ,使得 有两个不同的推导树产生 x ,则称 G 为一个歧义文法。 定义 设 L 为一个 CFL, 如果产生 L 的每一个 CFG 都是歧义文 法,则称 L 为一个固有歧义的 CFL。
这个文法共有 8 个产生式,每个产生式都有定义 3.1 所规定的 形式。因此,它是一个上下文无关文法。它所产生的语言(第 1 章 已证明) :
L(G2 ) w {a, b} | w中a的个数等于b的个数