第七章:下推自动机
计算理论导引习题答案

什么是时间复杂度?请举例说 明。
时间复杂度是评价算法执行时 间快慢的一个指标,通常用大O 表示法来表示。例如,对于一 个简单的顺序查找算法,其时 间复杂度为O(n),表示随着问 题规模n的增加,算法的执行时 间线性增长。
计算模型习题答案详解
习题1
解释图灵机的基本原理和工作过程。
答案
图灵机是一种理论上的计算模型,由一条无限长的纸带和一个读写头组成。读写头可以读取、写入和移动纸带上 的符号,根据当前状态和读取的符号来决定下一步的动作和状态转移。图灵机的工作过程可以模拟任何计算机程 序的执行过程。
RAM模型的扩展与优化
包括引入并行计算、分布式计算等概念,以 提高RAM模型的计算能力和效率。
其他计算模型
量子计算模型
利用量子力学原理进行计算的模型,具有在某些特定 问题上比传统计算机更高的计算效率。
生物计算模型
模拟生物体内信息处理过程的计算模型,如神经网络、 基因算法等。
光计算模型
利用光学原理进行计算的模型,具有高速并行处理和 低能耗等优点。
形式语言与自动机习题答案详解
习题1
解释什么是形式语言,并给出其定义和性质 。
答案
形式语言是பைடு நூலகம்于描述计算机程序的语法和语 义的一种数学工具。它由一组符号和一组规 则组成,可以表示各种不同类型的数据结构 和算法。形式语言具有确定性、封闭性和可 计算性等性质,这些性质使得我们可以对计
算机程序进行精确的描述和分析。
Python语言基础 掌握Python语言的基本语法、数 据类型、控制结构、函数等,以 及常用的Python库和框架。
其他编程语言 了解其他常见的编程语言,如C#、 JavaScript、Go等,以及它们的 特点和应用场景。
形式语言和自动机上下文无关文法与下推自动机课堂PPT

(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, , ),
形式语言与自动机第七章下推自动

下推自动机接受的语言
例7.1 构造一个PDA按终结状态方式接受语言{ 0n1n | n≥1}。
我们令 M =({q0,q1,q2,q3},{0,1}。{Z,A},δ,q0, Z,{q3}),其中 δ(q0 ,0,Z)={(q1 ,AZ)} 在栈中 加入A
a
a
q
v
p
u
(p, u) δ(q, ε, v) means that this a ε-
move.
a
a
q
p
u
(p, u) δ(q, a, ε) means that a push
operation performs at stack.
a
q
v
a p
(p, ε) δ(q, a, v) means that a pop
下推自动机的动作模型
下推自动机接受的语言
定义7.2 设 M = (Q,∑,Γ,δ,q0 ,Z0 ,F)是一个PDA,集合{ w | (q0 , w, Z0) ┝* (p,ε,γ),w∈∑* ,p∈F,γ∈Γ* } 称为M按终结状 态方式接受的语言,用L(M)表示。
下推自动机M从初始状态q0出发,读头注视着w的第一个符号, 栈中只有栈底符号Z0(也是栈顶),经过若干次动作,当读头越 过w的全部符号后,若状态变为终结状态,则M接受w 。此时栈 中情况如何是没有关系的,也许栈变空,也许还有许多符号。但 是,在w未读完之前,栈不能变空,否则因为没有了栈顶符号,δ 函数将无定义,当然w也就不可能被M接受。
在上述例子中,也可以将最后两个δ函数改为δ(q2,ε,R)={(q3,R)}和δ( q1,C,R)={(q3,R)},并令q3为终结状态(在七元组中也相应更改),这 就是一个以终结状态方式接受L的PDA。由此可见,以两种不同方式接受语言的下 推自动机之间是相通的,并没有本质的差别。
下推自动机

