c++ - 人们说 C++ 有 "undecidable grammar"是什么意思?

标签 c++ compiler-construction

人们这样说是什么意思?对程序员和编译器有什么影响?

最佳答案

这与C++的模板系统是Turing complete有关。 .这意味着(理论上)您可以在编译时使用可以使用任何其他图灵完备语言或系统的模板计算任何内容。

这有一些明显有效的 C++ 程序无法编译的副作用;编译器将永远无法确定程序是否有效。如果编译器可以判断所有程序的有效性,它就可以解决Halting problem。 .

请注意,这与 C++ 语法的歧义无关。


编辑: Josh Haberman 在下面的评论和 blog post 中指出有一个很好的例子,为 C++ 构建一个解析树实际上是不可判定的。由于语法的歧义,无法将语法分析与语义分析分开,而语义分析是不可判定的,语法分析也是不可判定的。

另请参阅(来自 Josh 帖子的链接):

关于c++ - 人们说 C++ 有 "undecidable grammar"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/794015/

相关文章:

c++ - 在 C++ 中查看编译器损坏的名称

c++ - 哪些标志将改善 gcc/clang 编译时间?

c - 向 gcc 添加通行证?

c++ - Windows mobile和蓝牙编程SDK下载

c++ - typedef 和模板的 undefined symbol ?

c++ - __imp 链接错误使用 g++ 在 mingw 下运行

c++ - 有哪些不同的初始化方式

c - 如何从 clang 获取更细粒度的行/列调试信息?

eclipse - 如何让 Scala 编译器插件在 Scala IDE 中工作

c++ - 有没有办法检查标准库 c++ 中的队列何时已满?