【问题标题】:Going from a language to a context free grammar [closed]从语言到上下文无关语法[关闭]
【发布时间】:2018-03-29 20:02:16
【问题描述】:

给定语言 K = {e^h f^i | 2h > i > h} 我需要生成上下文无关语法

我想出的一些生产规则是:S -> eeTfff 和 T -> eTff | ε

它们仅在 n = m + 1 时起作用,但我不知道如何为 2h > i > h 中的每个组合生成任何规则。

【问题讨论】:

  • 您的解决方案似乎没问题,尽管它不接受空字符串。你能更清楚地解释这个问题吗?因为nm 不在语言描述中。
  • 这个问题与几分钟前在Mathematics:math.stackexchange.com/questions/2477734/… 上提出的问题非常相似。由于这个问题与形式语言理论的关系比编程 更多,Mathematics 可能是找到答案的最佳地点。
  • 对不起,我的意思是“它们只在 i = h + 1 时起作用”

标签: grammar context-free-grammar automata formal-languages computability


【解决方案1】:

首先,找出语言中最短的字符串。我们需要 i > h,所以我们可能会猜测 h = 0;然而,这无济于事,因为我们不能满足 2h > i。我们遇到了同样的事情 h - 1。选择 h = 2,i 的唯一选择是 3。所以语言中最短的字符串是 eefff。不能有任何其他长度为 5 的字符串。

要获得更长的字符串,我们可以在前面添加 e 或在末尾添加 f。显然,如果我们在前面添加一个 e,我们必须始终在末尾添加至少一个 f,并且永远不要超过两个 f。我们可以确认 e.eeff.f 和 e.eefff.ff 都在我们的语言中。这暗示了一个语法:

S -> eefff | eSf | eSff

一旦找到候选人,您就可以尝试使用数学归纳法来证明它。在我们的例子中:

基本情况:语言 eefff 中最短的字符串由产生式 S -> eefff 给出。

归纳假设:假设语法生成语言中的所有字符串,并且语法生成的所有内容都在语言中,对于所有长度不超过 k 的字符串。

归纳步骤:我们必须证明(1)由文法生成的长度为 k+1 的字符串是在语言中,(2)在语言中长度为 k+1 的字符串是由文法生成的。

  1. 由语法生成的长度为k+1 的字符串是使用S -> eSfS -> eSff 生成的。在第一种情况下,从RHS 上的S 派生的字符串的长度为k-1;其次,它的长度为k-2。在这两种情况下,字符串都是归纳假设的语言。也就是说,h

  2. 考虑语言中任何长度为k+1 的字符串。我们有 h + i = k + 1 和 h k-1 和k-2 的子串。通过排除第一个 e 和最后一个和两个 f 形成。前者要么是语言中的字符串,要么后者是。要看到这一点,假设两者都不是。但是,(h-1)

    ((i <= h) or (i >= 2h - 1))
    

    和 ((i = 2h))

因为我们知道 h k+1 的字符串,只需应用S -&gt; eSfS -&gt; eSff,具体取决于语言中的子字符串(两者都可能)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-03
    • 2012-09-27
    • 2021-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-04
    • 2011-08-20
    相关资源
    最近更新 更多