【问题标题】:can i push two symbols to the stack of a pushdown automata?我可以将两个符号推入​​下推自动机的堆栈吗?
【发布时间】:2020-06-12 05:37:49
【问题描述】:

我想知道对于给定的下推自动机,初始符号或 Z0 是 y,当我在转换期间从字符串链中读取“a”时,是否可以堆叠两个 X?

假设我有一个转换函数,如下所示:(s1, a, y) -> (s2, e, xxy)。这样的过渡有效吗?这是一个油漆图像,以便更好地理解,以防它仍然不清楚。

其中 Z0 = Y

【问题讨论】:

    标签: context-free-grammar computation-theory pushdown-automaton context-free-language


    【解决方案1】:

    这实际上是您如何定义 PDA 的问题 - 您选择使用哪些约定。通常,我认为惯例是一个过渡推动一个符号。但是,允许推送任意字符串不会增加 PDA 模型的功能(尽管它可以减少所需状态的数量)。要了解这一点,请使用任何将长度大于 1 的字符串压入堆栈的 PDA。通过引入具有空/lambda/epsilon 转换的附加状态以一次推送一个符号,可以将此 PDA 转换为将长度最多为一个的字符串推送到堆栈上的 PDA。这甚至不会将 DPDA 转变为 NPDA,因为如果在转换之前是这种情况,那么在任何给定时间,在新 PDA 中最多只能进行一次转换。

    事实上,用于显示 PDA 可以接受 CFG 语言的结构显式依赖于能够在一次转换中推送任意长度的字符串。该构造通过推动开始符号然后不确定地推动非终结符的产生来工作。由于生成的 RHS 通常比一个符号长,如果生成的 PDA 必须为每个生成具有单独的状态路径,则构造会更加丑陋。通过允许推送任意长度的字符串,该构造为任何 CFG 生成一个两态 NPDA。

    【讨论】:

    • 我想了解的是,这个自动机是同时推送两个符号还是只推送一个,因为在正式定义中,并没有说它推送两个符号,它只是将 Z0 定义为 y,堆栈字母是“x”和“y”,转换字母是“a”和“b”。因此,在视觉表现上,它给我的印象是两个符号,就像油漆图像一样。但是,它还有其他状态,最终每次转换只会弹出一个符号,因此,我不确定。实际上是一次堆叠两个符号,还是一次堆叠一个?
    猜你喜欢
    • 1970-01-01
    • 2012-10-15
    • 2011-04-22
    • 2015-04-09
    • 2014-03-03
    • 1970-01-01
    • 2018-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多