7 下推自动机7.1 以例子为导引本章我们研究如何拓展有限自动机,引出能够处理CFL的抽象机模型。
我们已经发现了许多不是正则语言的CFL(当然,也有很多CFL是正则语言)。
我们的讨论不妨从下面的例子开始。
例子7.1 CFG G有如下的产生式:S→aSa | bSb | c,G生成的语言是L={xcx r | x∈{a, b}*}。
分析:显然L中的字符串也属于回文语言,还多一个特征,即字符串的中央是一个特别的字符c。
现在我们要设计一个识别L的算法。
假设我们从左至右扫描字符串,很显然在遇到字符c之前,我们需要保存见到的每个字符,一旦遇到了字符c,则将当前的字符与先前保存的字符进行比较,注意比较时,采用的是“后保存,先比较”的原则,或者称为“后来先出”原则(last in, first out. LIFO)。
实现LIFO原则的数据结构是栈,它的形式是一个链表,只通过一端处理链表,这个端称为栈顶(top),链表的元素在top端加入到链表中(push,压入),或从链表里删除(pop,弹出)。
上面的算法虽然简单,却包含了我们将要设计的处理CFL的抽象机模型的基本要素。
由于无限状态的抽象机很难描述,因此我们保留FA状态的有限性,但是我们增加辅助的存储空间,并假设它是无限大的。
前面已经看到有限空间的抽象机无法识别回文语言这样的CFL。
因此总的来说,新的抽象机包含两部分空间,有限的状态和无限的栈,同时抽象机的移动方法也要做相应的扩充。
决定移动动作的因素从FA的两个增加到三个,即状态、输入字符和栈顶内容,同时移动动作除了状态的转移,还包括栈顶的处理。
在这个简单例子中,状态集包括三个状态:q0、q1和q2。
q0是初始状态,抽象机在扫描过程中,遇到c之前,始终停留在状态q0,而且不断将遇到的字符加入到栈中;当遇到c,则状态转移到q1,保持栈不变。
在随后的扫描中,保持状态为q1,且不断比较栈顶字符与遇到的字符,如果相同,将栈顶字符弹出,继续上面的过程,否则抽象机崩溃(crash),输入的字符串不能被接受。
下推自动机

下推自动机7 下推自动机7.1 以例子为导引本章我们研究如何拓展有限自动机,引出能够处理CFL的抽象机模型。
我们已经发现了许多不是正则语言的CFL(当然,也有很多CFL 是正则语言)。
我们的讨论不妨从下面的例子开始。
例子7.1 CFG G有如下的产生式:S→aSa | bSb | c,G生成的语言是L={xcx r | x∈{a, b}*}。
分析:显然L中的字符串也属于回文语言,还多一个特征,即字符串的中央是一个特别的字符c。
现在我们要设计一个识别L的算法。
假设我们从左至右扫描字符串,很显然在遇到字符c之前,我们需要保存见到的每个字符,一旦遇到了字符c,则将当前的字符与先前保存的字符进行比较,注意比较时,采用的是“后保存,先比较”的原则,或者称为“后来先出”原则(last in, first out. LIFO)。
实现LIFO原则的数据结构是栈,它的形式是一个链表,只通过一端处理链表,这个端称为栈顶(top),链表的元素在top端加入到链表中(push,压入),或从链表里删除(pop,弹出)。
上面的算法虽然简单,却包含了我们将要设计的处理CFL的抽象机模型的基本要素。
由于无限状态的抽象机很难描述,因此我们保留FA状态的有限性,但是我们增加辅助的存储空间,并假设它是无限大的。
前面已经看到有限空间的抽象机无法识别回文语言这样的CFL。
因此总的来说,新的抽象机包含两部分空间,有限的状态和无限的栈,同时抽象机的移动方法也要做相应的扩充。
决定移动动作的因素从FA 的两个增加到三个,即状态、输入字符和栈顶内容,同时移动动作除了状态的转移,还包括栈顶的处理。
在这个简单例子中,状态集包括三个状态:q0、q1和q2。
q0是初始状态,抽象机在扫描过程中,遇到c之前,始终停留在状态q0,而且不断将遇到的字符加入到栈中;当遇到c,则状态转移到q1,保持栈不变。
在随后的扫描中,保持状态为q1,且不断比较栈顶字符与遇到的字符,如果相同,将栈顶字符弹出,继续上面的过程,否则抽象机崩溃(crash),输入的字符串不能被接受。
编译原理练习题及答案

