Small. Fast. Reliable.
Choose any three.
Генератор анализатора Lemon LALR(1)
Оглавление

1. Обзор

Языковой анализатор SQL для SQLite произведен, используя программу генератора кода под названием "Lemon". Lemon читает грамматику входного языка и выдает C-код, чтобы осуществить анализатор для того языка.

1.1. Исходные файлы и документация

Lemon не имеет своего собственного репозитария. does not have its own source repository. Lemon состоит из нескольких файлов в исходном дереве SQLite:

2. Преимущества Lemon

Lemon производит LALR (1) анализатор. Его действие подобно более знакомым инструментам Yacc и Bison, но Lemon добавляет важные улучшения, включая:

2.1. Lemon в SQLite

Lemon используется в двух местах в SQLite.

Основное использование Лимона должно создать языковой анализатор SQL. Файл грамматики ( parse.y) собран Lemon в parse.c и parse.h. parse.c включен в объединение без дальнейшей модификации.

Lemon также используется, чтобы произвести анализатор для выражений образца запроса в расширении FTS5. В этом случае входной файл грамматики fts5parse.y.

2.2. Настройки Lemon специально для SQLite

Одно из преимуществ размещения инструментов генератора кода как части проекта то, что инструменты могут быть оптимизированы, чтобы удовлетворить определенные потребности полного проекта. Lemon извлек выгоду из этого эффекта. За эти годы генератор анализатора был расширен и увеличен, чтобы обеспечить новые возможности и улучшить работу. Несколько определенных улучшений к Lemon, которые специально предназначены для использования SQLite, включают:

Парсинг SQL-операторов это значительный потребитель циклов CPU в любом движке базы данных SQL. Продолжающиеся усилия оптимизировать SQLite заставили разработчиков тратить много на отладку Lemon, чтобы произвести более быстрые анализаторы. Эти усилия принесли пользу всем пользователям. Но и если бы Lemon был отдельно сохраняемым инструментом, было бы более трудно внести скоординированные изменения в SQLite и в Lemon. Следовательно, то, что инструмент генератора анализатора включен в исходное дерево для SQLite, оказалось полезно для самого инструмента и для SQLite.

3. История Lemon

Lemon был первоначально написан Д. Ричардом Хиппом (также создатель SQLite), в то время как он был в аспирантуре в Университете Дюка между 1987 и 1992. Оригинальная дата создания Lemon была потеряна, но была, вероятно, когда-то приблизительно в 1990. Lemon производит анализатор LALR(1). Был компаньон генератора анализатора LL(1) под названием "Lime", но исходный код для него был потерян.

Исходный код Lemon был первоначально написан как отдельные исходные файлы, и только позже слился в единственный "lemon.c".

Автор Lemon и SQLite (Hipp) сообщает, что его навыки C-программирования были значительно увеличены, изучив код первоисточника John Ousterhout. Hipp обнаружил и изучил Tcl в 1993. Lemon был написан к тому времени, и SQLite впоследствии. Есть четкое различие в стилях кодирования этих двух продуктов с SQLite, кажущимся быть более чистым, более удобочитаемым и легче в поддержке.