如何将 CFG 转换为图灵机

How to convert a CFG to a Turing Machine

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

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

CFG的每一个产生的词都可以写成一个解析树。如果你得到一个由 CFG 产生的字符串,这些就是你的解析树的叶子。要确定字符串是否由 CFG 生成,您只需从叶子到内部节点直到根。所以一般的想法是扭转生产规则。如果你能到达根,那么这个字符串就是语法的一部分。如果您所处的位置没有适合的转向产生式规则,则 CFG 不会产生该词。请注意,如果有不止一种可能性,您需要尝试所有可能性,如果有一种可行,则字符串由 CFG 生成。如果 none 有效,则无效。

  1. 使用标准算法构建下推自动机 (PDA)。我不会详细介绍任何特定结构(一个单独的问题会更好地涵盖它),但您可以搜索 "convert cfg to pda" 并获得结果。一个例子是 here.

  2. 从 PDA 构造一个双带图灵机如下:

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