第一章练习题(绪论)一、选择题1.编译程序是一种常用的软件。
A) 应用B) 系统C) 实时系统D) 分布式系统2.编译程序生成的目标代码程序是可执行程序。
A) 一定B) 不一定3.编译程序的大多数时间是花在上。
A) 词法分析B) 语法分析C) 出错处理D) 表格管理4.将编译程序分成若干“遍”将。
A)提高编译程序的执行效率;B)使编译程序的结构更加清晰,提高目标程序质量;C)充分利用内存空间,提高机器的执行效率。
5.编译程序各个阶段都涉及到的工作有。
A) 词法分析B) 语法分析C) 语义分析D) 表格管理6.词法分析的主要功能是。
A) 识别字符串B) 识别语句C) 识别单词D) 识别标识符7.若某程序设计语言允许标识符先使用后说明,则其编译程序就必须。
A) 多遍扫描B) 一遍扫描8.编译方式与解释方式的根本区别在于。
A) 执行速度的快慢B) 是否生成目标代码C) 是否语义分析9.多遍编译与一遍编译的主要区别在于。
A)多遍编译是编译的五大部分重复多遍执行,而一遍编译是五大部分只执行一遍;B)一遍编译是对源程序分析一遍就立即执行,而多遍编译是对源程序重复多遍分析再执行;C)多遍编译要生成目标代码才执行,而一遍编译不生成目标代码直接分析执行;D)多遍编译是五大部分依次独立完成,一遍编译是五大部分交叉调用执行完成。
10.编译程序分成“前端”和“后端”的好处是A)便于移植B)便于功能的扩充C)便于减少工作量D)以上均正确第二章练习题(文法与语言)一、选择题1.文法 G 产生的 (1) 的全体是该文法描述的语言。
A.句型B. 终结符集C. 非终结符集D. 句子2.若文法 G 定义的语言是无限集,则文法必然是 (2) A递归的 B 上下文无关的 C 二义性的 D 无二义性的3. Chomsky 定义的四种形式语言文法中, 0 型文法又称为(A)文法;1 型文法又称为(C)文法;2 型语言可由(G) 识别。
A 短语结构文法B 上下文无关文法C 上下文有关文法D 正规文法E 图灵机F 有限自动机G 下推自动机4.一个文法所描述的语言是(A);描述一个语言的文法是(B)。
chapter 7-下推自动机

第七章、下推自动机
字母
栈 q1
0
0 Ф $ ε Ф Ф
1
0 Ф $ ε
ε
0 Ф $ Ф ε
{(q2, $)}
Ф Ф
q2
q3 q4
Ф
Ф
{(q2, 0)}
Ф
第七章、下推自动机
运算举例如下:
(q2 , ,0) {( q2 ,0)}
(q2 ,0,1) {( q3 , )}
0, 0 1,0
M 1 (Q, , , , q1 , R, )
其中
Q {q1 , q2 }, {0,1, c}, {R, B, G}
第七章、下推自动机
且
(q1 ,0, R) {( q1 , BR)}
(q1 ,1, R ) {(q1 , GR)}
(q1 ,0, G ) {( q1 , BG )}
(q , ,Z ) {(q1,r1 ),(q2 ,r2 ), ,(qk ,rk )}
第七章、下推自动机
下推自动机的结构如下图所示:
a1 a2
ai
an
输入带
有限状态 控制器
z0 下推栈 z1
正如:
RL语言 有穷自动机 一样 CFL语言 下推自动机
第七章、下推自动机
例2、设计一个下推自动机接受语言
第七章、下推自动机
b, a
c,
a, a
,
q3 1
,$
b,
q4
c, a
q1
, $
q2
,
q5
,
q6 5
,$
q7
形式语言与自动机_课件_陈有祺第07章 下推自动机

