Size: a a a

Compiler Development

2021 January 22

GK

Georgy Komarov in Compiler Development
Pavel Meledin
Существует ли какой-то автоматический/полуавтоматический подход по воссозданию грамматики на основе исходного кода, полагая что исходный код корректен? Желательно собрать в то что можно скормить ANTLR'у или хотя бы в какой-то удобоваримый формат чтоб потом уже мануально перенести в парсер генератор
Подписался на вопрос, тоже очень интересно. :)

Но немного в другом контексте. Я пытаюсь написать фаззер для своего языка, который понимал бы входную грамматику для генерации синтаксически корректных программ.
На днях задавал вопрос на реддите, где среди прочего посоветовали Zest — утилиту для семантического фаззинга, которая интегрируется в AFL и xsmith — фреймворк для генерации программ с заданной грамматикой.
Посмотрите тред, может быть, найдёте что-то полезное для себя.

upd: поправил ссылку на тред.
источник

PM

Pavel Meledin in Compiler Development
Andrew Stupnikov
Нет гарантий что вы восстановите именно ту грамматику, которую вы ожидаете.
понимаю, но по идее чем более разнообразные примеры - тем выше вероятность восстановить исходную или более близкую грамматику, верно?
источник

AS

Andrew Stupnikov in Compiler Development
конечно. на гитхабе, наверное, можно восстановить грамматику c++
источник

AS

Andrew Stupnikov in Compiler Development
на объеме гитхаба
источник

GK

Georgy Komarov in Compiler Development
На xsmith у меня получилось написать простой генератор программ для подмножества языка, буквально за вечер. Очень простая штука. Но недостатки в том, что: 1) он очень медленный; 2) из коробки отсутствует возможность интеграции с AFL. Последнее, вроде бы, собираются добавить в следующие релизы.
источник

PM

Pavel Meledin in Compiler Development
Georgy Komarov
Подписался на вопрос, тоже очень интересно. :)

Но немного в другом контексте. Я пытаюсь написать фаззер для своего языка, который понимал бы входную грамматику для генерации синтаксически корректных программ.
На днях задавал вопрос на реддите, где среди прочего посоветовали Zest — утилиту для семантического фаззинга, которая интегрируется в AFL и xsmith — фреймворк для генерации программ с заданной грамматикой.
Посмотрите тред, может быть, найдёте что-то полезное для себя.

upd: поправил ссылку на тред.
о, благодарен. изучу
источник

FO

FORTRAN ONE LOVE in Compiler Development
Danya
Я думал lcc это закрытая разработка
У неё не открыт код?
Сорцы закрыты, но собранный компилятор можно найти в интернете
источник

PS

Peter Sovietov in Compiler Development
Pavel Meledin
о, благодарен. изучу
Начните отсюда: https://sci-hub.do/10.1109/icse-c.2017.14
источник

GK

Georgy Komarov in Compiler Development
FORTRAN ONE LOVE
Сорцы закрыты, но собранный компилятор можно найти в интернете
А из-за использования GPL-ных binutils не будет проблем? Или человек, запускающий компиляцию через compiler explorer, не считается за пользователя?
источник

PM

Pavel Meledin in Compiler Development
благодарю
источник

АЗ

Алексей Запольский... in Compiler Development
Спасибо
источник
2021 January 23

JT

James Tevision in Compiler Development
http://alexanius.ru/gcc_generic_3.html
Оператор ветвления
Мы создаем метки true_label / false_label

Но ведь если у нас будет много конструкций if-else
То у нас будет пересечение имен
Я правильно понимаю?
источник

JT

James Tevision in Compiler Development
Можно ли решить это добавлением еще одного лекс-блока, и привязки контекста объявлений к нему

Аля
if (var)
{}
else
{}
Оборачивается в
{
if (var)
{}
else
{}
}
Чтобы избежать пересечений контекста

Но что тгда будет с вложеными ифами?
источник

JT

James Tevision in Compiler Development
источник

A

Alex in Compiler Development
Генерируйте имена на ходу. Например, sprintf(label_name, "true_label_%d", N).

В примерах имя было взято для понимания того где какая ветвь расположена
источник

A

Alex in Compiler Development
Само по себе имя станет ассемблерной меткой (скорей всего, не проверял), там уже лексические блоки не помогут
источник

K

Kir in Compiler Development
James Tevision
http://alexanius.ru/gcc_generic_3.html
Оператор ветвления
Мы создаем метки true_label / false_label

Но ведь если у нас будет много конструкций if-else
То у нас будет пересечение имен
Я правильно понимаю?
Так надо уникальные имена генерировать. И, да, зачем транслироваться в ассемблер, если можно в C без всех этих меток?
источник

A

Alex in Compiler Development
Kir
Так надо уникальные имена генерировать. И, да, зачем транслироваться в ассемблер, если можно в C без всех этих меток?
Не очень понял про трансляцию в Си в контексте создания фронта для gcc
источник

K

Kir in Compiler Development
А, я думал, он что-то отдельное пишет
источник

JT

James Tevision in Compiler Development
Alex
Генерируйте имена на ходу. Например, sprintf(label_name, "true_label_%d", N).

В примерах имя было взято для понимания того где какая ветвь расположена
Печаль(

А как вообще в gcc с хранением имен переменных?
Я могу получить предыдущее объявление по ссылке, или мне надо собственную таблицу символов хранить?
источник