为以下语法设计 NDPA(下推自动机)

Posted

技术标签:

【中文标题】为以下语法设计 NDPA(下推自动机)【英文标题】:Design the NDPA for the following grammar (Pushdown Automata) 【发布时间】:2020-06-01 13:22:32 【问题描述】:

我正在尝试为以下语法设计 NDPA。我很困惑。你能帮帮我吗?

∑ = a,b    

G = (V,∑,R,S)
V = S,T,X

S -> aTXb
T -> XTS|ε
X -> a|b

【问题讨论】:

请将语法复制到问题正文中,而不是链接图片。这样我们会更容易回答。 @Patrick87 对不起,我是新来的。我现在已经编辑了。 【参考方案1】:

至少有两种方法:尝试弄清楚该语言是什么,然后写出适用于该语言的高效 PDA;或者,如果您很懒惰,您可以作弊并使用证明 NPDA 至少与 CFG 一样强大的构造。让我们做后者,因为这种语言似乎不太容易描述。

要使用该构造,请构建一个执行以下操作的 NPDA:

    首先,按下非终结符开始符号 S 接下来,从堆栈中弹出 如果符号是终端,则从 NPDA 的输入中使用该符号并且什么也不推送 如果符号是非终结符,则不确定地推动符号的每个产生式的右侧,并且不消耗任何输入 重复步骤 2 直到崩溃(您不能从输入中消耗与弹出的终端符号匹配的符号)或输入用完。如果您用空堆栈用完输入,则接受。否则,如果您崩溃或堆栈最后仍有东西,请拒绝。

这种构造通过非确定性地构造语法中所有可能的推导来工作。 NPDA 接受一个字符串当且仅当某个非确定性路径接受它;如果根据语法有一个有效的推导,那只会发生在我们的 NPDA 上。根据定义,语法的语言正是具有有效推导的字符串集合,所以我们完成了。

【讨论】:

以上是关于为以下语法设计 NDPA(下推自动机)的主要内容,如果未能解决你的问题,请参考以下文章

有限自动机、下推自动机和图灵机示例

ios自动布局:动态宽度应该用SnapKit下推第二个标签,正确的方法

编译原理随笔4(自下而上的语法分析-递归法)

Apifox写接口自动化测试用例总结-1

WebUI 自动化测试的经典设计模式:PO

锻造设计自动化:缺少输出文件