我正在寻找一种将确定性有限自动机转换为自动下推的算法。
任何帮助表示感谢。
谢谢!
答案 0 :(得分:3)
DFA的PDA版本看起来是一样的,除了每个状态转换也不会在堆栈上任何东西推送,并且不会从堆栈中弹出任何东西。
答案 1 :(得分:1)
由于PDA是DFA的扩展,只有一个附加功能:堆栈。
因为PDA的转换由三重(当前状态,输入,堆栈顶部的元素)确定,而DFA的转换由元组(当前状态,输入)确定。唯一的区别是堆栈顶部的元素。您可以通过将元组转换为三元组来转换DFA的所有转换,e
(空字符串)作为堆栈顶部的元素插入
更改状态后,将e
(空字符串)推送到堆栈。
答案 2 :(得分:0)
我正在回答这个老问题,以防其他人看到它。
只需添加堆栈,即可轻松实现DFA到PDA的转换。但是可能会对DFA的语义进行更改,并且在您手动更改它之后,您最终可能会进入状态较少的PDA。我最近遇到了这个问题。它有点像这样,
在系统(不是编译器或类似的东西)中,由于某些原因,之前编写的代码是使用DFA编写的。当用户使用各种功能通过代码进行转换时发生转换。一段时间后,会出现一组新的转换函数,可以按任何顺序使用。以及任何这些新功能可以通过这些功能之一改变回先前状态之后的状态。使用FST解决此问题的唯一方法是添加大量新状态以支持此行为,这是我的大量工作。但我只是从DFA改为PDA。堆栈可以很好地跟踪转换,并且可以通过少得多的状态来解决问题。实际上我只需要添加N个状态,其中N是到达的新函数的数量。
我不知道是否有人可以轻松地自动化这种过程。但是你去了,以防有人对此感到好奇。
答案 3 :(得分:-1)
下推自动机不同于有限 状态机有两种方式:
- 他们可以使用堆栈顶部来决定转换到哪个 取。
- 他们可以在执行转换过程中操纵堆栈。
醇>下推自动选择过渡 通过输入信号索引表, 当前状态,以及符号 堆栈顶部。这意味着 完全是这三个参数 确定过渡路径 选择。有限状态机只是 看看输入信号和 当前状态:他们没有堆栈 与...合作。下推自动机添加 堆栈作为选择的参数。
...
下推自动机相当于 无上下文语法:适合每一个人 无上下文语法,有一个 下推自动机这样的 语法生成的语言是 与生成的语言相同 由自动机,这很容易 证明。但事实恰恰相反 更难证明:每次下推 自动机存在无上下文 语法这样的语言 自动机生成的是 与生成的语言相同 通过语法。