📅  最后修改于: 2020-11-26 10:18:30             🧑  作者: Mango
如果制作采用以下格式,则CFG格式为Chomsky正常格式-
其中A,B和C为非末端, a为末端。
步骤1-如果起始符号S出现在右侧,则创建一个新的起始符号S’和一个新的生产S’→S 。
步骤2-删除空产品。 (使用前面讨论的Null生产移除算法)
步骤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→XB和X→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 | aB | a,A→B | S | ∈,B→b
除去A→∈后,生产集变为-
S 0 →S,S→ASA | aB |一个| AS | SA | S,A→B | S,B→b
(3)现在我们将删除单元产品。
删除S→S后,生产集变为-
S 0 →S,S→ASA | aB |一个| AS | SA,A→B | S,B→b
删除S 0 →S后,生产集变为-
S 0 →ASA | aB |一个| AS | SA,S→ASA | aB |一个| AS |南非
A→B | S,B→b
删除A→B后,生产集变为-
S 0 →ASA | aB |一个| AS | SA,S→ASA | aB |一个| AS |南非
A→S | b
B→b
删除A→S后,生产集变为-
S 0 →ASA | aB |一个| AS | SA,S→ASA | aB |一个| AS |南非
A→b | ASA | aB |一个| AS | SA,B→b
(4)现在,我们将在RHS中找出两个以上的变量
在此,S 0 →ASA,S→ASA,A→ASA违反了RHS中的两个非终端
因此,我们将应用步骤4和步骤5来获得CNF中的以下最终生产集-
S 0 →AX | aB |一个| AS |南非
S→AX | aB |一个| AS |南非
A→b | AX | aB |一个| AS |南非
B→b
X→SA
(5)我们必须更改乘积S 0 →aB,S→aB,A→aB
最终生产集变为-
S 0 →AX | YB |一个| AS |南非
S→AX | YB |一个| AS |南非
A→b A→b | AX | YB |一个| AS |南非
B→b
X→SA
Y→a