先决条件——下推自动机,下推自动机被最终状态接受
下推自动机 (PDA) 在编译器设计中起着重要作用。因此有必要对 PDA 有一个很好的掌握。我们的目标是为 L = {0 n 1 m 2 m 3 n | 构建一个 PDA。 m,n ≥ 0}
例子 –
Input : 00011112222333
Output : Accepted
Input : 0001122233
Output : Not Accepted
本 PDA 中使用的方法 –
处理给定的输入字符串时可能有 4 种情况。
- 情况 1:m = 0 –在这种情况下,输入字符串的格式为 {0 n 3 n }。在这种情况下,继续将 0 压入堆栈,直到遇到 3。在接收 3 时检查堆栈顶部是否为 0,然后将其从堆栈中弹出 (0)。弹出 0,直到处理完输入字符串的所有 3。如果我们到达输入字符串的末尾并且堆栈变空,则到达最终状态,即接受输入字符串,否则进入死状态。
- 情况 2:n = 0 –在这种情况下,输入字符串的格式为 {1 m 2 m }。在这种情况下,继续将 1 压入堆栈,直到遇到 2。在接收 2 时检查堆栈顶部是否为 1,然后将其 (1) 从堆栈中弹出。继续弹出 1,直到处理完输入字符串的所有 2。如果我们到达输入字符串的末尾并且堆栈变空,则到达最终状态,即接受输入字符串,否则进入死状态。
- Case-3: m, n>0 –在这种情况下,输入字符串的格式为 {0 n 1 m 2 m 3 n }。在这种情况下,继续在堆栈中压入 0 和 1,直到遇到 2。在接收 2 时检查堆栈顶部是否为 1,然后将其从堆栈中弹出 (1)。继续弹出 1,直到处理完输入字符串的所有 2。然后在接收 3 时检查堆栈顶部是否为 0,然后从堆栈中弹出它 (0)。弹出 0,直到处理完输入字符串的所有 3。如果我们到达输入字符串的末尾并且堆栈变空,则到达最终状态,即接受输入字符串,否则进入死状态。
- 情况 4:m = 0,n = 0 –在这种情况下,输入字符串将为空。因此直接跳转到最终状态。
给定语言的最终下推自动机是: