先决条件——下推自动机
问题:为 L = {0 (n+m) 1 m 2 n | 构造下推自动机米,n≥0}
类似的PDA-
- 这个PDA看起来和S2 = {0 m 1 (n+m) 2 n }的PDA很相似,但是产量不同。 S2 将产生没有 1 的输出等于没有 0 和 2 的总和,而 S1 没有。
- 这个PDA似乎类似于L2语言的PDA = {a m b (n+m) c n | M,N> 1},但L2不包含任何生产长度为0,1,2,3的虽然这将PDA除了字符串由语言的PDA接受接受空字符串,长度为1,2,3的字符串L2。
例子-
Input: NULL String
Output: Accepted
Input: 0000011122
Output: Accepted
Input: 00000112222
Output: Not Accepted
本 PDA 中使用的方法 –
处理给定的输入字符串时可能有四种情况。
情况 1-m=0:
在这种情况下,输入字符串的格式为 {0 n 2 n }。在这种情况下,继续将 0 压入堆栈,直到遇到 2。在接收 2 时检查堆栈顶部是否为 0,然后将其从堆栈中弹出。继续弹出 0,直到处理完字符串的所有 2。如果我们到达输入字符串的末尾并且堆栈变空,则到达最终状态即接受输入字符串否则移动到死状态。
情况 2-n=0:
在这种情况下,输入字符串的格式为 {0 m 1 m }。在这种情况下,继续将 0 压入堆栈,直到遇到 1。在接收 1 时检查堆栈顶部是否为 0,然后将其从堆栈中弹出。继续弹出 0,直到处理完字符串的所有 1。如果我们到达输入字符串的末尾并且堆栈变空,则到达最终状态即接受输入字符串否则移动到死状态。
情况 3-m,n>0:
在这种情况下,输入字符串的格式为 {0 (n+m) 1 m 2 n }。在这种情况下,继续将 0 压入堆栈,直到遇到 1。收到 1 后,检查堆栈顶部是否为 0,然后将其从堆栈中弹出。继续弹出 0,直到处理完输入字符串的所有 1。之后,在接收 2 时检查堆栈顶部是否为 0,然后将其从堆栈中弹出。继续弹出 0,直到处理完输入字符串的所有 2。如果我们到达输入字符串的末尾并且堆栈变空,则达到最终状态,即接受输入字符串,否则将进入死状态。
情况 4- m=0,n=0:
在这种情况下,输入字符串将为空。因此直接跳转到最终状态。
状态转移图: