📜  乔姆斯基范式

📅  最后修改于: 2020-11-26 10:18:30             🧑  作者: Mango


如果制作采用以下格式,则CFG格式为Chomsky正常格式-

  • A→一个
  • A→公元前
  • S→ε

其中A,B和C为非末端, a为末端。

转换为Chomsky范式的算法-

步骤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→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 | 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