Когда мне потребовалось унифицировать один из модулей некоей программы, мне пришло в голову написать свой ЯП. Глупо и не разумно(разумнее например поискать решение в гугле), зато интересно. Итак,
XTX – специализированный декларативный язык программирования, предназначенный для обработки текстов.
Специализированный – значит, не предполагается, что на нем нужно писать программу для смены обоев или звонилку-напоминалку. Этот язык предназначен для написания программы, работающих по принципу text -> text. Его можно назвать прямым аналогом XSLT, только XSLT преобразует xml -> xml.
Приведем описание ключевых аспектов языка
Типизация
XTX – язык со строгой и неявной типизацией. Это означает, что каждая ячейка в языке всегда имеет строгий тип данных, но, тем не менее типы не проверяются на этапе разбора, а проблемы преобразования выявляются только в run-time.
Парадигма
Как уже отмечалось выше, язык декларативный, с элементами функционального(впрочем оные элементы появятся позже)
Синтаксис
Не хотелось бы тратить время на написание самого парсера для языка. Это связано не с ленью – просто тема настолько изжевана, что тратить на это время еще раз просто не имеет смысла. Поэтому синтаксис языка(как и XSLT), полностью наследуется от XML. Что-то мне подсказывает, что использовать для синтаксиса функционального языка программирования XML – весьма здравая идея, ибо XML очень удобен для кодирования деревьев.
Среда выполнения
XTX – транслируемый язык программирования. Транслятор языка написан на C#.
Масштаб
Цель создания этого языка – не порабощения мира или там создание мега стандарта. Если кому-то понравится применять язык в той или иной области – круто. Если нет, не страшно, ибо писать такие вещи само по себе занятно.
Расширяемость
Написание языка также подразумевает создание API для написания его расширений. Расширения языка могут писаться на любом языке программирования поддерживающем платформу .NET.
Совместимость с Mono
Транслятор языка полностью совместим с mono 1.9 и выше. Таким образом программы написанные на XTX могут выполняться на многих ОС из семейства unix. Ну не то что бы этого было очень сложно добиться , но тем не менее, это принципиальный момент.
Два примера программы
Дабы было примерно понятно, о чем идет речь, приведем два листинга программ
1.
- Код: Выделить всё
<!-- Программа загружает станицу http://ya.ru и удаляет все символы <\>(больше\меньше\слэш) -->
<concat>
<replace use_regex="true">
<what>
<download>
<text>http://ya.ru</text>
</download>
</what>
<from>
<t>[></]</t>
</from>
<to>
<t></t>
</to>
</replace>
</concat>
2.
- Код: Выделить всё
<!-- Загружает страницу с cnews и отделяет текст новости(в виде html) от всего остального(шапки, рекламы и прочего)-->
<concat>
<group index = "1">
<first>
<regex reg="</noindex> ?</div> ?</div>(.+)</div> ?<noindex> ?<div class="NewsNoFloat">">
<shrink_whitespaces>
<download>
<text>http://corp.cnews.ru/news/top/index.shtml?2009/01/16/334702</text>
</download>
</shrink_whitespaces>
</regex>
</first>
</group>
</concat>