Small. Fast. Reliable.
Choose any three.
Lemon LALR(1)解析器生成器

1.概述

使用称为“ Lemon”的代码生成器程序生成用于SQLite的SQL语言解析器。Lemon程序读取输入语言的语法,并发出C代码以实现该语言的解析器。

1.1。Lemon源文件和文档

Lemon没有其自己的源存储库。相反,Lemon由SQLite源代码树中的几个文件组成:

2.柠檬的优点

Lemon生成LALR(1)解析器。它的操作类似于更熟悉的工具YaccBison,但是Lemon增加了重要的改进,包括:

2.1。在SQLite中使用柠檬

在SQLite中的两个地方都使用Lemon。

Lemon的主要用途是创建SQL语言解析器。Lemon将一个语法文件(parse.y)编译为parse.c和parse.h。parse.c文件无需进一步修改即可合并到合并中

Lemon还用于在FTS5扩展中为查询模式表达式生成解析器。在这种情况下,输入语法文件是fts5parse.y

2.2。柠檬定制,特别是对于SQLite

将代码生成器工具作为项目的一部分托管的优点之一是,可以优化工具以满足整个项目的特定需求。柠檬受益于这种作用。多年来,Lemon解析器生成器已得到扩展和增强,以为SQLite提供新功能和改进的性能。专为SQLite使用而设计的Lemon的一些特定增强功能包括:

SQL语句的解析是任何SQL数据库引擎中CPU周期的重要消耗者。不断优化SQLite的努力已使开发人员花费大量时间来调整Lemon以生成更快的解析器。这些努力使柠檬分析器生成器的所有用户受益,而不仅仅是SQLite。但是,如果Lemon是一个单独维护的工具,则对SQLite和Lemon进行协调更改将更加困难,结果将无法完成太多的优化。因此,事实证明,对于SQLite而言,解析器生成器工具包含在源树中对于工具本身和SQLite都是净收益。

3.柠檬的历史

Lemon最初是由D. Richard Hipp(也是SQLite的创建者)在1987年至1992年间进入杜克大学研究生院时写的。Lemon的最初创建日期已经丢失,但可能是在1990年左右的某个时候。Lemon产生了LALR(1)解析器。有一个名为“ Lime”的配套LL(1)解析器生成器工具,但是Lime的源代码已丢失。

Lemon源代码最初是作为单独的源文件编写的,后来仅合并为一个“ lemon.c”源文件。

Lemon and SQLite(Hipp)的作者报告说,通过研究John Ousterhout到Tcl的原始源代码,大大提高了他的C编程技能。希普(Hipp)在1993年发现并研究了Tcl。在那之前写过Lemon,然后是SQLite。这两种产品的编码风格有明显的不同,SQLite看起来更简洁,更具可读性并且更易于维护。