形式语言与编译10 下推自动机PDA

2型文法的处理装置——下推自动机(PDA)

正则文法处理不了括号对,但是上下文无关文法可以表示出来。上下文无关文法是强于正则文法的。下推自动机的能力是强于有限自动机的

下推自动机相对于有限自动机 它就是多了一个 。其他都一样(输入串,状态)

状态机(PDA)在对输入串做读入操作的同时,栈顶能够同时地 做push/pop操作。

为了让每一步格式都一样,我们可以在刚开始和结束时也加上 \(read ~ \epsilon\) ,这样格式就对称了。

对于上面这个串,我们先不读入任何(或者理解为读入 \(\epsilon\)) ,栈中压入$ $ $ ,再读入0,栈中压入标记x,再读入0,栈中压入标记x……,再读入1,栈中弹出标记x,再读入1,栈中弹出标记x……;再不读入(或者理解为读入\(\epsilon\)) ,再弹出\(\$\) .结束。

这种装置优势是用来处理左右匹配成对的任务,比如括号任务,非常成功!!!

一般的,按照上面这种标记方法进行表示 [读入,弹出/压入]

数学定义 七元组\((Q,\Sigma,\Gamma,\delta,q_0,Z_0,F)\)

上面这个其实就是在五元组的基础上扩展出来的,多出来两个,分别是:

\(\Gamma\) : 栈字母表 上面中例子: \(x,\$\in\Gamma\)

\(Z_0 ~ \in ~ \Gamma\): 栈字母表的 开始符号 上面例子中: \(\$\)

\(\delta\) 变了,变比原来复杂了:现在不光要改变状态,还要改变栈。

注意到:这个迁移函数得到的是 集合。 \((q,a)\) 得到\(p\) ,\(X\) 得到 \(\gamma\)

这里画状态转移图的时候,只要画出读入字母表能够转移的,不用画出所有状态,到不了的集合标记 空集 就行了。(这是DFA才弄的)

根据串 画出PDA

瞬时描述

瞬时描述实际有点像给下推自动机拍个照

两次瞬态表示一次移动

输入串被识别过程

上面这个例子 表示输入串不能被识别!!(输入串必须被消耗完,而且达到终止状态才算成功)

这个失败例子是 到不了终止状态

通过栈的终结状态来定义:也就是当字符串处理完并且处于终结状态

从空栈角度定义PDA:字符串处理完并且栈为空,状态无所谓

空栈接受与终态接受的等价

posted @ 2020-06-28 18:11  _Sandman  阅读(1253)  评论(0编辑  收藏  举报