时,也应被接受。
下推自动机接受的语言
与例7.2相比,由于要接受的语言没有明显的对称中心,因此当读到两个 连续的0或两个连续的1的时候,一方面要做为对称中心来处理,即改变 状态同时又消去栈顶,进入处理输入串后一半的情况;另一方面也要做为 尚未遇到对称中心来处理,即将0或1的对应符号入栈。这种同时考虑两 种或两种以上可能的问题,就要用到“不确定性”的概念。
将M2的初始状态q0´转为M1的初始状态q0 。 δ´的第(2)条定义规定了M2按M1的动作去做,也就是对一切q∈Q,a∈∑∪{ε}
下推自动机的定义
用IDk┝MiIDj表示从IDk经i次转换到达Idj
ID转换记号┝M中的M(下推自动机的名字)在明确无误的情况下也可也 不标出,可以只写┝或┝*。
为了以后应用的方便,对ID的定义加以扩充,也就是将三元组(q,w, γ)中的w扩充为输入符号串的某一子串,而读头正指向它的第一个符号 ;γ扩充为栈中从栈顶开始往下的某个连续的符号串。例如,原来的ID为 (q ,w1w2 ,γ1γ2),扩充后的ID可以写为(q ,w1 ,γ1)。
等价性
定理7.1 如果对于某个按终结状态方式接受语言的PDA M1 ,有 L(M1)=L,则存在一个按空栈方式接受语言的PDA M2 ,使得N(M2)=L。
证明 设M1 =(Q,∑,Γ,δ,q0 ,Z0 ,F),构造 M2 =(Q∪{qe ,q0´},∑,Γ∪{X0},δ´,q0´ ,X0 , )
下推自动机接受的语言
构造这个PDA M的基本思路是,因为要接受的输入是以c为中心的对称串,利用栈 的特性,将在c之前已读过的符号依次存入栈中(用B代表0,G代表1,当然用符 号0,1本身入栈也是可以的。),当遇到对称中心c时,栈不动,但要改变状态( q1变为q2),在q2的控制下处理输入串的后一半,主要是输入符号和栈中符号的对 消工作。当读到的输入符号为0时,若栈顶符号为B,则消去B并读下一个符号;当 读到的输入符号为1时,若栈顶符号为G,则消去G并读下一个符号,直到对称的 输入串读完,栈底符号R重新变为栈顶,此时将栈变空表示接受。对于不能接受的 输入,例如,输入串为01c11时,当读到c后第二个1时,栈顶符号为B,但是我们 没有定义δ(q2 ,1,B),因此M不能接受该输入串。
第七章 下推自动机

(3)若 M1 到达终态,则 M2 进入清栈状态q e
∀( q, ε, Z ) ∈ F×{ ε }×Γ, δ2 ( q, ε, Z ) = {( qe, ε )}
( 4 ) M2 连续弹栈,完成清栈工作:
对于 ∀Z ∈ Γ ∪{ Z02 } , δ2 ( qe, ε, Z ) = {( qe, ε )} 。
经过若干次(包含零次)移动,变成( p, x, β )。
( q, w, α )
+ M
( p, x, β ):表示 M 的 ID 从( q, w, α )出发,
经过至少一次移动,变成( p, x, β )。
这里, 1、字符串 x 是 w 的后缀; 2、意义清楚时,可省去 ID 推导符中的 M,分别记为:
以终态方式接受语言的下推自动机 M = ( Q, Σ, Γ, δ , q0, Z0, F ) 或
以空栈方式接受语言的下推自动机 M = ( Q, Σ, Γ, δ , q0, Z0, Φ ),其中
Q: 状态的非空有穷集合;
Σ: 输入字母表;
Γ : 栈字母表; Z0: 起始栈底符号,( Z0 ∈ Γ); F: 终止状态集合, F ⊆ Q;
栈符号:A - 0;B - 1;Z0 -栈底符号
N(M4)= L ; 结束标志:( p, ε, ε ) 。
第七章 下推自动机
下推自动机( PDA ) PDA 两种接受语言方式的等价 确定的下推自动机(DPDA) PDA 与 CFG 等价
PDA 两种接受语言方式等价
定理 7 - 1:
对于任意终态方式接受语言 L 的 PDA M1,存在空栈方式接受 语言 L 的 PDA M2, 使得 N ( M2) = L(M1)。
L = { w2wR | w ∈ { 0,1}* }
下推自动机的状态转换图与下推自动机的化简

