【问题标题】:How to convert a CFG to a Turing Machine如何将 CFG 转换为图灵机
【发布时间】:2017-05-02 06:07:35
【问题描述】:

如何将 CFG 转换为 TM?我对如何将 DFA 转换为 TM 有一个基本的想法,但我想不出一种正确的方法。

我可以得到一些通用的实施步骤吗?

【问题讨论】:

标签: theory context-free-grammar turing-machines


【解决方案1】:
  1. 使用标准算法构建下推自动机 (PDA)。我不会详细介绍任何特定的结构(单独的问题会是一个更好的地方来介绍它),但您可以搜索“将 cfg 转换为 pda”并获得结果。一个例子是here

  2. 从 PDA 构建一个两带图灵机,如下所示:

    • 图灵机从左到右读取输入磁带(磁带 #1)
    • 图灵机使用第二个磁带作为堆栈,推动时向右移动,弹出时向左移动。
  3. 使用标准结构从两磁带机构建一个普通的单磁带图灵机。单磁带和双磁带 TM 等效的证明是建设性证明,您可以按照隐含的算法展示为您的 CFG 语言构建单磁带 TM。

【讨论】:

    【解决方案2】:

    CFG 产生的每个单词都可以写成解析树。如果你得到一个由 CFG 生成的字符串,那么这些就是你的解析树的叶子。要确定字符串是否由 CFG 生成,您只需从叶子到内部节点直到根。所以总的思路是把生产规则反过来。如果你可以到达根,那么字符串就是语法的一部分。如果您处于不适合转换产生规则的位置,则该词不是由 CFG 产生的。请注意,如果有不止一种可能性,您需要尝试所有可能性,如果其中一种可行,则字符串由 CFG 生成。如果都不行,那就不行。

    【讨论】:

    • 如果语法是左递归的,即使是间接的,这个答案的任何幼稚实现都可能无法停止。
    猜你喜欢
    • 2013-12-28
    • 2021-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-10
    • 2020-08-10
    • 1970-01-01
    相关资源
    最近更新 更多