C ++是一种递归可枚举的语言吗?

时间:2014-03-15 05:13:49

标签: c++ computation-theory turing-complete decidable

我知道C ++不是可判定的。但它是递归可枚举的吗?

让我们将有效的C ++程序集定义为当前C ++标准下任何定义良好的程序。

是否有可能构建一个能够在有限时间内始终识别有效C ++程序的编译器?

或者它是否可以共同递归枚举?

是否有可能构建一个能够在有限时间内始终识别无效 C ++程序的编译器?

或者两者都没有?

1 个答案:

答案 0 :(得分:2)

是否有可能构建一个能够在有限时间内始终识别有效C ++程序的编译器?

是。如果有足够的时间和资源,C ++编译器应该能够完成编译任何有效的C ++程序。递归可枚举的语言需要一个总是终止的图灵机,并在字符串是语言时提供肯定的答案,而编译器基本上就是这样。

是否有可能构建一个能够在有限时间内始终识别无效C ++程序的编译器?

没有。 C ++模板语言是Turing完成的,因此您可以在其中编写无限递归。由于暂停问题,无法确定程序是否会完成编译,因此无法确定C ++程序是否能够成功编译。

我曾经在C ++模板中写过一个无限递归,并试图用gcc编译。事实证明,gcc具有可配置的递归深度限制。