跳转至

下推自动机

英语: Pushdown automata, PDA.

下推自动机 (以下简称 PDA) 的工作方式与 NFA 相似, 但支持对栈的压栈(push)和出栈(pop)操作. 栈是 PDA 的内存, 无限大.

因为仅支持压栈和出栈操作, 读取栈顶部元素就意味着需要移除该元素, 并不存在仅读取栈头部元素的操作.

正式定义

一个 PDA 是一个六元组 \((Q, \Sigma, \Gamma, \delta, q_0, F)\), 其中:

  • \(Q\) 是状态的有限集.
  • \(\Sigma\) 是由字母表符号组成的有限集.
  • \(\delta: Q \times \Sigma_\varepsilon \times \Gamma_\varepsilon \rightarrow \mathcal{P}(Q \times \Gamma_\varepsilon)\) 是转移函数. \(\delta(q, a, c) = \{(r_1, d), (r_2, e)\}\)
  • \(q_0 \in Q\) 是初始状态.
  • \(F \subseteq Q\) 是接受状态的集合.

其中 \(\Sigma_\varepsilon\)\(\Gamma_\varepsilon\) 的脚标 \(\varepsilon\) 表示该集合包含空字符串.

第一个 \(\Gamma_\varepsilon\) 表示弹出堆栈顶部的元素, 如果为 \(\varepsilon\) 则表示不执行出栈操作. 第二个 \(\Gamma_\varepsilon\) 表示要压入堆栈顶部的元素, 如果为 \(\varepsilon\) 则表示不执行压栈操作.

评论