-
Есть ситуации, когда надо разобрать язык с одной стороны нерегулярный, а с другой — всё равно с грамматикой из четырёх-пяти правил. Причём задача такая, что и парсер с отдельной грамматикой генерить влом, да и вообще нормальную программу писать влом, а хотелось бы простенький скрипт. И руками парсер писать тоже, кстати, влом, если что.
Во многих языках регулярные выражения хорошо встраиваются прямо в код. С грамматиками хуже.
Накидайте плиз каких-нибудь библиотек для разных скриптовых языков, которые позволяют прямо в коде скрипта описывать грамматику, и тут же польховаться парсером, по ней динамически сгенерённым.
Replies (15)
-
@L29Ah, Да я более того, видел на работе, как один перец бэкенд написал для компилятора языка (кстати функционального, и кстати в котором вполне чистые функции проверяются легко), который генерил Хаскелль. И у него все функции были с IO. Чудесно конечно, но на хрена тогда вообще Хаскелль нужен? %)
-
@dluciv, Я такое на Icon пишу. Там есть откаты, но язык ближе к императивным, чем Пролог. Для синтаксических элементов делаются функции, которые, может быть, распарсят, начиная с текущей позиции (и тогда вернут результат и изменят текущую позицию), а может быть, нет, и тогда откатят состояние назад. Если несколько таких функций записать через «или», получаем парсинг методом проб и ошибок разных вариантов. Если через «и» — то парсинг подряд идущих синтаксических элементов. Если нам нужны промежуточные результаты, объявляются локальные переменные, а вызовы функций заворачиваются в присваивание./10 · Reply
-
@L29Ah, В таком случае эта библиотека должна воспроизводить все элементы некоего языка программирования, будучи его альтернативным синтаксисом.
Посмотрел API Parsimmon. Там, когда возможностей не хватит, Parsimmon.lazy(f) придётся использовать, вылетая в JavaScript. А Icon сам по себе — язык программирования, без вылетов куда–либо. Всё на нём делается.