消除无用符号
Definition
对于 CFG , 称符号 是有用符号当且仅当存在某个形如 的推导,其中 称符号 是产生符号当且仅当存在 称符号 是可达符号当且仅当存在
设 , 是通过以下步骤获得的文法:
- 消除非产生符号,得到
- 消除非可达符号 则 中没有无用符号,即
- 次序是敏感的
Proof
若 是剩余符号之一,因为 没有在第二步中被消除,因此 中存在 和 满足 ,由于推导过程中使用的符号都是可达的,因此 中 中每个符号都属于 ,因此它们都是产生的。对于 中某个 得到的推导,它仅包含从 可达的符号,因此这个推导也是 中的推导。 因此 中没有无用符号。
消除 产生式
称符号 是可致空的当且仅当
通过以下步骤可以消除 中的 产生式,得到 :
- 计算 的可致空符号集
- 对于每一个产生式 ,在 中对应一组产生式,每个可致空符号或出现或不出现(不能出现全不出现的情况)
- 去除 中的所有 产生式 则 满足
消除单位产生式
形如 的产生式称为单位产生式 若 ,且推导过程中只使用了单位产生式,则称 为单位对
通过以下步骤可以消除 中的单位产生式,得到 :
- 计算 的单位对集合
- 对每个单位对 ,在 中加入 ,其中 是一个非单位产生式
CFG 的简化
通过以下步骤对 进行简化:
- 消除 产生式
- 消除单位产生式
- 消除无用符号 简化步骤是次序敏感的
Chomsky 范式
任何不含 的非空 CFL 都存在一个 CFG 使得其产生式仅包含两种形式:
- ,其中 为变元
- ,其中 为终结符 且 中不包含无用符号。 这样的文法称为 Chomsky 范式(CNF)
先对 进行简化得到 ,对于 :
- 若终结符出现在右侧长度大于 1 的产生式中,则引入新的变元 替换产生式中的 ,且
- 将右侧长度大于 2 的产生式转换为只包含 2 个变元(通过引入新的变元) 得到 ,为 CNF