我正在为非上下文无关语言 L={a^(n)b^(n)c^(n)|n>=1} 构建一个下推自动机,并想到了两种方法。
第一种方法:-
我认为对于字符串中的每个“a”,我会将 3 个“a”推入堆栈,对于字符串中的每个“b”,我现在将为字符串中的每个“c”从堆栈中弹出 2 个“a”我堆栈中仍会有 1 个“a”。
第一种方法的问题:-生成的语言变成这样 L={a^(p)b^(m)c^(n)| p>=1 并且无法确定如何定义 m 和 n }
第二种方法:-
我们知道 L={ a^(n)b^(m)c^(m)d^(n) | n>=0 } 是上下文无关语言,L={ wxw | w∈(a,b)* } 也是上下文无关语言。
所以,我认为 L={ a^(n)b^(m)b^(m)c^(n) | n>=1 和 m=floor((n+1)/2) }
第二种方法的问题:-不知道我们是否可以在不干扰堆栈元素的情况下在 PDA 中计算 floor(n+1/2)。
请帮助确定如何在第一种方法中定义 m 和 n 以及如何在 PDA 中找到 floor((n+1)/2) 。
如果需要,两者都可以使用 JFLAP 文件。