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

时间:2012-05-15 12:33:02

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

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

2 个答案:

答案 0 :(得分:9)

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

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

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

答案 1 :(得分:4)

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

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