10-PDA

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

下推自动机是在定义语言能力上与CFG等价的一种自动机,只有非确定PDA定义所有CFL,而确定PDA可对分析器建模,用于程序语言中。

考虑有处理栈能力的 -NFA,它的迁移由三个因素决定:当前状态( -NFA的状态);当前输入符号或 ;当前栈顶符号(一个符号)。

PDA的不确定性表现在迁移(移动)的去向可能有多个,在每一种选择中PDA都做如下动作:改变状态;并且,用0到多个符号的序列替换栈顶符号,也就是说,当序列中0个符号时栈做弹出栈顶操作,当时多个符号时先弹出栈顶那个符号然后按次序压入序列中的每个符号。

PDA形式定义
定义为一个七元组(Q, , , , q0, Z0, F),其中q0 Q, Z0 , F Q
符号习惯用法(符号使用约定):a,b,…, 当前输入符号含 ,栈符号…,X,Y,Z; …,w,x,y,z输入符号串; , ,…栈符号串。

迁移函数,有三个参数:一个状态属于G,一个输入符号属于 或为 ,一个栈符号属于 . (q, a, Z)是0到多个形如(p, )的动作组成的集合,其中p是一个状态属于Q, 是栈符号串属于 *.
PDA 的动作。

如果 (q, a, Z)的动作中含有(p, ),那么PDA在状态q,输入串前端符号a,Z在栈顶情况下所能做的是:改变状态为p;从输入串前端删去a(a可能为 则输入串不变);将栈顶的Z用 替代。

例:设计一个PDA接收语言{0n1n | n > 1}.
状态:q为开始状态,在状态q表示至今只见过0;p状态表示至少见过一个1并且仅当输入串是一些1时才继续;状态f为接受状态。

其中栈的作用是提供记忆功能,以判断0的个数与1的个数相等,并且知道什么时候结束。

栈符号:Z0是开始符号,并且也标记栈底,以使能知道已经计数过相同个数的0和1;X是标记符号,用于计数从输入串中已看过的0的个数。

迁移:
(q, 0, Z0)={(q,XZ0)}, (q, 0, X)={(q,XX)}都表示每从输入串读一个0则压入一个X到栈
(q, 1, X)={(p, )}当看到当前输入符号为1,转移到状态p并弹出栈顶X
(p, 1, X)={(p, )},遇到一个1做一次弹出栈顶X
(p, , Z0)={(f, Z0)} 表示在栈底并接受。

瞬时描述ID是一个三元组(q, w, ),其中,q是当前状态,w是剩余输入; 是栈的内容,左边为栈顶。

转移关系:说PDA的一步迁移(移动)使得ID I变成了ID J,写成I J,形式上若(p, β) δ(q, a, X) 则(q, aw, Xα) (p, w, αβ) 。

一般地,扩展 为 *表示0到多个移动。

例:PDA P=({q, p, f}, {0,1}, {X, Z0}, , q, Z0, {f})
(q, 0, Z0) = {(q, XZ0)}
(q, 0, X) = {(q, XX)}
(q, 1, X) = {(p, )}
(p, 1, X) = {(p, )}
(p, , Z0) = {(f, Z0)}
(q, 000111, Z0) (q, 00111, XZ0) (q, 0111, XXZ0) (q, 111, XXXZ0) (p, 11, XXZ0) (p, 1, XZ0) (p, ε, Z0) (f, ε, Z0)
(q, 000111, Z0) * (f, ε, Z0)到达接受状态,当前输入串为空(即原输入串已经消耗完),当前栈顶为栈底符号(开始符号)Z0。

(q, 0001111, Z0) (q, 001111, XZ0) (q, 01111, XXZ0) (q, 1111, XXXZ0) (p, 111, XXZ0) (p, 11, XZ0) (p, 1, Z0) (f, 1, Z0)最后一步使用了 的最后一条转移规则。

结论是0001111串不能被接受,因为输入没消耗完。

(q, 0000111, Z0) (q, 000111, XZ0) (q, 00111, XXZ0) (q, 0111, XXXZ0) (q, 111, XXXXZ0) (p, 11, XXXZ0) (p, 1, XXZ0) (p, ε, XZ0) 不能再有转移了。

结论是0000111不被接受,因为没有到达最终状态f. 注意此时栈也没有到达栈底符号。

有关ID的原理:
定理6.5若一个PDA有(q, x, A) * (p, y, B)那么对于任意串w *和 *, 也有(q, xw, A ) * (p, yw, B ).
定理6.6. 若一个PDA有(q, xw, A ) *(p, yw, B )那么对于任意串w *和 *, 也有(q, x, A) * (p, y, B).
另外,用扩展的 表示FA的迁移,该 未提到未读输入符号。

可以为PDA选一个类似符号,其中的FA状态用状态和栈的组合来替代。

类似地可以选带有ID的FA表示而丢掉栈部分。

