了解在 NPDA 中压入堆栈的字符串

Understanding the string pushed onto a stack in a NPDA

我正在学习 NPDA,坦率地说,我试图了解我在这个问题中看到的内容:

究竟是什么决定了 "aaz" 或 "aaa" 被压入堆栈?只要在读取 a b 时弹出它们,这有关系吗?

"aaz" 和 "aaa" 是有区别的,因为一个替换了 "z",另一个替换了堆栈顶部的 "a"。每个都具有单独保留最顶层堆栈符号并将另外两个 a 推到顶部的效果。 NPDA 的工作原理是,每看到一个 a 就将两个 a 压入堆栈,然后每看到一个 b 弹出一个 a。如果堆栈最终为空,您看到的 b 的数量一定是 a 的两倍。