Генерация парсера JavaScript SQL для SQLite3 (с Lemon? ANTLR3?)

В течение последних нескольких недель я погружался в прекрасный мир разбора операторов SQL во что-то управляемое только для того, чтобы узнать, что мне, вероятно, понадобится полный лексер/парсер для правильной обработки всех разрешенных токенов/форматов для выполнения то же самое.

Меня в основном интересуют операторы создания таблиц, но полный универсальный анализатор был бы еще лучше, поскольку, похоже, ни у кого в Интернете его еще нет.

Я не выпускник компьютерного факультета, а самоучка, так что для меня это довольно сложная кривая обучения. Шаги, которые я предпринял, были следующими:

  1. Разобрать sql с помощью регулярных выражений
  2. Это не удается, исправьте регулярное выражение
  3. Это еще хуже, покопайтесь в исходном коде SQLite, чтобы узнать, что он использует синтаксический анализатор Lemon, проект, специфичный для SQLite.
  4. Попробуйте заставить парсер Lemon + PHP работать, думая, что я могу преобразовать его вручную в js. (не удалось)
  5. Попробуйте заставить Emscripten работать над синтаксическим анализатором, сгенерированным Lemon, на C (ад зависимостей, не удалось).
  6. Найдите другие генераторы парсеров/лексеров, обратите внимание на ANTLR3.
  7. Пытайтесь день и ночь получить языковой файл Sqljet преобразован в javascript путем изменения формата вывода и отслеживания ошибок.

Я использовал превосходный графический интерфейс AntlrWorks, чтобы попытаться выяснить, что происходит не так, но я не уверен, что это стек Javascript, который ломается, стек Java или формат .g находится в старом формате для v2.

Есть ли кто-нибудь с опытом работы с генератором парсеров/лексеров, который может указать мне правильное направление для создания правильного многоразового парсера Sqlite? Кажется, я могу генерировать парсеры в javascript как для mysql, так и для pl/sql. Означает ли это, что формат sqlite .g нуждается в обновлении?


person SchizoDuckie    schedule 06.08.2012    source источник


Ответы (1)


Чтобы иметь возможность использовать грамматику с целью JavaScript, вы должны:

  • изменить целевой язык в блоке options: options { language=JavaScript; }
  • заменить весь встроенный код в файле грамматики .g (то, что между { и }) кодом JavaScript. Обратите внимание, что ANTLR не преобразует этот код в зависимости от того, что вы определяете в значении options' language, вам придется сделать это самостоятельно!
  • при создании синтаксического анализатора не используйте ANTLRWorks, а делайте это в командной строке и используйте большой объем кучи с аргументом -Xmx java: грамматика SQL - это большие звери, которым требуется большой объем памяти.

Вот предыдущий вопрос и ответ, который показывает, как использовать (и запускать) парсер, сгенерированный ANTLR, в сочетании с целью JavaScript: antlr3 - Генерация дерева синтаксического анализа

ХТН

person Bart Kiers    schedule 06.08.2012
comment
Большое спасибо :) Я попробую это сегодня вечером и посмотрю, поможет ли это. - person SchizoDuckie; 06.08.2012