“先用Chomsky 范式保留同一语言及受控空字例外。设范式文法有 $m\ge1$ 个非终结符,取 $p=2^m$。把非空字的一棵完整语法树中终结符产生式的单边收缩,得到以非终结符节点为骨架的…”
形式陈述
Chomsky 范式(CNF)文法是上下文无关文法的语法特例:除下述受控空字例外,每条产生式形如
其中
每个 CFG 都可有效转换为生成同一语言(按上述空字约定)的 CNF 文法。转换通常依次引入新开始符号、消除 ε 产生式与单位产生式、删除无用符号、把长右侧二叉化并把混合右侧中的终结符替换为专用非终结符。
直觉
CNF 把任意上下文无关推导规整为两种动作:一个非终结符分成两个子结构,或直接产生一个终结符。将产生终结符的单边收缩后,长度为
例子与边界
考虑文法
接着消除单位规则。
现在每条规则都符合 CNF:直接用
空字由
CNF 文法并不唯一,转换也可能显著增大表示。它保证生成语言不变,语法树形状则会随着辅助非终结符改变;消除歧义需要另外分析,不能由范式转换直接得到。
推论与应用
CNF 是 CYK 算法的输入形式,使“非终结符
参考资料
- John E. Hopcroft, Rajeev Motwani, and Jeffrey D. Ullman, Introduction to Automata Theory, Languages, and Computation, 3rd ed., Pearson, 2006,§7.1 “Normal Forms for Context-Free Grammars”。出版社目录。
- Michael Sipser, Introduction to the Theory of Computation, 3rd ed., Cengage, 2013,§2.1 “Context-Free Grammars” 中的 “Chomsky Normal Form”:等价转换与空字约定。