鉴于此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
这个是正确的吗?
答案 0 :(得分:0)
删除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-> ^)。
删除A - > ^生产
S->A|t|pCq|pq
S->B|r
A->B|q|BA
C->S|p
B->m
去除A-> B和S-> B
A->m|q|BA
S->A|m|t|r|pCq|pq
删除C-> S
C->A|p|m|t|r|pCq|pq
注意A是如何添加的,因为S-> A还没有被处理(更容易处理它,我只是展示一个点)
删除C-> A
C->q|p|m|t|r|pCq|pq|BA
删除S-> A
S->q|m|t|r|pCq|pq|BA
最终 S-> M | R | Q | T | PCQ | PQ | BA A-> M | Q | BA C-> M | P | Q |吨| R | PCQ | PQ | BA B-> M
转换为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
可选的
S->^
编辑:哎呀。我犯了一个错误。忘了添加C-> r。对不起^^'