“CYK依靠CNF二分区间,Earley依靠带起点的部分右部;二者都能处理歧义,但都不能在多项式时间内显式打印可能指数多的全部解析树。压缩森林与逐棵输出的成本必须分开。”
形式陈述
对 Chomsky 范式文法和长度
直觉
CYK 把“某个非终结符能否生成这一整段子串”拆成所有更短区间的组合。Chomsky 标准形把产生式统一为
例子与边界
先看最小合并:对 ab,有
再用一个能生成非空偶数长度回文的 CNF 文法,完整分析字 abba:
所有有效表项如下,列按起点
| 长度 |
||||
|---|---|---|---|---|
| 1 | ||||
| 2 | — | |||
| 3 | — | — | ||
| 4 | — | — | — |
长度二只有 bb 能由 bba 在切分 bb|a 处用 abba 切成 a|bba,用
空串按开始规则单独判断。直接拿含单位规则、
推论与应用
CYK 是 动态规划 在形式语言中的典型实例,也是 CFG 成员资格的标准多项式算法,证明了固定 上下文无关文法 的成员问题可在多项式时间解决。它以 Chomsky 标准形 为接口,可扩展为计数解析、概率文法的 Viterbi/inside 算法、求最高概率解析、构造共享解析森林,以及基于半环的通用解析框架。
Earley解析不先转CNF,而以产生式点位置、起点和当前列保存部分推导;该页的左递归加法例与同列空规则闭包,可用来比较两种动态规划怎样避免重复工作。若需要按LR表保留冲突分支,GLR还要区分共享状态栈与保存语法树的打包森林。
参考资料
- 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。