Skip to content

确定性下推自动机

Deterministic pushdown automaton · DPDA

每个配置至多有一个可用转移且读入与 ε 转移不冲突的下推自动机。

条目类型
模型

形式陈述

确定性下推自动机(DPDA)是转移选择唯一的下推自动机。形式上,对每个状态 q、栈顶符号 X 与输入符号 a,集合 δ(q,a,X)δ(q,ε,X) 各至多含一个动作;并且只要 δ(q,ε,X) 非空,同一 (q,X) 上的所有读入转移 δ(q,a,X) 都必须为空。否则机器会在“立即走 ε 边”与“读取下一个字符”之间产生非确定选择。

DPDA 通常以读完输入并进入终态定义接受,并常加入右端标记以明确输入结束。DPDA 识别的确定性上下文无关语言严格包含正则语言、严格小于全部上下文无关语言。与 NPDA 不同,DPDA 的空栈接受与终态接受不应未经条件直接互换。

直觉

DPDA 的每一步都由当前有限状态、下一输入符号和栈顶唯一决定,因此可以直接作为无回溯解析器运行。限制 ε 转移冲突很关键:即使每张转移表单独看像函数,只要机器可选择先做 ε 动作还是先读字符,仍然存在非确定性。确定性牺牲一部分语言表达力,换来唯一运行、补集闭包和更可预测的在线处理。输入结束标记常用于让机器知道“现在可以作最终决定”,否则前缀关系会干扰空栈式接受。

例子与边界

语言 {anbn:n0} 可由 DPDA 识别:读 a 唯一压栈,看到第一个 b 唯一切换到弹栈阶段,此后禁止再读 a。带不同类型括号的正确嵌套也可确定识别,因为每个右括号应匹配哪个左括号由栈顶唯一给出。

偶数长度回文语言 {wwR:w{0,1}} 是上下文无关的,但没有中点标记时机器无法确定何时从压栈切换到弹栈,因此不是确定性上下文无关语言。加入分隔符的 {w#wR} 则可确定识别,分隔符消除了猜测。

推论与应用

DPDA 是 LR、LL 等确定性解析方法的自动机基础,适合编程语言语法的单遍解析。它与一般 PDA的差距说明“文法是上下文无关的”不保证存在无回溯确定解析器。

确定性上下文无关语言具有补集闭包等良好性质,且每个 DCFL 都有无歧义文法;歧义与确定解析之间因此存在紧密联系。

不过 DCFL 对并与交一般都不封闭;只能与正则语言求交后仍保证留在 DCFL。不能把 DFA 的全部布尔闭包性质直接搬到 DPDA。

参考资料
  • John E. Hopcroft, Rajeev Motwani, and Jeffrey D. Ullman, Introduction to Automata Theory, Languages, and Computation, 3rd ed., Pearson, 2006,Chs. 1–9。
  • Michael Sipser, Introduction to the Theory of Computation, 3rd ed., Cengage, 2013,Chs. 0–10。
关系图谱1 个相邻概念 · 1 类关系

拖动节点调整位置。

显示关系

显示:分类

分类位置

上位 / 更一般

下位 / 直接特例

暂未标注直接特例。