( o l eo no main h n o g Un v ri r u t r 。Ta ’n 2 1 1 ) C l g f fr t ,S a d n ie st Ag i l e e I o y c u i 7 0 8 a ( olg f n o ma inS a d n , ie s yo ce c n c n lg 。 n d o 6 5 0 C l eo f r t h n o g Unv ri f in ea d Te h oo y Qig a 2 6 1 ) e I o t S
关键词状态转换图标准下椎自动机化简行为等价状态等价statetransitiondiagramofpushdownautomataandsimplificationofpushdownautomatazhangjijunl?2wuzhehui2collegeofinformationshandonguniversityagriculturetaian2710181collegeofinformationshandonguniversityofscienceandtechnologyqingda02665102ahstranaccording10themethodoffiniteautomationdiagramdescriptionthedmgramdescriptionofnormalformofpushdownautomatathepadstatetransitiondiagramisdiscusseditisproofedthatpushdovmautomat1sequipollencewithnormalformofpushdownautomatatherulesthatnorlnaiformofpushdownautomataissimplifiedandthealgorithmofsimplificationaregivent11esimplificationofpushdownautomataisimplementeclkeywmdsstatetransitiondiagramnommlformofpushdownautomatasimplificationbehaviorequivaencestateequivalence1引言有限状态自动机是正规语言的识别系统而有限状态自动机可以用状态图直观的描述借助于状态图可以更直观明确容易地理解正规语言的性质及其语言的形成过程并进一步对有限自动机确定化及化简的认识和理解利用最简的确定有限自动机可以更简单容易分析对应的le规语言的性质
下推自动机的设计例题

下推自动机的设计例题【最新版】目录1.下推自动机的概念与应用2.设计例题的要求与目标3.设计例题的解决方案4.解决方案的实现与验证5.总结与展望正文1.下推自动机的概念与应用下推自动机(Pushdown Automaton)是一种用来描述和实现上下文无关文法(Context-Free Grammar,简称 CFG)的计算模型。
在编译原理中,下推自动机被广泛应用于语法分析、词法分析等领域。
下推自动机由一个状态集合、一个堆栈字母表和一个转移函数组成,能够识别并生成由堆栈字母表中的符号组成的字符串。
2.设计例题的要求与目标本设计例题的目标是帮助学生理解下推自动机的工作原理和应用方法,通过实际操作加深对相关概念的理解。
要求学生设计一个简单的下推自动机,用于识别一个给定的上下文无关文法,并能够生成该文法所表示的字符串。
3.设计例题的解决方案为了完成这个设计例题,我们需要按照以下步骤进行:(1)首先,选择一个简单的上下文无关文法,例如:a → bc 或 ab → c。
(2)根据所选文法,设计一个相应的下推自动机。
这包括确定状态集合、堆栈字母表和转移函数。
(3)编写一个程序来实现设计的下推自动机,使用堆栈数据结构模拟下推自动机的工作过程。
(4)使用所编写的程序,验证设计的下推自动机是否能够正确识别给定的文法并生成相应的字符串。
4.解决方案的实现与验证以文法 a → bc 为例,我们可以设计如下的下推自动机:状态集合:{q0, q1, q2, q3, q4, q5}堆栈字母表:{a, b, c}转移函数:δ(q0, a, a) = {(q1, b)},δ(q1, a, b) = {(q2, c)},δ(q2, a, c) = {(q3, ε)},δ(q3, b, ε) = {(q4, a)},δ(q4, a, a) = {(q5, ε)},δ(q5, ε, ε) = {(q0, a)}。
根据上述设计,我们可以编写一个简单的程序来实现该下推自动机。
编译原理笔记7 自上而下语法分析-下推自动机

1.引言
1)语法分析的地位:是编译程序的核心部分。
2)语法分析的任务:识别由词法分析得到的单词序列是否是给定文法的句子。
3)语法分析的理论基础:上下文无关文法和下推自动机。
4)语法分析的方式:(1)自上而下语法分析:反复使用不同产生式进行推导以谋求与输入符号串相匹配。
(2)自下而上语法分析:对输入符号串寻找不同产生式进行规约直到文法开始符号。
注:这里所说的输入符号指词法分析所识别的单词。
2.下推自动机:
1)下推自动机模型
2)下推自动机的形式定义:
注:a.由此定义的PDA肯定是不确定的PDA。
这给语法分析会带来不确定性。
我们在构造PDA M的算法的时候,要对PDA做一些限制。
b.PDA采用“|-”来表示PDA做了一步动作。
C.输入串能为PDA所接受,仅当输入串读完,下推栈为空;或者输入串读完,控制器到达某些终态。
D.有时,下推自动机还配置输出带,以记录推导或规约过程所有的产生式编号。
e.对于形如A->ω的产生式,有§(q,空串,A)=(q,ω),这称为推导。
第七章 下推自动机

