乔姆斯基范式


如果产生式采用以下形式,则 CFG 处于乔姆斯基范式 -

  • 一个→一个
  • A → BC
  • S → ε

其中 A、B 和 C 是非终结符,a是终结符。

转换为乔姆斯基范式的算法 -

步骤 1 - 如果开始符号S出现在右侧,则创建一个新的开始符号S'和一个新的产生式S'→ S

步骤 2 - 删除空产生式。(使用前面讨论的空产生式去除算法)

步骤 3 - 删除单位产生式。(使用前面讨论的单位生产去除算法)

步骤 4 - 将每个产生式A → B 1 …B n (其中n > 2)替换为A → B 1 C (其中C → B 2 …B n)。对右侧有两个或多个符号的所有产生式重复此步骤。

步骤 5 - 如果任何产生式的右侧采用A → aB 的形式,其中 a 是终结符,A、B是非终结符,则产生式将替换为A → XBX → a对每个A → aB形式的产生式重复此步骤。

问题

将以下CFG转换为CNF

S → ASA | aB, A → B | S,B → b | ε

解决方案

(1)由于S出现在 RHS 中,我们添加一个新的状态S 0 ,并将S 0 →S添加到生产集中,变成 -

S 0 →S, S→ ASA | aB, A → B | S,B → b | ε

(2)现在我们将删除空产生式 -

B → ε 且 A → ε

去除 B → ε 后,产生式集变为 -

S 0 →S, S→ ASA | 乙 | a, A → B | S | ε, B → b

删除 A → ε 后,产生式集变为 -

S 0 →S, S→ ASA | 乙 | 一个 | 作为| 南澳 | S,A → B | S,B→b

(3)现在我们将删除单元产生式。

删除 S → S 后,产生式集变为 -

S 0 →S, S→ ASA | 乙 | 一个 | 作为| 南,A → B | S,B→b

去掉 S 0 → S 后,产生式集变为 -

S 0 → ASA | 乙 | 一个 | 作为| SA、S→ ASA | 乙 | 一个 | 作为| SA

A → B | S,B→b

移除 A→ B 后,产生式集变为 -

S 0 → ASA | 乙 | 一个 | 作为| SA、S→ ASA | 乙 | 一个 | 作为| SA

A → S | 乙

乙 → 乙

去除 A→ S 后,产生式集变为 -

S 0 → ASA | 乙 | 一个 | 作为| SA、S→ ASA | 乙 | 一个 | 作为| SA

A → b |ASA | 乙 | 一个 | 作为| SA,B → b

(4)现在我们将在RHS中找出两个以上的变量

这里,S 0 → ASA,S → ASA,A→ ASA 违反了 RHS 中的两个非终结符

因此,我们将应用步骤 4 和步骤 5 来获得以下 CNF 中的最终产生式集 -

S 0 → AX | 乙 | 一个 | 作为| SA

S→ AX | 乙 | 一个 | 作为| SA

A → b |AX | 乙 | 一个 | 作为| SA

乙 → 乙

X → 南

(5)我们必须改变产生式 S 0 → aB, S→ aB, A→ aB

最终的生产集变成 -

S 0 → AX | YB | 一个 | 作为| SA

S→ AX | YB | 一个 | 作为| SA

A → b A → b |AX | YB | 一个 | 作为| SA

乙 → 乙

X → 南

Y→a