Loops 从上下文无关转换到CNF时如何处理循环?

Loops 从上下文无关转换到CNF时如何处理循环?,loops,context-free-grammar,automata,chomsky-normal-form,Loops,Context Free Grammar,Automata,Chomsky Normal Form,假设有语法 S->PQT R->T U->aU | bX X->Y P->bQ Y->SX | c | X Q->aRY T->U 有一个循环: X->Y Y->X 转换为CNF时如何消除它? 我认为在语法中添加一条规则是不好的(比如在单元消去法中) X->X,对吧,因为它基本上是另一个循环?如果X->Y和Y->X,非终结符号是可互换的,您可以安全地用这两个循环中的另一个替换这两个循环中的任何一个的所有实例,从而完全消除这两个循环中的一个。正如您还指出的,可以安全地消除形式为X->X的规

假设有语法

  • S->PQT
  • R->T
  • U->aU | bX
  • X->Y
  • P->bQ
  • Y->SX | c | X
  • Q->aRY
  • T->U
有一个循环:

  • X->Y
  • Y->X
转换为CNF时如何消除它? 我认为在语法中添加一条规则是不好的(比如在单元消去法中)
X->X,对吧,因为它基本上是另一个循环?

如果
X->Y
Y->X
,非终结符号是可互换的,您可以安全地用这两个循环中的另一个替换这两个循环中的任何一个的所有实例,从而完全消除这两个循环中的一个。正如您还指出的,可以安全地消除形式为
X->X
的规则。因此,该语法与您给出的语法相同:

S -> PQT
R -> T
U -> aU | bX
P -> bQ
X -> SX | c
Q -> aRX
T -> U
这一个也是:

S -> PQT
R -> T
U -> aU | bY
P -> bQ
Y -> SY | c
Q -> aRY
T -> U