先决条件 – 下推自动机,用于接受语言的 NPDA L = {a m b (n+m) c m | m, n >= 1}
问题:为 L = {0 m 1 (n+m) 2 n | 构造下推自动机m,n ≥ 0}
例子:
Input: 011122
Output: Accepted
Input: 00000112222
Output: Not Accepted
本 PDA 中使用的方法 –
处理给定的输入字符串时可能有四种情况。
情况 1-m=0:
在这种情况下,输入字符串的格式为 {1 n 2 n }。在这种情况下,继续将 1 压入堆栈,直到遇到 2。在接收 2 时检查堆栈顶部是否为 1,然后将其从堆栈中弹出。继续弹出 1,直到处理完字符串的所有 2。如果我们到达输入字符串的末尾并且堆栈变空,则到达最终状态即接受输入字符串否则移动到死状态。
情况 2-n=0:
在这种情况下,输入字符串的格式为 {0 m 1 m }。在这种情况下,继续将 0 压入堆栈,直到遇到 1。在接收 1 时检查堆栈顶部是否为 0,然后将其从堆栈中弹出。继续弹出 0,直到处理完字符串的所有 1。如果我们到达输入字符串的末尾并且堆栈变空,则到达最终状态即接受输入字符串否则移动到死状态。
情况 3-m,n>0:
在这种情况下,输入字符串的格式为 {0 m 1 (m+n) 2 n }。在这种情况下,继续将 0 压入堆栈,直到遇到 1。收到 1 后,检查堆栈顶部是否为 0,然后将其从堆栈中弹出。继续弹出 0,直到所有 0 都弹出并且堆栈变空。之后,继续将 1 压入堆栈,直到遇到 2。
在接收 2 时检查堆栈顶部是否为 1,然后将其从堆栈中弹出。继续弹出 1 直到处理输入字符串的所有 2 如果我们到达输入字符串的末尾并且堆栈变空,则到达最终状态,即接受输入字符串,否则进入死状态。
情况 4- m=0,n=0:
在这种情况下,输入字符串将为空。因此直接跳转到最终状态。
状态转移图: