【问题标题】:How to design NPDA for accepting these languages?如何设计 NPDA 来接受这些语言?
【发布时间】:2020-02-03 14:23:33
【问题描述】:

我想设计接受以下两种语言的 NPDA(非确定性下推自动机)。 请解释如何设计它们。

L(r) where r = abb*aba*
L(r) = {a^nb^2n : n > 0}

【问题讨论】:

    标签: computer-science automata


    【解决方案1】:

    第一个可能是这样工作的:

    1. 读取第一个状态的 a 并将 a 压入堆栈;过渡到新的状态
    2. 在第二个状态下读取 a b 并将 a b 压入堆栈;过渡到新的状态
    3. 永远在第三个状态下读取 b,每次都将 b 压入堆栈。如果您最终读取了 a,则转换到新状态并将 a 压入堆栈
    4. 在第四个状态下读取 b,将 b 压入堆栈;过渡到新的状态
    5. 永远读取处于第五个状态的 a,将 a 压入堆栈;在任何时候,不确定地转换到新状态
    6. 在第六种状态下,什么也不读,从堆栈中弹出东西。此状态正在接受,如果输入已被完全读取且堆栈为空,则 npda 接受输入字符串。

    第二个可能是这样的:

    1. 至少读取一个 a 并将其压入堆栈,然后转换到新状态
    2. 在第二个状态下一直读取 a,每次将一个 a 压入堆栈;如果你看到 b,就进入一个新的状态
    3. 在第三个状态下读取b,并从堆栈中弹出一个a;去一个新的状态
    4. 在第四个状态下读取b,不理会堆栈;回到第三个状态
    5. 在第三个和第四个状态下继续读取b,直到输入用完;如果您处于第四种状态,输入用完并且堆栈为空,那么 pda 才会接受输入字符串

    编辑:所需转换的大纲。

    第一个:

    q0 is initial
    (q0, a, Z) -> (q1, aZ)
    (q1, b, a) -> (q2, ba)
    (q2, b, b) -> (q2, bb)
    (q2, a, b) -> (q3, ab)
    (q3, b, a) -> (q4, ba)
    (q4, a, b) -> (q4, ab)
    (q4, a, a) -> (q4, aa)
    (q4, e, a) -> (q5, a)
    (q4, e, b) -> (q5, b)
    q5 is accepting
    

    第二个:

    q0 is initial
    (q0, a, Z) -> (q1, aZ)
    (q1, a, a) -> (q1, aa)
    (q1, b, a) -> (q2, a)
    (q2, b, a) -> (q3, e)
    (q3, b, a) -> (q2, a)
    q3 is accepting
    

    两个 NPDA 都设计为在堆栈为空且输入耗尽时处于接受状态。

    【讨论】:

    • 看不懂每个转场对应的转场函数。请告诉我如何确定针对前一种语言的转换函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-04
    • 1970-01-01
    • 1970-01-01
    • 2017-09-23
    • 1970-01-01
    • 1970-01-01
    • 2016-07-11
    相关资源
    最近更新 更多