Лимон (генератор парсеров)


Lemon — это генератор синтаксических анализаторов , поддерживаемый как часть проекта SQLite , который генерирует упреждающий синтаксический анализатор LR ( парсер LALR ) на языке программирования C из входной контекстно-свободной грамматики . Генератор довольно прост, реализован в одном исходном файле C, а другой файл используется в качестве шаблона для вывода. Лексический анализ проводится внешне.

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

Lemon вместе с re2c и оболочкой re2c под названием Perplex используются [1] [2] [3] в BRL-CAD в качестве независимой от платформы и легко компилируемой альтернативы Flex и Bison. Эта комбинация также используется с STEPcode. [4]

Оценка выражения OpenFOAM [5] использует комбинацию ragel и версию лимона, которая была минимально модифицирована [6] для упрощения интеграции с C++, не влияя на интеграцию с C. [7] Грамматики парсера дополнены макросами m4 .