Синтаксический анализатор грамматики Java (от ASCII к графу) - PullRequest
2 голосов
/ 12 октября 2011

Я разрабатываю помощника для ввода команд базы данных для администраторов баз данных, потому что эти команды имеют много параметров, и помощник очень поможет с их работой.Для этого помощника мне нужна грамматика команд, но поставщики баз данных (Oracle, DB2) не предоставляют эту информацию в каком-либо формате, единственная вещь - это документация.

Один пример команды DB2:http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/topic/com.ibm.db2.luw.admin.cmd.doc/doc/r0001933.html

По этой причине я пытаюсь проанализировать грамматическую диаграмму или железнодорожную диаграмму (http://en.wikipedia.org/wiki/Syntax_diagram),, но я не нашел в Java ничего, что могло бы мне помочь.инженерный (обратный) инструмент, который принимает ASCII (текстовое представление) грамматики и создает граф на Java. Затем, с помощью графика на Java, помощник может предложить параметры текущей набранной команды.пример помощника http://www.youtube.com/watch?v=5sBoUHJupvs

Если у вас есть информация о том, как анализировать грамматические диаграммы с помощью Java (не генерировать), я буду признателен за эту информацию.

Ответы [ 2 ]

3 голосов
/ 12 октября 2011

Самый близкий инструмент, который я видел, это Система восстановления грамматики Ральфа Ламмеля.Это зависит от доступности железнодорожных схем в виде текстовых строк .Это обычно не так, как они найдены.Вам кажется, что вам повезло в случае с DB2, работа Ральфа направлена ​​в правильном направлении.

Учитывая, что такие диаграммы обычно отображаются как просто набор пикселей (PLSQL похожи на это в файлах PDF, предоставленных для документации)У вас есть несколько наборов проблем: распознавание графических объектов из пикселей, сборка их в фактические представления железнодорожных диаграмм, а затем использование таких как ваш помощник.

Я думаю, что это длинный, жесткий, непрактичный подход.Если вы заставите его работать, вы обнаружите, что схемы во многих местах немного неправильны (прочитайте статью Ральфа или узнаете трудный путь), и, следовательно, непригодны для инструмента, который должен производить «правильные» вещи, чтобы помочь вашемуАдминистраторы баз данных.

Конечно, вы возражаете против другого длинного, жесткого, "непрактичного" подхода: читать документацию и создавать грамматики, которые соответствуют, а затем проверять эти грамматики на соответствие реальному миру.Да, это тоже непростая задача, но она действительно дает полезные результаты.Вам нужно найти поставщиков, которые сделали это и сделают это доступным для вас.

ANTLR.org предлагает различные грамматики.Вы проверяли там?

Моя компания предлагает грамматики и инструменты для их обработки.Мы сделали это для PLSQL и SQL2011, но еще не для DB2.

Учитывая грамматику, теперь вам нужно использовать ее для предоставления "рекомендаций" своим пользователям.Ваши пользователи не собираются вводить полную «программу»;они хотят генерировать фрагменты (например, операторы SELECT).Теперь вам нужен синтаксический анализатор, который будет обрабатывать фрагменты грамматики и, по крайней мере, говорить «законно» или «нет».Большинство этого не сделает.Наш DMS Software Reengineering Toolkit сделает сделать это.

Чтобы предоставить совет , вы должны уметь ходить по грамматике (как и вырассматривается для железнодорожных схем), чтобы вычислить "что законно дальше".Это на самом деле довольно сложно (на самом деле это примерно эквивалентно тому, что делает генератор синтаксических анализаторов LR / GLR при построении таблиц).Наш механизм DMS делает это во время исправления синтаксической ошибки путем обхода таблиц анализа GLR (поскольку эта работа уже закодирована в таблицах!).Это нелегко сделать, так как это своеобразный вариант алгоритма синтаксического анализа GLR.Вы можете добиться большего успеха с парсером Earley, который хранит все возможные парсинги как набор вариантов;Вы могли бы просто проверить каждого из них.

Но это выглядит довольно большой работой, и я думаю, вы будете удивлены количеством необходимого вам оборудования.

Лучшая работа в этомобласть Harmonia , которая производит инкрементальные редакторы для кода.Парсер нашего механизма DMS основан на более ранней работе, проделанной этим проектом, потому что нас интересует аспект инкрементальности.

0 голосов
/ 12 октября 2011

Вы можете попробовать использовать ANTLR http://www.antlr.org/ Он не сможет понять представление грамматики в ASCII, но он достаточно мощный, чтобы делать все, что вам нужно, если вы не против потратить время наизучите программное обеспечение.

...