Тестовые примеры компилятора или как проверить компилятор

Компиляторы, как и все программное обеспечение, также будут подвержены ошибкам, логическим ошибкам.

Как проверить вывод, сгенерированный компилятором. Как правило, мой вопрос (есть)

How to validate that the machine code generated is correct?

How to ensure that the machine code generated is according to the language specification.

Does it make sense to just pick an open source project (in C if one is also writing a compiler in C) to just compile it through the "compiler". In that case also, how do judge that the compiler is behaving as expected.

Are there any formal test cases (literature) provided by the language standards committee that a "language complying" compiler has to satisfy?

What are the sure "give aways" that the problem in a program compiled by a compiler is a compiler bug and not a program bug.

- Any examples where mainstream compilers get confused and compile the code wrong?

Ссылки на любую литературу будут оценены.

Большой проприетарный тестовый набор:solidsands.nl/supertest-general

Ответы на вопрос(7)

более ранний вопрос, связанный с этим для C, но это сводится к тщательно написанному набору тестов компилятора.

Что касается того, когда компиляторы ошибаются в коде, я достаточно часто сталкиваюсь с этим в моей профессиональной карьере, спасибо. Это происходило все реже, ноЯ нашел ошибку в компиляторах MS C ++, нацеленных на CLI на этой неделе.

мм, каждая из которых демонстрирует один из аспектов компилятора. Они будут включать в себя как программы, которые компилируются, так и те, которые не должны. Обычно ASM, выходящий из серверной части, не проверяется, а программа запускается, и ее выходные данные проверяются. Что касается того, как убедиться, что в тестовых примерах нет ошибок: сделайте их маленькими, по 5-10 строк в каждой.

Эти наборы тестов могут быть очень большими, например, от сотен до тысяч тестов (например:устаревший набор тестов для языка программирования D) и обычно включают один или несколько тестовых случаев для каждой ошибки, когда-либо сообщенной.

 Aditya Sehgal10 июл. 2009 г., 07:58
не странно ли, что что-то подобное не стандартизировано или, по крайней мере, предпринимаются усилия для его стандартизации.
 Aditya Sehgal09 июл. 2009 г., 20:18
но если я создаю небольшие исходные файлы и проверяю их по отдельности, как это гарантирует, что все они будут работать, когда являются частью одной и той же программы. Как например, я беру проект с открытым исходным кодом и позволяюmy компилятор на нем болтается.
 09 июл. 2009 г., 20:29
Это не так. Но гораздо более вероятно, что ваш компилятор потерпит неудачу в одной из небольших программ. Невозможно доказать, что компилятор может правильно скомпилировать любой данный источник - это было бы эквивалентно решению проблемы остановки.
 09 июл. 2009 г., 20:37
Как правило, вы получаете смесь тестовых наборов, сгенерированных из спецификации языка (в основном очень маленьких), а также из ошибок (таких маленьких, как можно воспроизвести случай воспроизведения). Что касается знания вещей, которые будут работать во всех случаях, я не уверен, что вы можете (для большинства языков) даже доказать, что спецификация соответствует, не говоря уже о том, что она реализована правильно.
Решение Вопроса

ользованиемСливовый зал набор тестов для компилятора Си. Он состоит из большого набора кода C, специально написанного для проверки на соответствие стандарту языка. Он проверяет, что компилятор может обрабатывать синтаксис и семантику языка.

 Aditya Sehgal14 июл. 2009 г., 13:19
Не отвечает на все, но ссылка отличная. Благодарю.
 13 мар. 2018 г., 03:57
Любая альтернатива Plum Hall с открытым исходным кодом?

обслуживании. Есть причина, по которойтестовый набор Plum Hall, который является промышленным стандартом для ANSI®, настолько чертовски дорог.

Джордж Некулапроверка перевода это блестящая идея, но также довольно дорогая для реализации.

Единственное, что дешево и легко, так это: поддерживать набор регрессионных тестов иevery time you fix a bug in your compiler, put a suitable test into your regression suites, С компиляторами невероятно, как легко продолжать повторять одну и ту же ошибку снова и снова. Дисциплинарные дополнения к вашему набору регрессии предотвратят это, и они не будут стоить дорого.

еку тестовых примеров и внутренних контрактов на разработку.

http://dev.eiffel.com

Вы можете взять проект, который сам имеет набор тестов. Затем вы компилируете проект и его набор тестов и смотрите, пройдены ли тесты. Чтобы проверить эти результаты, вы компилируете проект и набор тестов с другим компилятором и снова запускаете тесты.

Ваш ответ на вопрос