3、匹配失败表示读入的字符号串不是语言的句子,此时,可让 M 停 机或进入 “陷阱” 状态。
L = { w2wR | w ∈ { 0,1}* }
解3:构造终态方式接受语言的 PDA。
M3 = ( { q0, q1, q2 , qf, qt }, { 0, 1, 2 }, { A, B, Z0 }, δ3 , q0, Z0,qf )
其中,状态定义: q0: 初始态; qf: 终态;qt: 陷阱态 q1: 记录状态; q2: 匹配状态 栈符号:A - 0;B - 1;Z0 – 初始栈底
PDA 两种接受语言方式等价
步骤 2:求证 L(M1)= N(M2) 首先证明:L(M1) ⊆ N(M2)。
同理可证: N(M1)⊆ L(M2)
设任意字符串 x ∈ L(M1), 根据 PDA 接受语言定义,有( q01,来自x , Z01 )∗ M1
( q, ε, γ ) 且 q ∈ F。
根据 M2 构造定义 (2) ,M2 可模拟 M1的所有移动操作,故有,
经过若干次(包含零次)移动,变成( p, x, β )。
( q, w, α )
+ M
( p, x, β ):表示 M 的 ID 从( q, w, α )出发,
经过至少一次移动,变成( p, x, β )。
这里, 1、字符串 x 是 w 的后缀; 2、意义清楚时,可省去 ID 推导符中的 M,分别记为:
下推自动机( PDA )
下推自动机缺省 为非确定的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
– (q1,ω1,β1)├Mn(qn,ωn,βn)
• ├M*是├M 的克林闭包
– (q,ω,α)├M*(p,x,β)
• ├M+是├M 的正闭包
– (q,ω,α)├M+(p,x,β)
7.1 基本定义
• 例 7-1 考虑接受语言L={ω2ωT | ω∈{0,1}*} 的PDA的设计。 • 解法1:首先是根据PDA的构造过程、工作 原理和GNF的最左派生来分析。 • 先设计产生L的CFG G1: G1:S2|0S0|1S1 • 再将此文法转化成GNF: G2:S2|0SA|1SB A 0 B1
7.1 基本定义
δ(q , ε , Z)={(p 1 , γ 1 ) , (p 2 , γ 2 ) , … , (pm,γm)}
• 空移动:表示M进行一次ε-移动(空移动), 即M在状态q,栈顶符号为Z时,无论输入 符号是什么,对于i=1,2,…,m,可以选 择地将状态变成pi,并将栈顶符号Z弹出, 将γi中的符号从右到左依次压入栈,读头不 移动。
第7章下推自动机
• 主要内容
– – – – PDA的基本概念。 PDA的构造举例。 用终态接受语言和用空栈接受语言的等价性。 PDA是CFL的接受器。
• 重点
– PDA的基本定义及其构造,PDA是CFL的等价描述。
• 难点
– 根据PDA构造CFG。
7.1 基本定义
• PDA应该含有三个基本结构
– 存放输入符号串的输入带。 – 存放文法符号的栈。 – 有穷状态控制器。
• PDA的动作
– 在有穷状态控制器的控制下根据它的当前状态、 栈顶符号、以及输入符号作出相应的动作,在 有的时候,不需要考虑输入符号。
7.1 基本定义
• PDA的物理模型
7.1 基本定义
比较: • PDA M= (Q,∑,Γ,δ,q0,Z0,F) • FA M= (Q,∑, δ,q0, F)
7.1 基本定义
7.1 基本定义
M3=({q0,q1,q2,qf,qt},{0,1,2},{ A,B, Z0},δ3,q0,Z0, {qf}) M4=({q0,q1,q2 },{0,1,2},{ A,B, Z0},δ4,q0,Z0,Φ)
7.1 基本定义
• 不追求让PDA同时用终止状态和空栈接受 同样的语言,还可以删除状态qf。这样我们 可以得到PDA M4 。 • M4=({q0,q1,q2 },{0,1,2},{ A,B, Z0},δ4,q0,Z0,Φ) δ4(q0,0,Z0)={(q1,A)} δ4(q0,1,Z0)={(q1,B)} 起始 δ4(q0,2,Z0)={(q2,ε)}
7.1 基本定义
δ4(q1,0,A)={(q1,AA)} δ4(q1,1,A)={(q1,BA)} δ4(q1,0,B)={(q1,AB)} δ4(q1,1,B)={(q1,BB)} δ4(q1,2,A)={(q2,A)} δ4(q1,2,B)={(q2,B)} δ4(q2,0,A)={(q2,ε)} δ4(q2,1,B)={(q2,ε)}
7.1 基本定义
• 句子0102010的最左派生和我们希望相应的PDA M的动作。 派生 S0SA M应该完成的动作 从q0启动,读入0,将S弹出栈,将SA压入栈,状态不变
01SBA
在状态q0,读入1,将S弹出栈,将SB压入栈,状态不变
010SABA 在状态q0,读入0,将S弹出栈,将SA压入栈,状态不变 0102ABA 在状态q0,读入2,将S弹出栈,将ε压入栈,状态不变 01020BA 010201A 0102010 在状态q0,读入0,将A弹出栈,将ε压入栈,状态不变 在状态q0,读入1,将B弹出栈,将ε压入栈,状态不变 在状态q0,读入0,将A弹出栈,将ε压入栈,状态不变
7.1 基本定义
如果(p,γ)∈δ(q,a,Z),a∈∑,则 (q,aω,Zβ)├M(p,ω,γβ) 表示M做一次非空移动,从ID(q,aω,Zβ) 变成ID(p,ω,γβ)。 如果(p,γ)∈δ(q,ε,Z),则 (q,ω,Zβ)├M(p,ω,γβ) 表示M做一次空移动,从ID(q,aω,Zβ)变成 ID(p,ω,γβ) 。
7.1 基本定义
• 符号使用约定 • 英文字母表较为前面的小写字母,如a,b, c,…,表示输入符号; • 英文字母表较为后面的小写字母,如x,y, z,…,表示由输入字符串; • 英文字母表的大写字母,表示栈符号; • 希腊字母α,β,γ,…,表示栈符号串。
7.1 基本定义
7.1 基本定义
• 即时描述(instantaneous description,ID) (q,ω,γ)∈(Q,∑*,Γ*)称为M的一个 即时描述。它表示M处于状态q,ω是当前 还未处理的输入字符串,而且M正注视着ω 的首字符,栈中的符号串为γ,γ的最左符 号为栈顶符号,最右符号为栈底的符号, 较左的符号在栈的较上面,较右的符号在 栈的较下面。
7.1 基本定义
• Z0——Z0∈Γ叫做开始符号(start symbol), 是 M 启动时候栈内惟一的一个符号。所以, 习惯地称其为栈底符号; • q0——q0∈Q,是M的开始状态(initial state), 也可叫做初始状态或者启动状态; • F——FQ,是M的终止状态(final state)集 合,简称为终态集。q∈F,q称为M的终 止状态,也可称为接受状态(accept state), 简称为终态。
7.1 基本定义
S ... ... 0 0 1 0 2...
S FSC A S B A Z q1->qf
7.1 基本定义
S 0 1 0 2 0 ......
S FSC A
B
A Z
q0->q1
7.1 基本定义
M1=({q0},{0,1,2},{S,A,B},δ1,q0, S,Φ)。其中: δ1(q0,0,S)={(q0,SA)} 起始 δ1(q0,1,S)={(q0,SB)} δ1(q0,2,S)={(q0,ε)} 转化 δ1(q0,0,A)={(q0,ε)} δ1(q0,1,B)={(q0,ε)} 匹配 此时有:N(M1)=L。 注意:从右向左依次压栈。
7.1 基本定义
• 两种移动 • δ(q,a,Z)={(p1,γ1),(p2,γ2),…,(pm, γm)} • 有输入的移动:表示M在状态q,栈顶符号 为Z时,读入字符a,对于i=1,2,…,m, 可以选择地将状态变成pi,并将栈顶符号Z 弹出,将γi中的符号从右到左依次压入栈, 然后将读头向右移动一个带方格而指向输 入字符串的下一个字符。
记录
状态转移 匹配
7.1 基本定义
思考:是否可以q2让作为终止状态。
7.1 基本定义
• 思考:构造一个PDA用来识{ω2ω|ω∈{0,1}*} • 事实上不可能的,首先在栈内变量的倒序是不可能的;其 次,该语言不是CFL具体证明过程在第八章。
• 确定的(deterministic)PDA (q,a,Z)∈Q×∑×Γ |δ(q,a,Z)|+|δ(q,ε,Z)|≤1 • PDA在每一个状态q和一个栈顶符号下的动作都是惟一的。 • 关键
7.1 基本定义
条件 当前状态 有输入 栈顶符号 输入符号 输入为空 当前状态 栈顶符号 响应 新状态 修改栈顶 右移读写头 新状态 修改栈顶
7.1 基本定义
图像模拟
a
b
c
S S S A A β
β Z Z
←
↑ ↑
FSC
p → q
7.1 基本定义
• M接受的语言 : – M用终态接受的语言 • L(M)={ω | (q0,ω,Z0)├*(p,ε,β)且 p∈F} – M用空栈接受的语言 • N(M) ={ω | (q0,ω,Z0)├*(p,ε,ε)}
– 对于(q,Z)∈Q×Γ,M此时如果有非空移动,就不能有空移动。 – 每一种情况下的移动都是惟一的。
7.1 基本定义
• 例 7-2 构造接受L={ωωT|ω∈{0,1}*}的PDA。 • 差异 δ(q0,0,A)={(q0,AA),(q1,ε)} 0是w中的0或者是wT的首字符0; δ(q0,1,B)={(q0,BB), (q1,ε)} 1是w中的1或者是wT的首字符1。 具体的状态转移函数δ参考课本P200
7.1 基本定义
7.1 基本定义
M2=({q0,q1},{0,1,2},{S,A,B,Z,Z0},δ2,q0,Z0,{q1}) δ2(q0,0,Z0)={(q0,SAZ)} δ2(q0,1,Z0)={(q0,SBZ)} 起始 δ2(q0,2,Z0)={(q1,ε)} δ2(q0,0,S)={(q0,SA)} 记录 δ2(q0,1,S)={(q0,SB)} δ2(q0,2,S)={(q0,ε)} δ2(q0,0,A)={(q0,ε)} 匹配 δ2(q0,1,B)={(q0,ε)} δ2(q0,ε,Z)={(q1,ε)} 终止 此时有:N(M2)=L(M2)=L。
思考:初始栈内为空,那么Z0是如何压栈的?
7.1 基本定义
思考:如果没有栈符号Z可不可以?
7.1 基本定义
• 解法2:根据句子的构成来分析问题。 • 注意到L={ω2ωT|ω∈{0,1}*},所以PDA M3 的工作可以分成两大阶段。
– 在读到字符2之前,为“记载”阶段:每读到 一个符号就在栈中做一次相应的记载。 – 在读到2以后,再读到字符时,就应该进入 “匹配”阶段:由于栈的“先进后出”特性正 好与wT相对应,所以,用栈顶符号逐一地与输 入字符匹配。
第7章下推自动机
通过提出的栈,再来构造下推自动机。
问题:为什么用栈,而不用队列或者 树等其他模型?
第7章下推自动机
• PDA描述CFL,所以它应该与CFG等价。 • PDA应该包含FA的各个元素,或者包含那 些可以取代FA的各个元素的功能的元素。 • PDA按照最左派生的派生顺序,处理处于 当前句型最左边的变量,因此,需要采用 栈作为其存储机构。 • 按照FA的“习惯”,PDA用终态接受语言。 • 模拟GNF的派生PDA用空栈接受语言。 怎 么理解?