使用JFLAP做下推自动机的方法

时间:2016-04-26 18:34:37

标签: pushdown-automaton automaton jflap

我需要使用JFLAP创建一个可识别以下语言的下推自动机:

enter image description here

需要采取哪些措施?它是如何工作的?

1 个答案:

答案 0 :(得分:0)

我认为这个问题更适合cs.stackexchange.com,但无论如何我都会添加我的解决方案。

形成一个例子

它实际上比它看起来更容易,让我们考虑一个例子,我们的出现有以下值:

n = 2
m = 3
p = 1

这应该允许我们形成以下字符串:

  

一个 2 B'SUP> 3 C 1 一个 1 + 3 B'SUP> 2 = aabbbcaaaabb

形成逻辑理解

由此我们需要确定我们需要跟踪的符号。

  1. 我们知道外部符号出现nn,m ≥ 1次,所以我们需要在这里跟踪n,我们要求它至少 一次。
  2. 我们知道q = p+mm也会出现至少,所以我们需要跟踪m的出现次数。
  3. 如果q = p+m我们还需要保留p,但请注意 p也可以 ,因为它声明p ≥ 0
  4. 形成正式定义

    我们让PDA P 成为以下PDA:

    P =(Q,Σ,Γ,τ,q 0 ,Z,q 6

    其中:

    • Q是我们d-PDA中的一组状态
    • Σ是包含字符串
    • 的输入符号
    • Γ是包含集合Γ= {a,b}
    • 的堆栈符号
    • q 0 是我们的初始(开始)状态
    • Z是我们的堆栈符号#
    • q 6 是我们的最终(结束)状态

    形成下推自动机

    因此,我们可以形成以下自动机(在JFLAP中):

    JFLAP PDA

    所以在这里,我们只是跟踪上面提到的符号,但需要注意的一点是q3,其中c的转换是 0或更多过渡。

    我们还使用符号#作为堆栈符号。

    模拟

    如果我们使用上面指定的输入(aabbbcaaaabb)模拟此PDA,我们会得到以下结果:

    simulation