“编译原理中,语法规格被转换为带栈解析器;在理论上,该等价支撑 CFL 的成员判定、闭包分析和与确定 PDA子类的比较。”
形式陈述 ​
确定性下推自动机(DPDA)是转移选择唯一的下推自动机。形式上,对每个状态
DPDA 通常以读完输入并进入终态定义接受,并常加入右端标记以明确输入结束。DPDA 识别的确定性上下文无关语言严格包含正则语言、严格小于全部上下文无关语言。与 NPDA 不同,DPDA 的空栈接受与终态接受不应未经条件直接互换。
直觉
DPDA 的每一步都由当前有限状态、下一输入符号和栈顶唯一决定,因此可以直接作为无回溯解析器运行。限制 ε 转移冲突很关键:即使每张转移表单独看像函数,只要机器可选择先做 ε 动作还是先读字符,仍然存在非确定性。确定性牺牲一部分语言表达力,换来唯一运行、补集闭包和更可预测的在线处理。输入结束标记常用于让机器知道“现在可以作最终决定”,否则前缀关系会干扰空栈式接受。
例子与边界
语言 a 唯一压栈,看到第一个 b 唯一切换到弹栈阶段,此后禁止再读 a。带不同类型括号的正确嵌套也可确定识别,因为每个右括号应匹配哪个左括号由栈顶唯一给出。
偶数长度回文语言
推论与应用
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。