TreeDL — язык описания структуры деревьев

treedl.png
Эпиграф: не потому, что других идей нет, а потому, что эта — любимая. (с) забыл чей

На прошлой неделе выпустил новую версию TreeDL 2.3.2. Предыдущую версию за 16 месяцев скачали ну от силы 250 раз. За два дня после выхода этой по статистике SourceForge было скачано 120 файлов, причем новую версию скачали меньше 20 раз. Проект выскочил в Top500.
При этом сообщений о выходе новой версии нигде не было. Анонс в список рассылки я отправил уже после этого ажиотажа, да и подписчиков там 4 человека всего. На вебе никаких новых ссылок на проект, вроде, не появилось. Интересно, откуда взялась такая активность? Есть предположение, что это какой-то робот ходит, но я о таких не слышал.

TreeDL — это мой проект, который появился для облегчения работы над основными проектами по разработке трансляторов.

Трансляторы и компиляторы — это программы, которые с одной стороны имеют довольно большой размер (чем сложнее входной язык, тем больше размер его анализатора и кодогенератора), а с другой стороны обладают достаточно регулярной структурой (все конструкции языка обрабатываются схожим образом). Эта регулярность дает возможность атоматизировать разработку. Самый известный пример — генераторы лексических и синтаксических анализаторов, начиная с классических lex/yacc.
Помимо анализатора транслятор включает генератор кода (если это код на машинном языке, то транслятор называют компилятором). Если обработка языка сравнительно простая, то генерация кода происходит одновременно с разбором входной программы, такие трансляторы называют однопроходными. В более сложных случаях результатом анализа является внутреннее представление входной программы, чаще всего в виде дерева. Генератор кода обходит это дерево и создает результирующий код.
Оказалось, что структуру дерева внутреннего представления неудобно описывать на языке программирования общего назначения (например, Java). Пришлось придумать небольшой специализированный язык (DSL — domain-specific language) TreeDL, который дает возможность создавать компактное описание в виде набора структур с одиночным наследованием (классов с полями, но без методов). По этому описанию генерируется код на основном языке программирования. Дополнительно значительный выигрыш дает генерация всяких вспомогательных компонентов, связанных с деревом — обходчиков, фабрик, реализация интерфейсов для совместного использования с другими компонентами (например, TemplateModel для FreeMarker). Генерация кода дополнительных компонентов осуществляется подключением плагинов к транслятору TreeDL.
TreeDL v2 активно используется в проектах UniTESK и показал себя достаточно стабильным. При подготовке диссертации (защитился в конце 2006 года) появились новые идеи, которые не вписываются в рамки нынешней реализации. Взялся-таки за разработку TreeDL v3, но времени мало, когда что-то созреет — непонятно. А совсем бросать — тоже жалко.

29.07.2007  Метки:   Рубрики: Разработка, Языки

Написать комментарий