Я ищу инструмент, способный случайным образом генерировать программы C++. Я использовал генератор программ Csmith C для тестирования инструмента, который я разрабатываю, но теперь я хотел бы пойти дальше и протестировать случайно сгенерированный код C++. Обратите внимание, что меня не интересуют существующие тестовые наборы C++ (я уже использую некоторые).
Есть ли случайный генератор программ на С++?
Ответ 1
Здесь другое предложение для аналогичной программы (с включенным источником), которое используется для разработки компилятора. Вы, вероятно, можете обратиться к нему и разработать нечто подобное. ссылка
Произвольный генератор программ C/С++
- Создайте набор случайных типов, которые будут использоваться во всей программе.
- Создайте основную функцию.
- Генерирует случайный блок операторов с максимальным уровнем вложенности.
- Если новые функции были определены в # 3, затем вернитесь назад, чтобы заполнить его тело.
- Когда достигается максимальное количество функций, прекратите генерировать новые функции и завершите тела остальных функций.
- Выведенная сгенерированная программа.
ЦЕЛИ:
- Найдите основные ошибки в интерфейсах компилятора (сбои и т.д.)
- Ошибки ошибок Ferret в оптимизации проходят.
- Поддержка дизайна инструментов для поиска улучшенных путей оптимизации (частичное выполнение и т.д.)
Ответ 2
My manydl.c программа демонстрирует (в Linux), что программа может делать много (по крайней мере много сотен тысяч на рабочем столе) dlopen
-s. Он работает, создавая более или менее случайный код C (в большом количестве файлов), затем компилируя их и dlopen
-используя их, но я сконструировал генератор так, чтобы сгенерированные функции быстро заканчивались.
Вероятно, вы могли бы легко адаптировать его (например, сгенерировать некоторый код на С++).
Кстати, я чувствую, что генерация более или менее случайного кода на С++ довольно проста. Вам просто нужно создать случайный AST, а затем испустить его. Создание некоторого "полезного" кода на С++, вероятно, более сложное.
Кстати, моя программа MELT также может вас заинтересовать: это язык, специфичный для домена, для настройки GCC, и он работает, создавая довольно большие файлы на С++.
PS. Является ли ваш компилятор C или С++ свободным программным обеспечением? Я буду рад заглянуть внутрь...
Ответ 3
Да, Intel yarpgen генерирует случайные C++ программы.
Читателей также может заинтересовать RUGRAT, который делает нечто подобное для Java.