Сообщество Функциональное программирование
Лента блогов Функциональное программирование

Опять о parser комбинаторах: еще не в индустрии
rssh, 01.03.2010Итак, использование parser комюбинаторов - это способ, с помощью которого можно быстро слелать парсер для какого-то языка. Об этом написано в всех блогах, в сети выложено штук 30 разных проектов с использованием фичи: казалось бы прекрасно. Но
ни в одном из опубликованных в сети примеров не реализованна функциональность запоминания имени файла и номера строки в дереве разбора. С другой стороны, держать выражения на DSL без отладки в индустриальном программировании немыслимо. То есть весь этот код в сети это просто иллюстрации к статьям и в реальной жизни не используется.
как ни странно, стандартная бибилиотека scala поддерживает функциональность установки номеров строк. И пользоваться этим просто и легко (в Parsers определен преобразователь positioned, устанавливающий Position в результат отработавшего комбинатора), но: читаем исходный код реализации по умолчанию и плачем: http://lampsvn.epfl.ch/trac/scala/browser/scala/tags/R_2_7_7_final/src/library/scala/util/parsing/input/OffsetPosition.scala?view=markup
Для того что бы узнать номер строки, мы разбиваем весь буфер на строки ... в каждой позиции, то есть для каждого token мы будем делать разбиение строк ранее прочитанного буфера заново, и для текста в N лексем, где для простоты каждая лексема на своей строке, мы проитерируем так N*(N-1)/2 строк. [Это вместо того что бы держать одну переменную для подсчета количества строк.]
Теперь понятно почему это всюду отключено ... но блин, получается что использовать это еще нельзя ? Или тратить пару недель на правки стандартной библиотеки ?
То есть все-таки дистанция между функциональщиной и производственным языком, на котором можно просто хреначить, еще достаточно велика. Технологии развиваются по пути наименьшего сопротивления, и получается что основное русло использования языка включает отлаженную алгебру типов высших порядков и объединенный механизм событийного и потокового управления, но не примитивную выдачу правильного номера строки при разборе текста. .... Ну что еще сказать.
Работает на базе feedparser.
