我知道C ++不是可判定的。但它是递归可枚举的吗?
让我们将有效的C ++程序集定义为当前C ++标准下任何定义良好的程序。
是否有可能构建一个能够在有限时间内始终识别有效C ++程序的编译器?
或者它是否可以共同递归枚举?
是否有可能构建一个能够在有限时间内始终识别无效 C ++程序的编译器?
或者两者都没有?
答案 0 :(得分:2)
是否有可能构建一个能够在有限时间内始终识别有效C ++程序的编译器?
是。如果有足够的时间和资源,C ++编译器应该能够完成编译任何有效的C ++程序。递归可枚举的语言需要一个总是终止的图灵机,并在字符串是语言时提供肯定的答案,而编译器基本上就是这样。
是否有可能构建一个能够在有限时间内始终识别无效C ++程序的编译器?
没有。 C ++模板语言是Turing完成的,因此您可以在其中编写无限递归。由于暂停问题,无法确定程序是否会完成编译,因此无法确定C ++程序是否能够成功编译。
我曾经在C ++模板中写过一个无限递归,并试图用gcc编译。事实证明,gcc具有可配置的递归深度限制。