Programming languages 为什么我们要用上下文无关的语言编写程序?不应该';为了图灵完备,t程序必须使用递归可枚举语言吗?

Programming languages 为什么我们要用上下文无关的语言编写程序?不应该';为了图灵完备,t程序必须使用递归可枚举语言吗?,programming-languages,computer-science,computation-theory,formal-languages,Programming Languages,Computer Science,Computation Theory,Formal Languages,如果我们主要使用上下文无关的语言编写代码,我真的无法理解如何模拟图灵机(它接受递归枚举语言)的输出。你把程序的规范和输出混淆了 例如,可以接受递归枚举语言的图灵机仍然由有限转换函数或“规则表”指定。规则表本身可以用常规语言表示 同样,只有现代编程语言的基本语法完全由上下文无关语法定义。一个有效的程序必须满足语法无法捕捉到的许多条件:标识符必须在使用之前声明,函数只能定义一次,程序必须通过类型检查器,等等。与“稍微怀孕”没有意义一样,“大部分无上下文”没有意义。属性要么存在,要么不存在,对于我使用

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

你把程序的规范和输出混淆了

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

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

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


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

大多数编程语言都是上下文无关的。有些不是。哦,对了。对不起,我分析错了。