【问题标题】:How come we write programs in context-free languages? Shouldn't programs be in recursively enumerable languages in order to be Turing complete? [closed]为什么我们用上下文无关语言编写程序?为了图灵完备,程序不应该是递归可枚举的语言吗? [关闭]
【发布时间】:2012-05-15 12:33:02
【问题描述】:

如果我们主要使用上下文无关语言进行编码,我真的无法理解如何模拟图灵机(它接受递归枚举语言)的输出。

【问题讨论】:

    标签: programming-languages computer-science computation-theory formal-languages


    【解决方案1】:

    您将程序的规范与其输出混淆了。

    例如,可以接受递归可枚举语言的图灵机仍然由有限转换函数或“规则表”指定。规则表本身可以用常规语言表示。

    再一次,只有现代编程语言的基本语法完全由上下文无关语法定义。一个有效的程序必须满足许多语法无法捕获的条件:标识符必须在使用之前声明,一个函数只能定义一次,程序必须通过类型检查器,等等。

    【讨论】:

      【解决方案2】:

      “大部分上下文无关”没有意义,就像“稍微怀孕”没有意义一样。该属性要么存在,要么不存在,对于我曾经使用过的任何编程语言,它都不存在。

      但这不是您可以在其中编写任意算法的原因。一种语言的源代码语法可能会或可能不会被特定的语法描述,但重要的是输入/输出行为。例如,打印 A^iB^iC^i 形式的字符串的程序可以用 Pascal 编写,即使这些字符串不构成上下文无关语言。但这可能的原因并不是 Pascal 语法比上下文无关(尽管这是真的),而是 Pascal 中构造的语义(最终,程序将在其上运行的冯诺依曼机器的概念)。

      【讨论】:

      • “大部分”在大多数编程语言中都是上下文无关的。有些不是。
      • 哦,对了。抱歉解析错误。
      猜你喜欢
      • 2016-01-23
      • 1970-01-01
      • 2012-03-16
      • 2021-09-18
      • 1970-01-01
      • 1970-01-01
      • 2021-09-12
      • 1970-01-01
      • 2011-03-04
      相关资源
      最近更新 更多