Подтвердить что ты не робот

Есть ли случайный генератор программ на С++?

Я ищу инструмент, способный случайным образом генерировать программы C++. Я использовал генератор программ Csmith C для тестирования инструмента, который я разрабатываю, но теперь я хотел бы пойти дальше и протестировать случайно сгенерированный код C++. Обратите внимание, что меня не интересуют существующие тестовые наборы C++ (я уже использую некоторые).

4b9b3361

Ответ 1

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

Произвольный генератор программ C/С++

  • Создайте набор случайных типов, которые будут использоваться во всей программе.
  • Создайте основную функцию.
  • Генерирует случайный блок операторов с максимальным уровнем вложенности.
  • Если новые функции были определены в # 3, затем вернитесь назад, чтобы заполнить его тело.
  • Когда достигается максимальное количество функций, прекратите генерировать новые функции и завершите тела остальных функций.
  • Выведенная сгенерированная программа.

ЦЕЛИ:

  • Найдите основные ошибки в интерфейсах компилятора (сбои и т.д.)
  • Ошибки ошибок Ferret в оптимизации проходят.
  • Поддержка дизайна инструментов для поиска улучшенных путей оптимизации (частичное выполнение и т.д.)

Ответ 2

My manydl.c программа демонстрирует (в Linux), что программа может делать много (по крайней мере много сотен тысяч на рабочем столе) dlopen -s. Он работает, создавая более или менее случайный код C (в большом количестве файлов), затем компилируя их и dlopen -используя их, но я сконструировал генератор так, чтобы сгенерированные функции быстро заканчивались.

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

Кстати, я чувствую, что генерация более или менее случайного кода на С++ довольно проста. Вам просто нужно создать случайный AST, а затем испустить его. Создание некоторого "полезного" кода на С++, вероятно, более сложное.

Кстати, моя программа MELT также может вас заинтересовать: это язык, специфичный для домена, для настройки GCC, и он работает, создавая довольно большие файлы на С++.

PS. Является ли ваш компилятор C или С++ свободным программным обеспечением? Я буду рад заглянуть внутрь...

Ответ 3

Да, Intel yarpgen генерирует случайные C++ программы.

Читателей также может заинтересовать RUGRAT, который делает нечто подобное для Java.