【问题标题】:Conversion to Chomsky Normal Form转换为乔姆斯基范式
【发布时间】:2011-09-22 23:55:15
【问题描述】:

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

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

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

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

  1. 消除 ε 产生
  2. 消除单一产生式
  3. 删除无用符号

我马上就卡住了。原因是 A 是一个可以为空的符号(ε 是它的主体的一部分)

当然,我不能删除 A 符号。

谁能帮我得到最终的解决方案?

【问题讨论】:

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


    【解决方案1】:

    正如Wikipedia 所指出的,乔姆斯基范式有两种定义,它们在 ε 产生式的处理上有所不同。您必须选择允许这些的语法,否则您将永远不会得到等效的语法:您的语法产生空字符串,而遵循其他定义的 CNF 语法则无法做到这一点。

    【讨论】:

    • 所以实际上你是说我的推理完全错误?我该怎么办?....
    • @Joachim:我是说你应该仔细阅读 Wikipedia 上的定义,然后决定是否需要完全等效的语法。
    • 我不明白这条评论。由于 ε 是文法语言的成员,显然第一个定义适用。 OPs 问题可以通过使语法本质上不收缩,然后删除链式规则和无用符号来解决。
    • @danportin:这不是我最清楚的评论。有时,在运行 CKY 算法之前定义一个始终生成额外符号并将该符号添加/附加到输入的非等价文法就足够了。
    • 这很有道理,而且听起来很实用。但出于练习的目的,大概是为了确保 OP 理解并能够正确执行算法,第一种选择更为谨慎。
    【解决方案2】:

    要开始转换为乔姆斯基范式(使用维基百科页面提供的定义(1)),您需要找到一个等效的本质上非收缩语法。带有开始符号 S 的语法 G 本质上是非收缩的 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 范式的等效语法。

    【讨论】:

    • 非常感谢您的解释。不幸的是,我仍然无法解决这个练习。我是一名学生,因为几天后我要参加考试(编程语言和编译器)......我想知道我是否可以依靠某人的知识来填补我的空白......这个是我的电子邮件地址:moose_2009@operamail.com 谢谢
    • 如果您尝试先解决问题并接受答案,您可能会发现 SO 的成员知识渊博且乐于助人。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-19
    • 1970-01-01
    • 2012-07-17
    • 1970-01-01
    • 2016-01-23
    • 2011-02-25
    • 2018-11-28
    相关资源
    最近更新 更多