微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

这个语法的PDA是什么?

如何解决这个语法的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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?