В течение последних нескольких недель я погружался в прекрасный мир разбора операторов SQL во что-то управляемое только для того, чтобы узнать, что мне, вероятно, понадобится полный лексер/парсер для правильной обработки всех разрешенных токенов/форматов для выполнения то же самое.
Меня в основном интересуют операторы создания таблиц, но полный универсальный анализатор был бы еще лучше, поскольку, похоже, ни у кого в Интернете его еще нет.
Я не выпускник компьютерного факультета, а самоучка, так что для меня это довольно сложная кривая обучения. Шаги, которые я предпринял, были следующими:
- Разобрать sql с помощью регулярных выражений
- Это не удается, исправьте регулярное выражение
- Это еще хуже, покопайтесь в исходном коде SQLite, чтобы узнать, что он использует синтаксический анализатор Lemon, проект, специфичный для SQLite.
- Попробуйте заставить парсер Lemon + PHP работать, думая, что я могу преобразовать его вручную в js. (не удалось)
- Попробуйте заставить Emscripten работать над синтаксическим анализатором, сгенерированным Lemon, на C (ад зависимостей, не удалось).
- Найдите другие генераторы парсеров/лексеров, обратите внимание на ANTLR3.
- Пытайтесь день и ночь получить языковой файл Sqljet преобразован в javascript путем изменения формата вывода и отслеживания ошибок.
Я использовал превосходный графический интерфейс AntlrWorks, чтобы попытаться выяснить, что происходит не так, но я не уверен, что это стек Javascript, который ломается, стек Java или формат .g находится в старом формате для v2.
Есть ли кто-нибудь с опытом работы с генератором парсеров/лексеров, который может указать мне правильное направление для создания правильного многоразового парсера Sqlite? Кажется, я могу генерировать парсеры в javascript как для mysql, так и для pl/sql. Означает ли это, что формат sqlite .g нуждается в обновлении?