有限自动机理论05章下推自动机(简化)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

接收语言L={(ab)n|n≥0}
< q1,a,Z0,q2,AZ0> < q2,b,A,q1,ε> < q1,ε,Z0,q1,ε > 规则是不确定的。
n 接收语言L={(ab) |n>0}
< q0,a,Z0,q0,AZ0> < q0,b,A,q1,ε> < q1,a,Z0,q2,AZ0> < q2,b,A,q1,ε> < q1,ε,Z0,q1,ε> 规则是不确定的。
NFA:δ(q,x)= {q1,q2,… qn} 单态的PDA: <x,q, q1 > <x,q, q2 > … <x,q, qn >
NFA:
若 q ∈δ*(q0,w) 单态的PDA: 有 (*,w,q0)=>*(*,ε,q)
NFA:
若q∈F 则 单态的PDA: <ε,q,ε>
q0∈Q是开始状态 Z0∈Г是栈底符号 FQ是接收状态集合
δ:Q×(∑∪{ε})×Г→Q×Г* 对于确定的PDA,有 δ(q,x,D)=( q′,V) 对于不确定的PDA,有 ( q′,V) ∈δ(q,x,D)
一般
使用 <q,x,D,q′,V> 表示δ函数
定义5-2 PDA格局(或瞬间描述ID) 格局代表某个时刻PDA的情况 PDA的格局是一个三元式 (q,w,ζ)
不确定 PDA 对于某一格局可 能会有不同的下一格局。
+ 用=> 代表格局的多次变换
* 用=> 代表格局的任意次变换
5.1.3 PDA接收语言的两种方式
定义 5-3 PAD 以空栈方式接收的语 言为L(M),且 L(M)={w|(q0,w,Z0) =>*(q , ε , ε) q∈Q}
接收格局与接收状态无关 只要当串w扫描结束,而栈为空 则串w被PDA以空栈方式所接收。
δ:Q×(∑∪{ε})×Г+→Q×Г* <q,x, B1B2… Bk,q′,C1C2… Cn> 对于确定的PDA,有 δ(q,x,B1B2… Bk )=( q′, C1C2… Cn) 对于不确定的PDA,有 (q′, C1C2… Cn) ∈δ(q,x, B1B2… Bk )
一般的PDA,栈顶只是一个符号 广义PDA的栈顶可以为多个符号。
规则< ε,Z0,ε> 表示将w扫描结束后,将栈置成空 也表示该PDA可以接收空串ε
思考:
如何接收语言 L={w|w∈(a,b)+,且a和b个数相等}?
n n 例:语言L={a b |n≥0}
<a,Z0,AZ0> <a,A,AA> <b,A,ε> <ε,Z0,ε>
存在问题
还可以接收语言 {(ab)n|n≥0},或 {ambm(ab)n|m≥0,n≥0} 等语言。
注意 PDA在两种情况下停机: 串扫描结束 没有对应的规则
串扫描结束
栈如果为空 就接收扫描过的串。
对于非正式的算法, 用形式化的方式进行描述:
特殊的符号Z0表示栈底 初始化时先压入栈
<x,D,V>规则 (指令)
若x是w的当前符号 D是栈顶符号 则用符号串V代替D 即将D弹出栈,而将串V压入栈
不确定的PDA (情况1)
①<q,x,A,q1,A1A2… Ak> 则 (q,xw,Aζ)=> (q1,w,A1A2… Akζ) ②<q,ε,A,q2,B1B 2…Bj > 则(q,xw,Aζ)=> (q2,xw, B1B 2…Bjζ)
不确定的PDA (情况2)
①<q,x,A,q1,A1A2… Ak> 则 (q,xw,Aζ)=> (q1,w,A1A2… Akζ) ②<q,x,A,q2,B1B 2…Bj> 则 (q,xw,Aζ)=> (q2,w, B1B 2…Bjζ)
定义5-4
PAD以终态方式接收的语言为F(M), 且 F(M)={w|(q0 , w,Z0) =>*(q′ , ε , ζ) q′∈F , ζ∈Г*}
接收格局与栈是否为空无关 只要当串 w 扫描结束,而 PDA 处于 某个接收状态 则串w被PDA以终态方式所接收。
定理5-1
语言L被PDA以终态方式所接收 当且仅当 它被PDA以空栈方式所接收。 即终态接收与空栈接收方式等价。
对于文法G S=>*w1A=>w1bB=>*w1bw2=w 对于单态PDA (*,w1bw2,S)=>*(*,bw2,A) =>(*,w2,B)=>*(*, ε, ε)
用下列的规则来描述PDA
< read,a,Z,read,AZ> < read,b,Z,read,BZ> < read,c,Z,match,Z> < match,a,A, match,ε> < match,b,B, match,ε> < match,ε,Z0,match,ε>
若串w是该语言的合法的串 当且仅当 w扫描结束后,栈为空。
第五章 下推自动机 PDA
FA识别正则语言(右线性语言)
PDA识别上下文无关语言
FA只能处理正则语言
正则文法生成无穷语言是由于
A->wA
不需要记录w的个数
无关文法生成无穷语言 A->αAβ 需要记录α和β之间的对应关系
无法用FA的有穷个状态来表示。
为FA扩充一个无限容量的栈
用栈的内容和 FA的状态结合起来 就可以表示无限存储。 这种模型就是下推自动机
因此
NFA: δ*(q0,w)∩F≠ф 单态的PDA: (*,w,q0)=>*(*,ε,ε) 即 L(NFA)=L(PDA)
右线性文法
G=(∑,V,S,P) 也可以对应一个单态的PDA,
产生式
A→bB A→b
PDA的规则 <b,A,B > <b,A,ε >
将文法的开始符号S
当作是单态PDA的栈底符号,则
定理5-4
若语言L能由广义PDA所接收 则L能够由一般的PDA所接收。
证明思路
广义的PDA的一条规则 就是 一般PDA的多条规则的组合
证明:
对于广义的PDA的任意一条规则
<q,x, B1B2… Bk,q′,C1C2… Cn> 增加状态r1,r2,…,rk-1,
< q,x,B1B2… Bk,q′,C1C2… Cn> 改造为: <q , x, B1,r1,ε > < r1, ε,B2,r2,ε > … < rk-1,ε,Bk,q′,C1C2… Cn >
5.1.2 不确定的下推自动机
例5-3
T * 语言L={ww |w∈(a,b) }
没有中心点字符 在扫描过程中,就没有确定的位 置进行状态的变换 具有不确定性。
使用规则 〈read,ε,Z,match,Z> 来代替 〈read, c ,Z,match,Z> 即在 read 状态时,可随时改变为 match 状态(栈的内容和扫描符号不变)
< read,a,Z,read,AZ> < read,b,Z,read,BZ> < read,ε,Z,match,Z> < match,a,A, match,ε> < match,b,B, match,ε> < match,ε,Z0,match,ε>
该PDA是不确定的 处于状态read状态时 随时都可以进行选择: 继续扫描,或状态变换为match
得到一般的PDA′
且L=L(PDA′)。
定义5-6单态PDA
仅有一个状态的PDA
规则简化为 <x,D,V>
(等价性)问题
一个NFA是否可以转换为
一个单态PDA?
思路
NFA=(Q,∑ , δ,q0,F) 将NFA的状态当作PDA的栈内符号 构造单态的PDA =({*},∑,Q,δ′,*,q0,{*})
扫描到字母c时 PDA的状态转为match 开始处理整个串的后半部分,将栈 中的内容出栈。
规则<q,x,D,q′,V>
若PDA处于状态q w的当前字母是x 当前栈顶符号为D 则自动机的状态改变为q′ 并用符号串V代替D
(在本例中)用Z代表任意的栈顶符号 规则<read,a,Z,read,AZ> 可以表示以下3条规则: < read,a,Z0,read,AZ0> < read,a,A,read,AA> < read,a,B,read,AB>
具体
若x是w的当前符号,栈顶符号为D <x,D,ε> 表示将D弹出栈 <x,D,AD> 表示将A压入栈,成为新的栈顶
一般地
若x是 w的当前符号,栈顶符号为 D <x,D,A1A2… Ak>表示: 将D弹出栈 将串A1A2… Ak压入栈(A1为新栈顶)
例5-1 算法的形式化描述 <a,Z0,AZ0> < b,Z0,BZ0> < a,A,AA> < b,B,BB> < a,B,ε> < b,A,ε> < ε,Z0,ε>
Hale Waihona Puke 明:略5.1.4广义PDA和单态PDA
定义5-5 广义的PDA是七元式 PDA=(Q,∑,Г,δ,q0,Z0,F) (除了δ外,其余同一般的PDA) 其中
Q是一个有限状态的集合 ∑是输入串的字母集合 Г是栈内符号集合 q0∈Q是开始状态 Z0∈Г是初始的栈底符号 FQ是接收状态(终止状态)集合
其中,q为状态
w=x1x2…xn 还没有被扫描到的串(将扫描x1) ζ=Z1Z2…Zm 栈的内容(Z1在栈顶,Zm在栈底)
PDA
初始格局为 (q0,w,Z0) 接收格局为 (q,ε,ε) 其中: q∈Q (与接收状态无关)
格局的转换是 由于状态转换函数的作用引起的
确定的PDA
<q,x,A,q1,A1A2… Ak> 引起的格局转换为: (q,xw,Aζ)=> (q1,w,A1A2… Akζ)
串abbcbba的处理过程
B B A Z0
符号栈
read
=>
match
扫描到字母c
栈内的内容(从栈顶到栈底)是扫描 过的串的逆 与未扫描过的串的顺序相同 此时,不作出栈和入栈操作, 仅仅把 PDA 的状态从 read 改变到 match 。
n n 接收语言L={a b |n>0}
< q0,a,Z0,q0,AZ0> < q0,a,A,q0,AA> < q0,b,A,q1,ε> < q1,b,A,q1,ε> < q1,ε,Z0,q1,ε> 规则是确定的
Push-Down Automaton--PDA
PDA 作为形式系统最早于 1961 年 出现在 Oettinger 的论文中。 与上下文无关文法的等价性由 Chomsky于1962年发现。
与FA比较
PDA具有一个栈存储器 有两个操作: 入栈---将内容压入栈中 出栈---将栈顶元素移出
下推自动机物理模型
一个串w能够由PDA所识别: 仅当串是wwT的形式 且PDA状态在中心点进行了变换
对于不确定的PDA和串w 若存在至少一个扫描过程 使得当串w扫描结束时,栈为空 则称串w能够被PDA所识别。
不确定的PDA的两种情况 ①
<q,x,A,q1,V1> <q,ε,A,q2,V2> ②
<q,x,A,q1,V1> <q,x,A,q2,V2>
思考:如何接收语言
n n L={a b |n>0}
L={anbn|n≥0} L={(ab)n|n>0} L={(ab)n|n≥0}
例5-2 识别语言
T * L={wcw |w∈(a,b) }
思想:
将w的各个字符压入栈后 栈中的内容从栈顶到栈底的顺序 刚好是wT的顺序
为了区别压栈和出栈动作 增加两个状态----read 和match PDA处于read状态时, 处理整个串的前半部分,将对应 的符号压入栈
部分希腊字母及读音
Α α alpha Γ γ gamma Δ ε epsilon Ω ω omega Β β beta Γ δ delta ∑ ζ sigma
定义5-1
下推自动机PDA是一个七元式: M=(Q,∑,Г,δ,q0,Z0,F) Q是一个有限状态的集合 ∑是输入串的字母集合 Г是栈内符号集合
a1 a2 a3 … aj … an an+1 …
存储带
FSC
栈存储器

栈存储器 存放不同于字母的符号 只能对栈顶元素进行操作。
下推自动机动作
根据 FSC当前的状态 输入带上的当前字符 栈顶符号 状态改变 入栈或出栈操作 读头向右移动一个单元
进行
5.1.1 确定的下推自动机
例5-1 利用桟 识别语言 L={w|w∈(a,b)*,且a、b个数相等}
初始
栈为空 从左到右逐个扫描串w∈(a,b)*
入栈
若栈为空,当前符号是a,则A入栈 若栈为空,当前符号是b,则B入栈 若栈顶为A,当前符号是a,则A入栈 若栈顶为B,当前符号是b,则B入栈
出栈
若栈顶为A,当前符号是b,则A出栈 若栈顶为B,当前符号是a,则B出栈
若串w有相同个数的a和b 当且仅当 w扫描结束后,栈为空。
相关文档
最新文档