Skip to content

定义Definition

Chomsky 范式

施工中 · 内容逐步修订

Chomsky normal form · CNF for grammars

除空字特殊规则外,每条产生式只形如 A→BC 或 A→a 的上下文无关文法标准形。

形式陈述 ​

Chomsky 范式(CNF)文法是上下文无关文法的语法特例:除下述受控空字例外,每条产生式形如

A→BC或A→a,

其中 A,B,C 是非终结符、a 是终结符。若语言包含空字,可额外允许新开始符号 S0→ε,并要求 S0 不出现在任何产生式右侧。

每个 CFG 都可有效转换为生成同一语言(按上述空字约定)的 CNF 文法。转换通常依次引入新开始符号、消除 ε 产生式与单位产生式、删除无用符号、把长右侧二叉化并把混合右侧中的终结符替换为专用非终结符。

直觉

CNF 把任意上下文无关推导规整为两种动作:一个非终结符分成两个子结构,或直接产生一个终结符。将产生终结符的单边收缩后,长度为 n 的非空字的推导树便成为有 n 片叶子的严格二叉树,内部结构可按输入区间动态规划。统一的规则形状方便计数与归纳,代价是增加一些辅助非终结符。

例子与边界

考虑文法 S→AB、A→aA∣ε、B→b,其语言是 a∗b。先加新开始规则 S0→S。只有 A 可推出空字,因此删除 A→ε 时,要在每个出现 A 的右部补上省略它的选择:S→AB∣B、A→aA∣a、B→b,并保留 S0→S。

接着消除单位规则。S 可沿单位规则到达 B,S0 可到达 S,B,所以把这些目标的非单位规则复制过来,得到 S0→AB∣b、S→AB∣b、A→aA∣a、B→b。此时 S 从新开始符号不可达,可以删除。最后引入 Ta→a,把混合右部 aA 改为 TaA,结果为

S0→AB∣b,A→TaA∣a,B→b,Ta→a.

现在每条规则都符合 CNF:直接用 S0→b 保留零个 a 的情形,其余推导先产生一个或多个 a,再接一个 b。若还有长右部 A→BCD,可另引入 X,改为 A→BX、X→CD;这一步只二叉化,不承担前面的空字或单位规则消除。

空字由 S0→ε 单独保留,因为普通的二叉分裂和终结符规则只会生成非空字。只含空字的语言可保留这一条规则;空语言则可用没有产生式的开始符号表示。新开始符号也把原开始符号出现在右侧的情况隔离开来。

CNF 文法并不唯一,转换也可能显著增大表示。它保证生成语言不变,语法树形状则会随着辅助非终结符改变;消除歧义需要另外分析,不能由范式转换直接得到。

推论与应用

CNF 是 CYK 算法的输入形式,使“非终结符 A 能否生成区间 w[i:j]”可由两段划分递推。上下文无关泵引理也利用二叉语法树高度与重复非终结符。

它从CFG通向算法化成员判定和复杂度分析;语法树在范式下具有统一形状,便于计数与归纳证明。

参考资料
  • 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”:等价转换与空字约定。
关系图谱8 个相邻概念 · 3 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
分类位置

上位 / 更一般

下位 / 直接特例

暂未标注直接特例。

类型化关系

使用的工具

被这些条目使用