如何解决这个语法的PDA是什么?
对于下面给出的语法,获得相应的PDA:
S -> aABB | aAA
A -> aBB | a
B -> bBB | A
C -> a
我尝试解决它,但显然它不正确。如果有人知道如何解决它,请帮助我。
解决方法
我们可以尝试编写一个漂亮的 PDA,以高效和惯用的方式接受语言,或者我们可以直接使用算法从语法中生成 PDA。我们只会用算法的方式,因为另一种方式很难。
我们的 PDA 可以进行转换,首先将开始符号压入堆栈,然后继续使用产生式的 RHS 不确定地替换栈顶符号并消耗输入,直到所有路径都结束或输入在堆栈清空的同时耗尽,在这种情况下我们接受。这个 PDA 看起来像这样:
q s St q' S' comment
q0 - Z0 q1 SZ0 put the start nonterminal on the stack
q1 - Sx q1 aABBx production S -> aABB
q1 - Sx q1 aAAx production S -> aAA
q1 - Ax q1 aBBx production A -> aBB
q1 - Ax q1 ax production A -> a
q1 - Bx q1 bBBx production B -> bBB
q1 - Bx q1 Ax production B -> A
q1 - Cx q1 ax production C -> a
q1 a ax q1 x consume terminal symbol a
q1 b bx q1 x consume terminal symbol b
q1 - Z0 q2 Z0 transition to accepting state
让我们通过沿着将接受它的路径跟踪字符串 aaaa 的执行来看看这个 PDA:
q input St comment
q0 aaaa Z0 initial configuration
q1 aaaa SZ0 wrote the start nonterminal to the stack
q1 aaaa aABBZ0 popped S and replaced with RHS of production
q1 aaa ABBZ0 popped a,consumed input,did not replace
q1 aaa aBBZ0 popped A and replaced with RHS of production
q1 aa BBZ0 popped a,did not replace
q1 aa ABZ0 popped B and replaced with RHS of production
q1 aa aBZ0 popped A and replaced with RHS of production
q1 a BZ0 popped a,did not replace
q1 a AZ0 popped B and replaced with RHS of production
q1 a aZ0 popped A and replaced with RHS of production
q1 - Z0 popped a,did not replace
q2 - Z0 transitioned to accept state
这种结构通常有效,虽然在许多情况下它不会产生最好或最直接的 PDA,但无论如何它肯定不是一个糟糕的 PDA。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。