Bison/Yacc

Mar 20, 2018 03:00

Перевыложил старую помесь бизона с лимоном.
https://sourceforge.net/p/casini/git/ci/master/tree/

На самом деле отгрузил её более трёх лет назад, но каким-то образом забыл сделать add для одного из файлов, поэтому, оно лежало там просто мёртвым грузом, до тех пор пока я не смог доехать до своего старого компа - взять нужные файлы. И оно, ещё работает, вот пример отладочного файла:

https://sourceforge.net/p/casini/git/ci/master/tree/lalr/dump.html?format=raw

Очень старая штука, за 10 лет, успевает полностью поменяться и c++ и ты сам, было свободных три дня или неделя, многое бы переписал. Помню как пытался поднять скорость этой штуки, специальная тестовая грамматика огромного размера, заставляла эту штуку работать, целые секунды, и всё зря. Сейчас мой рабочий компьютер, прогоняет всё это за нулевое время.

Вкратце это просто парсер-генератор, переделанный под мои вкусы, по факту он совместим с Bison, но есть плюшки: сжатие созданных таблиц; не надо указывать терминалы/не-терминалы, всё это, включая вывод типов определяется автоматом; не буквенные слова не надо заключать в кавычки. Ещё есть тонны синаксически-математического сахара: как-то указание унарных операций; автоматическая оптимизация грамматики; удобное задание циклов и разной другой ерунды, без необходимости выписывать это через грамматику. Всё что там когда было напридумано, перечислять очень долго.

И было море далеко идущих планов, как-то дополнительные машины для автомата - т.е. дополнительно LL(k), и GLR грамматики. Кажется, ещё надо было довести до ума механизм деструкторов, которые я стащил из лимона. Допридумывать это можно бесконечно, кроме того это весело. GLR решается незамысловато на уровне, генерируемого кода. А LL(k), как показывает мой очень скромный опыт, очень слабая грамматика, которая пасует в очень простых ситуациях, там где с LALR не возникает никаких проблем, но прицепить, было бы очень интересно.
Previous post Next post
Up