为什么我们用上下文无关的语言编写程序?程序不应该是递归可枚举的语言才能完成图灵吗?



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

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

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

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

"

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

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

最新更新