【问题标题】:Context free grammar and pda for given language给定语言的上下文无关语法和 pda
【发布时间】:2019-10-30 14:33:25
【问题描述】:

我有一种上下文无关的语言,我必须为其创建一个上下文无关的语法以及确定性或非确定性的下推自动机。我尝试了不同的生产规则并使用 jflap 模拟它们,但不幸的是不成功。

任何类型的指南都值得赞赏。

L = { s1@s2@s3@…@sk | k > 1
       ∧ si ∈ {0,1}*
       ∧ ∃i,j i≠j ∧ si=sjR
     }

L 中的字符串示例有:{01@10, 110@11111@011, ...}

【问题讨论】:

  • 我不知道你在这里问什么?
  • 我有上下文无关语言,我需要为其创建上下文无关语法以及确定性或非确定性下推自动机。
  • 您是否可以在问题中添加任何标签以帮助具有领域知识的人更轻松地找到问题?
  • 先生,我不熟悉stackoverflow社区,也不熟悉提问的方式。对造成的不便表示歉意。但尽我所能。
  • 我确实添加了相关社区答案的标签。

标签: context-free-grammar automata computation-theory pushdown-automaton


【解决方案1】:

正式的定义有点难以解析,但这是我从中得到的:

  • 此语言的格式为 s1@s2@s3...@sk
  • 每个si都是0和1的字符串
  • 至少有一对 si, sj 使得 si = sj^R

假设这是语言,我们的策略是先强制执行第 3 个条件,然后执行第 1 个条件,然后执行第 2 个条件。为了强制执行第 3 个,我们将要求输入至少一对彼此相反的字符串:

S -> 0S0 | 1S1

这为我们提供了 wSw^R 形式的字符串。现在,我们希望能够在前面、中间或后面添加其他字符串,全部用@分隔:

S -> 0S0 | 1S1
S -> T@S | S@T | @T@ | @

最后,我们需要让 T 生成 0 和 1 的字符串:

S -> 0S0 | 1S1
S -> T@S | S@T | @T@ | @
T -> 0T | 1T | e

要生成语言中的任何字符串:

  1. 首先使用第一行的产生式生成一对所需的反向字符串。
  2. 使用第二行的第一个产生式将任何其他字符串添加到左侧。
  3. 使用第二行的第二个产生式将任何其他字符串添加到右侧。
  4. 使用第二行的第三个和第四个产生式将任何其他字符串添加到中间。
  5. 使用第三行的产生式填写其他字符串。

该语言的 PDA 可以执行以下操作:

  1. 循环读取 (0+1)*@
  2. 不确定地跳转到您假设您已找到第 3 个条件所需的第一个字符串的状态
  3. 当你跳转时,将字符串压入堆栈
  4. 再次循环读取 (0+1)*@
  5. 不确定地跳转到您假设您已找到第三个条件所需的第二个字符串的状态
  6. 跳转时,将字符串从栈中弹出来验证
  7. 再次循环读取 (0+1)*@

您在这里做了两个不确定的猜测:首先,您猜测将有反转的字符串。其次,你猜你找到了它。如果这两个猜测都是正确的(并且它们将适用于语言中的任何字符串,至少对于一对 k(k+1)/2 猜测)然后 NPDA 接受。

【讨论】:

    猜你喜欢
    • 2012-09-27
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-29
    • 1970-01-01
    相关资源
    最近更新 更多