转换为乔姆斯基范式

时间:2011-06-26 14:30:52

标签: parsing grammar context-free-grammar formal-languages chomsky-normal-form

我确实需要你的帮助。 我有这些作品:

1) A--> aAb
2) A--> bAa
3) A--> ε

我应该使用乔姆斯基范式(CNF)。

为了应用上述规则,我应该:

  1. 消除ε产品
  2. 消除单一制作
  3. 删除无用的符号
  4. 我立即陷入困境。原因是A是一个可以为空的符号(ε是其身体的一部分)

    当然我无法移除A符号。

    任何人都可以帮助我获得最终解决方案吗?

2 个答案:

答案 0 :(得分:2)

正如Wikipedia所述,乔姆斯基范式有两种定义,它们在ε产生的处理上有所不同。你将不得不选择允许这些语法的那个,否则你永远不会得到一个等价的语法:你的语法产生空字符串,而遵循另一个定义的CNF语法不具备这个能力。

答案 1 :(得分:2)

要开始转换为Chomsky普通形式(使用维基百科页面提供的定义(1)),您需要找到一个基本上非等同的语法。带有起始符号G的语法S基本上是非约束iff

1. S is not a recursive variable
2. G has no ε-rules other than S -> ε if ε ∈ L(G)

使用非递归起始符号调用语法G,等效语法G'

G' : S -> A
     A -> aAb | bAa | ε

显然,G'的可空变量集合为{S,A},因为A -> εG'中的产生,S -> A是链规则。我假设您已经获得了一种从语法中删除ε规则的算法。该算法应该产生类似于:

的语法
G'' : S -> A | ε
      A -> aAb | bAa | ab | ba

语法G''基本上是非合同的;您现在可以将剩余的算法应用于语法,以找到Chomsky普通形式的等效语法。