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

时间:2018-06-02 11:43:07

标签: loops context-free-grammar automata chomsky-normal-form

假设有一个语法

  • S - > PQT
  • R - > Ť
  • U - > aU | BX
  • X - > ÿ
  • P - > BQ
  • Y - > SX | c | X
  • Q - > ARY
  • T - > û

有一个循环:

  • X - > ÿ
  • Y - > X

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

1 个答案:

答案 0 :(得分:1)

如果X -> YY -> 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