二者有何区别呢?FA倾向于建模类似协议的东西,有无限长输入;而PDA建模分析器,处理固定长的程序。

FA的 ^(q, )={q}; ^(q, xa)= p ^(q, x) (p, a)
^的第二个参数表示处理过这串之后到达的那些状态,没有提到未读入的符号。

ID: (q, x, A)把其中的栈符号(第三个参数)去掉。

PDA的迁移图
形式地,如果(p, ) (q, a, X)那么对于任意w *和 *有(q, aw, X ) (p, w, )
图示的话,状态p到状态q的箭弧上的标记为a,X/ ,其中a是当前输入符号,X当前栈顶符号,伴随该状态迁移发生的动作是把栈顶X替换为 .
所以,迁移函数表示和状态图表示可以对应起来。

例2. 定义平衡括号语言的一个PDA,有以下情形:
(1)指定开始状态q0,其中射入q0的箭弧表示q0为开始状态且栈顶为Z0而当前输入串不变。

(2)增长栈的情形:遇到当前符号为左括号则进栈;
(3)退栈的情形:当前输入符号为右括号、栈顶为左括号,则匹配;
(4)由先前的退栈状态转为进栈状态:当前输入符号为左括号,栈顶不为左括号;
(5)到达接受状态:输入串已空且当前栈顶为栈底符号(开始符号)Z0
例2的另一种解法(大大简化)。

状态q0和q1可以合并在一起
指定开始状态q0,同前;
保持在开始状态:当前输入为左括号则进栈,或者属于匹配的情况
到达接受状态:同前。

PDA 的语言
通过接受状态决定一个PDA 所定义的语言。

给定PDA P ,那么P 定义的语言L(P)是满足下面条件的串w ,
w *, *, f F 有(q 0, w, Z 0) *
(f, , )
另一种决定同一PDA 定义的语言的途径是通过空栈决定。

给定PDA P ,那么P 定义的语言N(P)是满足下面条件的串w ,w *, q Q 有(q 0, w, Z 0) *
(q, , ) 两种定义方式的等价性。

定理6.11. 若L=L(P)那么存在一个PDA P ’有L=N(P ’), 即L(P) =N(P ’). 定理6.9. 若L=N(P)那么存在一个PDA P ”有L=L(P ”), 即N(P) =L(P ”). 证明:根据P 构造P ’使得L(P)=N(P ’)
P ’模拟P , P 接受”被模拟为“P ’栈变空”。

根据前面的讨论,P 接受隐含着到达结束状态
并且输入串已空,使用ID 记号表示,就是迁移到ID :(f, , )。

然而在迁移过程中,有可能出现ID :(q, x, Z 0),q F ,因此构造的P ’必须知道这种意外变空栈的情形,所以采用一个专门的栈底标记符号以俘获P 的栈虽变空但不是P 的接收状态的情况。

构造的P ’含有P 的所有状态、符号、以及迁移,此外还有: (1)栈符号X 0用于守住栈底以防出现意外空栈情况;
(2)增加迁移从新的开始符号s 迁移到q 0, 即有 (s, , X 0)={(q 0, Z 0X 0)}.
(3)添加“擦除”状态e 使得从P 的任意接受状态对于任意的栈顶符号都有迁移到该状态,即 f F, X , (f, , X)= (e, , X)={(e, )}. 例:平衡括号自动机的语言。

(, Z 0/(Z 0 (, (/(( ), (/
(, Z 0/(Z 0 (, (/(( ), (/ , Z 0/ , X 0/ , (/
(, Z 0/(Z 0 (, (/(( ), (/ , Z 0/
证明:根据P 构造P ”使得N(P)=L(P ”)
P ”模拟P ,P ”有专门的栈底标记符号来俘获P 空栈的情形。

构造过程:P ”有与P 一样的状态、符号和迁移,除此之外还有: 栈符号X0用于守住栈底;
新的开始符号s 迁移到q 0, 即有 (s, , X 0)={(q 0, Z 0X 0)}. 新的结束状态f ,有 q Q, (q, , X 0)={(f, )}. 例:平衡括号自动机的语言。

确定PDA ,任意状态q ,当前输入符号a 和当前栈顶符号X ,最多有一个转移选择;另外一定不会有在使用 和使用实际输入符号之间进行选则的情况出现。

也就是说对于当前状态q
(, Z
/(Z 0 (, (/(( ), (/ , Z 0/
(, Z 0/(Z 0 (, (/(( ), (/ , Z 0/
(, Z 0/(Z 0 (, (/(( ), (/ , Z 0/ , X 0/ , (/
和当前输入符号a,若有 (q, a, X)不空那么 (q, , X)一定为空;只有当所有输入符号a, (q, a, X)都为空时才允许 (q, , X)为非空。

例:回文PDA为什么是非确定?红色标记的迁移与左边黑色的迁移存在用当前输入符号和用 均可的情况。

对应的确定PDA必须在中间加一个特殊符号才行。

相关文档
最新文档