将CFG转换为CNF,是否正确?

时间:2014-12-05 11:11:36

标签: chomsky-normal-form

鉴于此CFG

 S->A|t|pCq
 S->B|r|^
 A->C|q|BA
 C->S|p|^
 B->m

我尝试转换为CNF

首先删除空产品,即S->和C-> ^

删除后

S->A|t|pCq
S->B|r
A->C|q|BA
C->S|p
B->m

现在去除单位产品,即S-> B,A-> C,S-> A和C->

 S->B gives S->m using B->m

 A->C gives A->p using C->p

 S->A gives S->q|BA using  A->q|BA 

 C->S gives C->t|pCq|r using S->t|pCq

所以添加这些作品

S->t|pCq|q|BA

S->r|m

A->q|BA|p

C->p|t|pCq|r

其中K-> q,U-> p

CNF要求的CNG是

S->t|UCK|q|BA

S->r|m

A->K|BA|U

C->U|t|UCK|r    

R-> UC

S->t|RK|q|BA

S->r|m

A->K|BA|U

C->U|t|RK|r

R->UC 

K->q

U->p

这个是正确的吗?

1 个答案:

答案 0 :(得分:0)

  1. 删除Null产品。某些定义允许S生成空值,因此错误地删除了C生产。您应该为每个在RHS中具有C的生产创建另一个生产,方法是将C替换为null。

    S->A|t|pCq|pq
    S->B|r
    A->^|q|BA
    C->S|p
    B->m
    

    注意:在处理C-> ^后,当您移动到S-> ^时,您不会添加另一个C->生产,因为已经处理过了。然而,必须添加A-> ^(A-> C& C-> ^)。

  2. 删除A - > ^生产

    S->A|t|pCq|pq
    S->B|r
    A->B|q|BA
    C->S|p
    B->m
    
  3. 去除A-> B和S-> B

    A->m|q|BA
    S->A|m|t|r|pCq|pq
    
  4. 删除C-> S

    C->A|p|m|t|r|pCq|pq
    

    注意A是如何添加的,因为S-> A还没有被处理(更容易处理它,我只是展示一个点)

  5. 删除C-> A

    C->q|p|m|t|r|pCq|pq|BA
    
  6. 删除S-> A

    S->q|m|t|r|pCq|pq|BA
    
  7. 最终     S-> M | R | Q | T | PCQ | PQ | BA     A-> M | Q | BA     C-> M | P | Q |吨| R | PCQ | PQ | BA     B-> M

  8. 转换为CNF

    P->p
    Q->q
    X->CQ
    S->m|r|q|t|PX|PQ|BA
    A->m|q|BA
    C->m|p|q|t|r|PX|PQ|BA
    B->m
    
  9. 可选

    S->^
    
    编辑:哎呀。我犯了一个错误。忘了添加C-> r。对不起^^'