下推自动机接受

有两种不同的方法来定义 PDA 可接受性。

最终状态可接受性

在最终状态可接受性中,当 PDA 在读取整个字符串后处于最终状态时,PDA 会接受字符串。从起始状态开始,我们可以进行移动,最终以任何堆栈值进入最终状态。只要我们最终处于最终状态,堆栈值就无关紧要。

对于 PDA (Q, ∑, S, δ, q0, I, F),最终状态集 F 接受的语言是 −

L(PDA) = {w | (q0, w, I) ⊢* (q, ε, x), q ∈ F

对于任何输入堆栈字符串 x

空堆栈可接受性

此处,当 PDA 在读取整个字符串后清空其堆栈时,PDA 接受字符串。

对于 PDA (Q, ∑, S, δ, q0, I, F),空堆栈接受的语言是 −

L(PDA) = {w | (q0, w, I) ⊢* (q, ε, ε), q ∈ Q

示例

构造一个接受 L = {0n 1n | n ≥ 的 PDA 0

解决方案

PDA for L

此语言接受 L = {ε, 01, 0011, 000111, .............................

在此示例中,'a''b' 的数量必须相同。

  • 最初,我们将特殊符号 '$' 放入空堆栈中。

  • 然后在状态 q2 下,如果我们遇到输入 0 且顶部为 Null,我们将 0 推送到堆栈中。这可能会迭代。如果我们遇到输入 1 并且顶部为 0,我们将弹出这个 0。

  • 然后在状态 q3,如果我们遇到输入 1 并且顶部为 0,我们将弹出这个 0。这也可能迭代。如果我们遇到输入 1 并且顶部为 0,我们将弹出顶部元素。

  • 如果在堆栈顶部遇到特殊符号"$",则将其弹出并最终进入接受状态 q4

示例

构造一个接受 L = { wwR | 的 PDA w = (a+b)*

解决方案

PDA for L1

最初,我们将特殊符号"$"放入空堆栈。在状态 q2 下,正在读取 w。在状态 q3 下,当每个 0 或 1 与输入匹配时,都会弹出。如果给出任何其他输入,PDA 将进入死状态。当我们到达该特殊符号"$"时,我们进入接受状态 q4