11 个重大版本发布
0.13.0 | 2024年7月20日 |
---|---|
0.12.0 | 2023年11月11日 |
0.11.0 | 2023年8月21日 |
0.9.0 | 2023年6月10日 |
0.2.0 | 2021年2月14日 |
#105 在 解析器实现
106,578 每月下载量
在 4 个 crate 中使用(3 个直接使用)
485KB
12K SLoC
LEMON 解析器生成器 已修改以生成 Rust 代码。
LEMON 源代码和 SQLite3 语法最后同步更新至 2024 年 7 月。
不支持的
不支持的语法语法
%token_destructor
:用于销毁标记数据的代码%default_destructor
:默认非终结符销毁器的代码%destructor
:在错误处理期间从堆栈中弹出此符号时执行的代码
https://www.codeproject.com/Articles/1056460/Generating-a-High-Speed-Parser-Part-Lemon https://www.sqlite.org/lemon.html
SQLite
SQLite 词法分析器 和 SQLite 解析器 已从 C 转移到 Rust。解析器生成 AST。
词法分析器/解析器
- 跟踪位置(行,列)。
- 可流式传输(在语句末尾停止)。
- 可恢复的(在语句末尾后重新启动)。
词法分析器和解析器已用以下脚本进行测试
- https://github.com/bkiers/sqlite-parser/tree/master/src/test/resources
- https://github.com/codeschool/sqlite-parser/tree/master/test/sql/official-suite,这些脚本可使用 https://github.com/codeschool/sqlite-parser/tree/master/test/misc 中的脚本更新
待办事项
- 检查生成的 AST(重新解析/重新注入)
- 如果双引号中的关键字在无法解析为标识符但允许字符串字面值的环境中使用,则该标记被理解为字符串字面值而不是标识符。
- 测试
- 解析时不要崩溃
- CREATE VIRTUAL TABLE args
- 零拷贝(至少标记)
Rust 不支持
#line
指令
API 变更
- 不再有
ParseAlloc
/ParseFree
未测试的功能
- NDEBUG
- YYNOERRORRECOVERY
- YYERRORSYMBOL
待修复
- 右侧已移动。如果它们总是只用一次,可能不是问题。只需在 lemon 中添加检查...
%extra_argument
不受支持。- lemon 生成的终端符号应该输出到指定的文件中。
目的
-
lemon_rust 做同样的工作,但是使用的是旧版本的
lemon
。而且似乎无法将yystack
作为栈使用,因为项目可能被随机访问,并且可以使用top+1
项。
依赖项
~1.2–1.8MB
~32K SLoC