【问题标题】:DFA to PDA conversionDFA 到 PDA 转换
【发布时间】:2011-03-12 23:53:48
【问题描述】:

我正在寻找一种将确定性有限自动机转换为下推自动机的算法。

任何帮助表示赞赏。

谢谢!

【问题讨论】:

    标签: dfa pushdown-automaton


    【解决方案1】:

    DFA 的 PDA 版本看起来是一样的,只是每个状态转换也不向堆栈推送任何内容,也不从堆栈中弹出任何内容。

    【讨论】:

    • +1..您也可以在 PDS 符号中为 DFA 中的每个状态引入符号。
    • 任何具有N 状态的有限自动化都可以模拟为2 状态PDAN 堆栈符号。 ..虽然你的答案很简单/
    【解决方案2】:

    由于 PDA 是 DFA 的扩展,只有一个附加功能:堆栈。 因为 PDA 的转换由三元组(当前状态、输入、堆栈顶部的元素)决定,而 DFA 的转换由元组(当前状态、输入)决定。唯一的区别是堆栈顶部的元素。您可以通过将元组转换为三元组来转换 DFA 的所有转换,e(空字符串)作为 堆栈顶部的元素插入

    并且在改变状态后,将e(空字符串)压入栈中。

    【讨论】:

      【解决方案3】:

      我正在回答这个老问题,以防其他人看到它。

      只需添加一个堆栈,就可以轻松地将 DFA 转换为 PDA。但是 DFA 的语义可能会发生变化,并且在您手动更改它之后,您最终可能会得到一个状态数较少的 PDA。我最近遇到了这个问题。有点像这样,

      在系统(不是编译器或类似的东西)中,由于某些原因,之前编写的代码是使用 DFA 编写的。当用户使用各种功能完成代码时,就会发生转换。一段时间后,一组新的转换函数出现了,可以按任何顺序使用。并且这些新功能中的任何一个之后的状态都可以通过这些功能之一变回以前的状态。使用 FST 解决这个问题的唯一方法是添加大量新状态来支持这种行为,这是一项巨大的工作。但相反,我只是从 DFA 更改为 PDA。堆栈非常好地跟踪转换,并且以更少的状态解决了问题。实际上我只需要添加 N 个状态,其中 N 是到达的新函数的数量。

      我不知道是否有人可以轻松地自动化这种过程。但是你去吧,以防有人对此感到好奇。

      【讨论】:

        【解决方案4】:

        wikipedia article

        下推自动机不同于有限 状态机有两种方式:

        1. 他们可以使用堆栈的顶部来决定哪个过渡到 拿走。
        2. 他们可以在执行转换的过程中操纵堆栈。

        下推自动机选择一个转换 通过输入信号索引表, 当前状态,以及在 栈顶。这意味着 这三个参数完全 确定过渡路径是 选择。有限状态机只是 看看输入信号和 当前状态:他们没有堆栈 一起工作。下推自动机添加 堆栈作为参数供选择。

        ...
        下推自动机等价于 上下文无关文法:对于每个 上下文无关文法,存在一个 下推自动机使得 语法生成的语言是 与生成的语言相同 由自动机,这很容易 证明。反之亦然 更难证明:每次下推 自动机存在一个上下文无关的 语法使得语言 自动机生成的是 与生成的语言相同 根据语法。

        【讨论】:

        • 这个问题不是很精确,他没有透露任何关于他尝试过什么或知道什么的信息。维基百科文章包含很多信息(我怎么知道他是否读过这个?)。而且从仅仅阅读摘录来看,学习上下文无关的语法似乎是有帮助的。 “任何帮助表示赞赏”使可能有用的标准非常低。
        • 他的问题是 100% 清楚的。当然他没有给出任何代码,但那是因为他正在寻找描述如何将 DFA 转换为 PDA 的算法。没有比这更清楚的了。维基百科文章没有给出这样的算法。
        • 呃,已经有一段时间了。 @hlovdai - 我知道维基百科的存在。我看不出复制粘贴有什么意义:) 我自己或多或少地解决了这个问题。如果有人感兴趣,这里是我的代码(C#),它产生 NFA、DFA、N-PDA 和 Deterministic PDA(仍然有些错误)。 dl.dropbox.com/u/1855144/Parser.7z 不幸的是,解析/编译器的信息非常稀缺。希望,这会对某人有所帮助。
        猜你喜欢
        • 1970-01-01
        • 2020-08-10
        • 2018-07-09
        • 2019-10-18
        • 1970-01-01
        • 2011-11-19
        • 2014-10-23
        • 2013-09-07
        • 2020-06-03
        相关资源
        最近更新 更多