compiler-construction - 编译器测试用例或如何测试编译器

标签 compiler-construction

像所有软件一样,编译器也容易出现错误和逻辑错误。

如何验证编译器生成的输出。通常,我的问题是

  • 如何验证生成的机器码是否正确?

  • 如何确保生成的机器代码符合语言规范。

  • 只选择一个开源项目(如果也用 C 语言编写编译器的话,则用 C 语言)来通过“编译器”对其进行编译是否有意义。在这种情况下,如何判断编译器的行为符合预期。

  • 语言标准委员会是否提供了“符合语言”的编译器必须满足的正式测试用例(文献)?

  • 编译器编译的程序中的问题是编译器错误而不是程序错误,有哪些确定的“泄露信息”。

    - 有没有主流编译器感到困惑并编译错误代码的例子?

任何文献的链接将不胜感激。

最佳答案

针对真实语言的良好测试套件的创建和维护成本很高。有一个原因 the Plum Hall test suite ,这是 ANSI C 的行业标准,太贵了。

乔治·内库拉的translation validation这是一个绝妙的想法,但实现起来也相当昂贵。

便宜又简单的一件事是:维护一套回归测试,并且每次修复编译器中的错误时,都将合适的测试放入回归套件中。对于编译器来说,一遍又一遍地重新引入相同的错误是多么容易,令人难以置信。对回归套件进行严格的添加可以防止这种情况发生,而且成本并不高。

关于compiler-construction - 编译器测试用例或如何测试编译器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1104922/

相关文章:

c++ - 是否有关于使用 C++ 编译器进行 C 编译的结论性研究/实验?

java - Eclipse 自定义 java 编译器

parsing - Bison/YACC vs. Lemon vs. 标准输入

c - g-wan 不更新 servlet 的依赖项

c - 我如何在 (GNU) C 中编写一个代理函数来连接两个不同的调用约定?

c++ - 编译器 libstdc++ 版本与系统版本

macos - MacOSX 10.6 上的 getline 崩溃 C 编译器?

c++ - 默认编译器生成引用运算符(在 C++ 中)?

C-程序抛出段错误

c++ - 在没有宏的情况下获取编译时日期和时间