Нужно написать парсер на основе Lex/Yacc (точнее, Flex/Bison) для небольшого скриптового языка. Сама задача достаточно понятная, но совершенно непонятно, как для этого парсера сделать юнит-тест. На выходе Бизона там возвращается достаточно сложная структура данных, представляющая переменные, типы, и функции на промежуточном языке. Создавать набор эталонных структур для разных входных данных и потом сравнивать - это выйдет как бы не сложнее самого парсера. Может в синтаксических правилах вести какой-то лог разбора для тестирования? Сделать лог просто, непонятно только как потом на его основе что-то протестировать.
Ясно, что задача великовата для юнит-теста, но разбить на части ничего нельзя, а совсем без тестирования тоже не хочется. Может с этим кто-то сталкивался? Как эту задачу решают для взрослых компиляторов?
"cоздавать набор эталонных структур для разных входных данных и потом сравнивать" - вполне нормальный подход. Фишка в том, что расписывать выходные данные вручную не обязательно. Достаточно сериализовать (проверенный) выхлоп парсера и потом сравнивать с ним. Также некоторые тесты можно выполнять на варьирующихся входных данных, проверяя только некоторые свойства выхлопа а не его точное соответствие шаблону.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости