Context free grammar 上下文无关文法与给定语言的pda

Context free grammar 上下文无关文法与给定语言的pda,context-free-grammar,automata,computation-theory,pushdown-automaton,Context Free Grammar,Automata,Computation Theory,Pushdown Automaton,我有一个上下文无关的语言,我必须为它创建一个上下文无关的语法以及下推自动机(确定性或非确定性)。我尝试了不同的产生式规则,并使用jflap模拟它们,但不幸的是没有成功 任何形式的指导都是值得赞赏的 L={s1@s2@s3@…@sk|k>1 ∧ 硅∈ {0,1}* ∧ ∃i、 j i≠J∧ si=sjR } L中的字符串示例如下:{01@10, 110@11111@011,…}形式定义有点难以解析,但以下是我从中得到的: 这种语言的形式是s1@s2@s3…@sk 每个si都是由0和1组成的字符串

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

任何形式的指导都是值得赞赏的

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


L中的字符串示例如下:{01@10, 110@11111@011,…}

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

  • 这种语言的形式是s1@s2@s3…@sk
  • 每个si都是由0和1组成的字符串
  • 至少有一对si,sj使得si=sj^R
假设这是一种语言,我们的策略将是首先执行第三个条件,然后是第一个条件,然后是第二个条件。为了执行第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
要生成语言中的任何字符串,请执行以下操作:

  • 首先使用第一行上的产品生成所需的反向字符串对
  • 使用第二行上的第一个产品将任何其他字符串添加到左侧
  • 使用第二行的第二个产品将任何其他字符串添加到右侧
  • 使用第二行的第三个和第四个结果将任何其他字符串添加到中间
  • 使用第三行上的productions填充其他字符串
  • 此语言的PDA可以执行以下操作:

  • 在循环中读取(0+1)*@
  • 不确定地跳转到一个状态,在该状态下,您假定已找到第三个条件所需的第一个字符串
  • 当你跳的时候,把绳子推到堆栈上
  • 再次在循环中读取(0+1)*@
  • 不确定地跳转到一个状态,在该状态下,您假定已找到第三个条件所需的第二个字符串
  • 跳转时,从堆栈中弹出字符串以进行验证
  • 再次在循环中读取(0+1)*@

  • 这里有两个不确定的猜测:首先,猜测将有一个反向的字符串。第二,你猜你找到了。如果这两种猜测都是正确的(并且它们适用于语言中的任何字符串,至少适用于一对k(k+1)/2猜测),那么NPDA接受。

    正式定义有点难以解析,但我从中得到了以下结论:

    • 这种语言的形式是s1@s2@s3…@sk
    • 每个si都是由0和1组成的字符串
    • 至少有一对si,sj使得si=sj^R
    假设这是一种语言,我们的策略将是首先执行第三个条件,然后是第一个条件,然后是第二个条件。为了执行第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
    
    要生成语言中的任何字符串,请执行以下操作:

  • 首先使用第一行上的产品生成所需的反向字符串对
  • 使用第二行上的第一个产品将任何其他字符串添加到左侧
  • 使用第二行的第二个产品将任何其他字符串添加到右侧
  • 使用第二行的第三个和第四个结果将任何其他字符串添加到中间
  • 使用第三行上的productions填充其他字符串
  • 此语言的PDA可以执行以下操作:

  • 在循环中读取(0+1)*@
  • 不确定地跳转到一个状态,在该状态下,您假定已找到第三个条件所需的第一个字符串
  • 当你跳的时候,把绳子推到堆栈上
  • 再次在循环中读取(0+1)*@
  • 不确定地跳转到一个状态,在该状态下,您假定已找到第三个条件所需的第二个字符串
  • 跳转时,从堆栈中弹出字符串以进行验证
  • 再次在循环中读取(0+1)*@

  • 这里有两个不确定的猜测:首先,猜测将有一个反向的字符串。第二,你猜你找到了。如果这两种猜测都是正确的(并且对于语言中的任何字符串都是正确的,至少对于一对k(k+1)/2的猜测)然后NPDA接受。

    我不知道你在问什么?我有上下文无关语言,我需要为它创建上下文无关语法以及下推自动机(确定性或非确定性)。你是否可以在问题中添加任何标签,以帮助有领域知识的人更容易地找到它?先生,我不熟悉这是一个社区,也是一个人提问的方式。很抱歉给您带来不便。但是尽我最大的努力。我确实为相关的社区答案添加了标签。我不确定你在这里问什么?我有上下文无关语言,我需要为其创建上下文无关语法以及下推自动机(确定性或非确定性)。你有什么标签可以添加到问题中以帮助具有领域知识的人吗先生,我不熟悉stackoverflow社区,也不熟悉人们提问的方式。很抱歉给您带来不便。但是尽我最大的努力。我确实为相关的社区答案添加了标签。