Как стать автором
Обновить

Комментарии 6

Я не понял, почему у вас используется ANTLR 3 (судя по репозиторию), когда есть гораздо лучший четвертый?
Или его внутренне использует EMFText?

Ну и для какого диалекта вы разрабатывали парсер: для чистого SQL или все же для PL/SQL (разница между TSQL и PL/SQL достаточно большая). Для PL/SQL существует грамматика как для 3, так и для 4 версии ANTLR.
Да, вы правы, действительно используется ANTLR 3, на который завязан EMFText :)

Грамматика описана на немного другом языке (хотя и очень похожем), поэтому существующие грамматики не подходят.

Зачем это нужно, если уже есть парсеры? Цели две. Во-первых, образовательная — показать как реализовывать языки с помощью EMFText, Xtext или чего-то подобного. Во-вторых, в следующей статье мы будем генерить SQL-код, а реализации на которые вы ссылаетесь умеют только парсить, а генерить SQL из синтаксического дерева не могут.

EMFText — это фактически ANTLR + EMF (Eclipse Modeling Framework). Разработчикам задавали вопрос, почему они не переходят на ANTLR 4. На что они ответили, что вообще такие планы есть, но особых преимуществ это не даст. Потому что EMFText не позволяет использовать напрямую значительную часть фич ANTLR. А в плане производительности они ANTLR 3 уже пропатчили.

Я реализовывал чистый SQL:2003. Хотя от скриптов на чистом SQL (которые будем генерить в следующей статье) наверное не очень много пользы.​ Но для демонстрации идеи нормально, допилить поддержку других диалектов уже не очень сложно.
Cудя по сайту EMFText уже года два как не поддерживается: не выходят новые версии. Проблема в том, что ANTLR 3 уже официально не поддерживается.
Это не совсем так. Последний релиз что ли был действительно 2 года назад. Сейчас они в основном исправляют ошибки без каких-то существенных изменений, отвечают на вопросы (хотя и с задержкой и не всегда), т.е. какая-то поддержка всё-таки есть. Но я не считаю, что это очень большая проблема.

Во-первых, я рассказываю не столько о конкретном инструменте, сколько в принципе о подходах и инструментах, которые используются в модельно-ориентированной разработке. Есть аналогичный проект — Xtext, с гораздо более мощным комьюнити, чем у EMFText, активно развивающийся. Он основан примерно на тех же идеях, что и EMFText. Можно использовать его.

Во-вторых, EMFText работает :) Ну, и что, что существенно не обновляется, свои задачи он решает :)

В-третьих, он с открытым исходным кодом, и какие-то вещи в нём можно допиливать самостоятельно. Фактически, это надстройка над ANTLR и EMF, которая сильно упрощает жизнь. Если бы его не было, то пришлось бы что-то подобное писать самостоятельно. А он уже написан.

Возвращаясь к ANTLR 3. Есть несколько вариантов. Можно забить на то, что он не поддерживается, если всё работает. Можно использовать Xtext или что-то подобное. Можно допилить поддержку ANTLR 4 самостоятельно.

Но в следующей статье нам парсер SQL вообще не понадобится. Всё это затевалось ради кодогенератора SQL, который на ANTLR никак не завязан.

Основная фича EMFText в том, что описав грамматику и метамодель языка мы получаем не только парсер, но и кодогенератор, и редактор, и заготовки для интерпретатора, отладчика.
Я правильно понял, что у вас сейчас только предложение CREATE TABLE поддерживается и всё?
Да, причём, частично. Но я и не ставил цель реализовать SQL полностью. Я хотел описать как в принципе можно реализовывать предметно-ориентированные языки. И ещё выражения для создания таблиц потребуются в следующей статье, где мы будем генерить SQL-скрипты.
Зарегистрируйтесь на Хабре , чтобы оставить комментарий