消除无用符号

Definition

对于 CFG , 称符号 有用符号当且仅当存在某个形如 的推导,其中 称符号 产生符号当且仅当存在 称符号 可达符号当且仅当存在

是通过以下步骤获得的文法:

  1. 消除非产生符号,得到
  2. 消除非可达符号 则 中没有无用符号,即
  • 次序是敏感的

Proof

是剩余符号之一,因为 没有在第二步中被消除,因此 中存在 满足 ,由于推导过程中使用的符号都是可达的,因此 中每个符号都属于 ,因此它们都是产生的。对于 中某个 得到的推导,它仅包含从 可达的符号,因此这个推导也是 中的推导。 因此 中没有无用符号。

消除 产生式

称符号 是可致空的当且仅当

通过以下步骤可以消除 中的 产生式,得到

  • 计算 的可致空符号集
  • 对于每一个产生式 ,在 中对应一组产生式,每个可致空符号或出现或不出现(不能出现全不出现的情况)
  • 去除 中的所有 产生式 则 满足

消除单位产生式

形如 的产生式称为单位产生式 若 ,且推导过程中只使用了单位产生式,则称 为单位对

通过以下步骤可以消除 中的单位产生式,得到

  • 计算 的单位对集合
  • 对每个单位对 ,在 中加入 ,其中 是一个非单位产生式

CFG 的简化

通过以下步骤对 进行简化:

  • 消除 产生式
  • 消除单位产生式
  • 消除无用符号 简化步骤是次序敏感的

Chomsky 范式

任何不含 的非空 CFL 都存在一个 CFG 使得其产生式仅包含两种形式:

  • ,其中 为变元
  • ,其中 为终结符 且 中不包含无用符号。 这样的文法称为 Chomsky 范式(CNF)

先对 进行简化得到 ,对于

  • 若终结符出现在右侧长度大于 1 的产生式中,则引入新的变元 替换产生式中的 ,且
  • 将右侧长度大于 2 的产生式转换为只包含 2 个变元(通过引入新的变元) 得到 ,为 CNF