下推自动机:原理、转换与应用
1. 引言
在讨论正则表达式时,我们常常提及一种“神奇函数”,用于检查任意字符串是否与给定的正则表达式匹配。后来发现,有限状态机能够简单地实现这个“神奇函数”。正则文法虽本身不包含构建该函数的算法,但可转换为有限自动机。然而,上下文无关文法的情况更为复杂,有限自动机的能力不足以识别非正则语言,如下文无关语言。那么,什么样的设备具备足够的识别能力呢?这就引出了下推自动机。
2. 下推自动机的组织
2.1 一般要点
下推自动机实际上是对普通有限状态机的“改进”,主要是在机器中增加了栈内存。栈是用于存储(通常是同类)数据的结构,有两个基本操作:
- 入栈(push):将数据对象放置在栈顶。
- 出栈(pop):从栈顶取出数据对象。
栈被认为是无限的,因此不会出现溢出问题。但如果在机器运行过程中尝试从空栈中取出数据,这类似于应用不存在的规则,通常会导致输入字符串被拒绝。
2.2 与普通有限状态机的区别
下推自动机在很多方面与普通有限状态机相似,但也有以下显著区别:
| 比较项 | 普通有限状态机 | 下推自动机 |
| ---- | ---- | ---- |
| 栈 | 无 | 有,初始为空,可存储“栈符号集”中的元素 |
| 转移规则 | 匹配 (状态, 符号) 对到新状态 | 匹配 (状态, 符号, 栈) 三元组到 (状态’, 栈’) 对,允许不读取下一个符号的转移(ε - 转移) |
| 字符串接受标准 | 以有利状态结束工作即可 | 除了以有利状态结束工作,栈还需为空(也可仅按有利状态或仅
超级会员免费看
订阅专栏 解锁全文
24

被折叠的 条评论
为什么被折叠?



