“编译原理中,语法规格被转换为带栈解析器;在理论上,该等价支撑 CFL 的成员判定、闭包分析和与确定 PDA子类的比较。”
形式陈述
确定性下推自动机(DPDA)是转移选择唯一的下推自动机。形式上,对每个状态
DPDA 通常以读完输入并进入终态定义接受,并常加入右端标记以明确输入结束。DPDA 识别的确定性上下文无关语言严格包含正则语言、严格小于全部上下文无关语言。与 NPDA 不同,DPDA 的空栈接受与终态接受不应未经条件直接互换。
直觉
DPDA 的每一步都由当前有限状态、下一输入符号和栈顶唯一决定,因此可以直接作为无回溯解析器运行。限制 ε 转移冲突很关键:即使每张转移表单独看像函数,只要机器可选择先做 ε 动作还是先读字符,仍然存在非确定性。确定性牺牲一部分语言表达力,换来唯一运行、补集闭包和更可预测的在线处理。输入结束标记常用于让机器知道“现在可以作最终决定”,否则前缀关系会干扰空栈式接受。
例子与边界
语言 a 唯一压栈,看到第一个 b 唯一切换到弹栈阶段,此后禁止再读 a。为看清终止条件,可在输入末尾附加不属于原字母表的标记 aabb 实际读作 aabb 后接
带不同类型括号的正确嵌套也可确定识别,因为每个右括号应匹配哪个左括号由栈顶唯一给出。
偶数长度回文语言 01#10,先把 0,1 依次压栈,读到 # 后固定切换阶段,再用 1,0 依次弹栈。
接受约定也有实质影响。在无结束标记、空栈后不能再转移的模型中,DPDA 空栈接受的语言必须无真前缀关系:若已接受
推论与应用
DPDA 是确定性解析的自动机基础。NULLABLE、FIRST与FOLLOW分别计算可空性、开头终结符和非终结符之后可能出现的符号,为LL(1)提供预测信息;LL(1)用一个向前看token选择最左展开。
LR项目与状态栈则在右部出现后归约;SLR用全局FOLLOW限制归约,LR(1)进一步保存局部右上下文。这些构造展示了实际文法怎样得到解析器。DPDA 与一般 PDA的差距说明“文法是上下文无关的”不保证存在无回溯确定解析器。
确定性上下文无关语言具有补集闭包等良好性质,但构造补自动机前要处理未读完输入就卡住及无限
不过 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. 5–7。
- Michael Sipser, Introduction to the Theory of Computation, 3rd ed., Cengage, 2013,Ch. 2。
- OpenDSA Project Contributors, Formal Languages With Visualizations: Deterministic Pushdown Automata, 2019,§7.3.1,确定性两项条件与语言分离。