我需要使用识别以下语言的 JFLAP 创建下推自动机:
需要采取哪些步骤来做到这一点?它是如何工作的?
我认为这个问题更适合cs.stackexchange.com,但无论如何我都会添加我的解决方案。
它实际上比看起来更容易,让我们考虑一个例子,我们的出现有以下值:
n = 2
m = 3
p = 1
这应该允许我们形成以下字符串:
a 2 b 3 c 1 a 1+3 b 2 = aabbbcaaaabb
由此我们需要确定我们需要跟踪哪些符号。
n
多次,n,m ≥ 1
因此我们需要跟踪n
此处并且要求它至少出现一次。q = p+m
并且至少m
也会发生,所以我们需要跟踪.m
q = p+m
我们还需要保留一个发生,p
但是注意那个p
也不能发生,因为它声明了p ≥ 0
。我们让我们的 PDA P成为以下 PDA:
P = (Q, Σ, Γ, τ, q 0 , Z, q 6 )
在哪里:
#
因此,由此我们可以形成以下自动机(在 JFLAP 中):
所以在这里,我们只是跟踪上面提到的符号,但这里需要注意的重要一点是q3
,转换为c
0或更多的转换。
我们还使用符号#
作为堆栈符号。
如果我们使用上面指定的输入来模拟这个 PDA ( aabbbcaaaabb
),我们会得到以下结果: