【问题标题】:Given a language, define its CFG给定一种语言,定义它的 CFG
【发布时间】:2015-05-16 16:36:48
【问题描述】:

给定

L1 = {w belongs to {a,b}* | has as many a as b}

定义一个 CFG G 使得 L(G)= L1

在我看来,这些作品应该是正确的答案

1) S → aSa

2) S → bSb

3) S → ε

我的理由是:

L1 包含像 {ab,aabb,aaabbb,...etc} 这样的字符串

现在我有一个疑问:如果我应用上述产品,简而言之:

S → aSa
我应用 1) 所以我得到 S → aSa → aaSaa 我选择 2) 我得到 S → aSa → aaSaa → aabSbaa 然后使用空字符串我得到最终字符串 S → aSa → aaSaa → aabSbaa → aabbaa

现在,也许我错了,但在字符串aabbaaa 的数量不等于 b 的数量

我们将不胜感激任何帮助

约阿希姆

【问题讨论】:

  • 无论如何,考虑一下这个不匹配的输入:“abab”。因此,发布的作品不可能是正确的答案。快乐的理论化。
  • 如果你认为我的帖子应该被标记为作业..我希望有人能向我解释我在哪里出错以及为什么..
  • 每次制作后,as 和bs 的数量应该相等。您当前的解决方案取决于选择正确的产品,但正如您已经注意到的那样,这不能得到保证。您必须确保每个产品都生成一个有效的单词。
  • 考虑这个不匹配的输入:“abab”...那我应该怎么解决这个问题呢?
  • 但是如果我开始应用 2) 规则,我会得到 abSba,然后通过 3) 我得到 abba,其中 a 和 b 的数量相等..我说的对吗?

标签: compiler-construction grammar


【解决方案1】:

这是一个标准的课堂练习,还没有正确的答案。

1) S -> aSb
2) S -> bSa
3) S -> SS
4) S -> ε

任意数量的 a 和 b 以任意顺序,包括空字符串。


网上有不少课堂笔记,附有答案和证明。例子: herehereherehere 以展示一些。

【讨论】:

    【解决方案2】:

    假设 L1 实际上是 {a^nb^n | n ≥ 0},那么您提供的语法(正如您自己证明的那样)不能准确生成 L1。为了满足松散表达的要求,“单词左侧的a的数量必须等于右侧的b的数量”,您的目标是找到一个语法在其每一个产品之后强制执行该要求。

    另一种思考方式是:您不得在语法中使用不产生相同数量的ab 的产生式。

    编辑:由于这不是作业,我会继续给出答案:

    V = {A}, Σ = {a, b}, S = A, and R the set of rules:
    
    (1) A -> aAbA | bAaA
    (2) A -> ε
    

    【讨论】:

    • abab 呢?您的语法产生了一些具有相同数量的 a 和 b 但不是全部的字符串。
    • 我仍然认为您的解决方案没有得到所有可能的单词。例如。据我了解,一个词可以以 a 开头,也可以以 a 结尾(例如 abba),这在您的规则中是不可能的。
    • @Howard aAbA => aAbbAaA =>* abba
    【解决方案3】:

    对不起,也许我错了,但 Michael Foukarakis 的解决方案不起作用

    基本上这两个规则不提供具有相同数量的 a 和 b 的字符串。

    (1) A -> aAb
    
    (2) A -> ε
    

    取 A -> aAb 然后应用 1) 规则,你有 A -> aAb ->aaAb 然后??? 如果你应用 2) 你最终会得到A -> aAb ->aaAb ->aab

    我认为正确的答案是:

    1)S->aSbS
    
    2)S->bSaS
    
    3) S->ε
    

    即使我得到如下字符串:ababaababb 实际上它们都满足了最初的要求,即:

    the string must contain the same number of a and b.
    

    (元素的排列方式无关紧要..)

    当然欢迎和鼓励发表评论。

    【讨论】:

    • 你说A -> aAb -> aaAb - 怎么样?是否有将A 替换为a 的规则?
    猜你喜欢
    • 1970-01-01
    • 2014-03-12
    • 1970-01-01
    • 2019-08-08
    • 1970-01-01
    • 2018-01-23
    • 2011-07-20
    • 2011-08-20
    • 1970-01-01
    相关资源
    最近更新 更多