OMeta: Парсер Чего Угодно

начало темы

Главная фича метапрограммирования с инженерной точки зрения — это возможность быстрого создания «тематических» языков программирования под конкретную предметную область (DSL), и программирование нужной логики уже на них. Собственно, множество фреймворков эту идею в некоторой степени и реализуют: например знание Python само по себе не имеет особой ценности без знания Django, которая включает весьма мощный DSL запросов к базе. Точно так же значение JavaScript не имеет смысла без знания node.js, а PHP плохо смотрится без Symphony.

Проблема фреймворков в том, что они предоставляют всё же достаточно универсальные DSL, которые в некоторой области, конечно, очень сильно сокращают объемы ручного кодирования — в десятки и сотни раз, однако именно в силу своей универсальности не подходят для компактного решения конкретных задач. Кроме того, огромное значение играет возможность быстрого и лёгкого использования созданного вручную DSL в рамках рабочей платформы.

Мы будем применять в нашей методологии метатехнологии, которые более десятка лет развивает проект STEPS (STEPS Toward Expressive Programming Systems) под руководством Алана Кея и института Viewpoints Research Institute.

Одна из ключевых технологий STEPS — это система OMeta. Она сочетает в себе множество уникальных научно-инженерных решений, а в самом же базовом варианте OMeta можно считать объектно-ориентированным языком для сопоставления с образцом. Зачем нужен ещё один такой язык, когда они успешно изобретаются с 1960-х годов, начиная со Снобола?

В чуть более сложном определении OMeta — это парсер PEG-грамматик, которые отличаются от грамматик BNF однозначностью (единственностью дерева разбора), идеально подходящей для описания языков программирования. Но и построителей компиляторов/интерпретаторов также существует большое число.

OMeta отличается от них прежде всего единым и ясным синтаксисом описания, понятным обычному программисту. Кроме того, OMeta предлагает мощный механизм паттерн-матчинга, который обязателен в системах, предназначенных для создания языков программирования. Но, например, в мета-языке ML тоже имеются прекрасные механизмы компактного и элегантного функционального описания этого процесса.

OMeta уникальна тем, как она выполняет сопоставление с образцом. Стандартные компиляторы из потока исходного текста сперва выделяют токены, включается парсер, строится абстрактное синтаксическое дерево, транслируется в целевой код. Для каждого шага используется обычно свой инструментарий: lex для выделения токенов, yacc для парсинга, и т. д. И вот именно такая длинная цепочка инструментов, каждый из которых надо изучать и настраивать, отпугивает от метапрограммирования практически всех разработчиков.

OMeta же предлагает единый синтаксис для всех вышеупомянутых фаз! Единственно, что у нас будет отличаться — это входная информация. Сперва мы на языке OMeta описываем выделение токенов, затем — построение AST, далее — трансляцию в хост-язык. Это очень удобный подход, который вдобавок позволяет быстро встраивать OMeta в любые пикладные проекты.

Изучать OMeta мы будем на практических примерах для Windows, Linux, различных фреймворков и в веб-среде.

следующая серия

Поделиться статьей ...Share on Facebook0Share on Google+0Tweet about this on TwitterShare on LinkedIn0Share on VKPrint this page

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *