下推自动机与CFG化简规范
看清PDA↔CFG为何等价、化简为何不能跳步、范式为何必须存在
按 空格/→ 演示下一步
全部页面点击任意一页,跳回舞台从这页播放
下推自动机与CFG化简规范
看清PDA↔CFG为何等价、化简为何不能跳步、范式为何必须存在
确定下推自动机
上一页的NPDA可以'分身'——同一时刻同时尝试多种走法。但编译器解析代码每步只能看一个选项,不能一边读'if'一边按'for'。DPDA正是把PDA约束成单线程。
NPDA像同时派多个克隆人试路;DPDA只能选一条走到底
DPDA与其他语言的关系
上页我们已经看到,确定下推自动机在每个“状态、输入、栈顶”组合上至多有一种转移。现在把它放进语言谱系,看看它能识别什么、不能识别什么。
状态是分拣位置,栈是待办标签;每步只能沿一条确定路线走。
终态型DPDA和空栈型DPDA
上一页把DPDA放回了语言谱系,但这台机器'怎么算接受一个串'还没拆开。PDA其实有两条接受路径——就像搬家验收,既可以看'人有没有站在终点牌前',也可以看'房间有没有真正搬空'。
终态型:检查员站在「完成」牌下盖章;空栈型:检查房间是否真已搬空
消除无用符号
CFG化简四步走,今天迈第一步——把永远派不上用场的符号扫地出门。
零件再贵,如果装不进任何产品,就是仓库里的死库存
消除e产生式
化简文法的路上,无用符号清完之后,还剩一类更隐蔽的'隐身'规则——它本身不产生任何字符,却让推导链暗藏分支。这一步要把它们揪出来。
小料能不放,那含它的每道菜都补一份'不放它'的版本,穷尽所有组合
消除单一产生式
清掉ε产生式和无用符号后,CFG里还藏着一类只改名字、不产字符的产生式。它把推导链拉得很长,却没多走一步实质推导。这就是单一产生式。
A交B再交C才出活,不如让A直接继承C的所有产出能力
CFG的化简与Chomsky范式
经过消除无用符号、ε产生式、单一产生式这三步清洗,CFG 已经干净——但形状还不统一。Chomsky范式把它压成两种标准产生式,让语法形状整齐划一。
物品只能装进「单格箱」(A→a) 或「双格箱」(A→BC),超大件先拆格再装
本节要点
- ✓DCFL对补封闭,CFL对补不封闭
- ✓终态型DPDA能力严格强于空栈型
- ✓CFG化简顺序固定:先ε后单一再无用
- ✓Chomsky范式右部至多两个符号
课后思考
先独立思考,再对照参考答案——好问题值得多想一会。
参考答案DPDA无法兼顾'栈空却未达终态'与'到终态却栈非空'两类遗漏;NPDA凭借非确定性可并行试探两条接受路径,因此两种接受方式对NPDA等价。
参考答案会影响。推荐顺序(先消ε→再消单一→再消无用)每步不引入新问题;颠倒顺序可能在新化简后又冒出新的无用符号或ε产生式。
参考答案不能也不会。CNF只重写产生式形态,不触动推导关系。歧义性取决于是否存在两棵不同的语法树,CNF保留树结构,既不消除也不新增歧义。