4 个版本 (2 个破坏性更新)
新版本 0.13.0 | 2024年8月7日 |
---|---|
0.12.0 | 2024年6月11日 |
0.11.1 | 2024年3月7日 |
0.11.0 | 2024年1月4日 |
#156 在 解析器实现
每月7,982次下载
在 2 个crate中使用(通过libsql)
450KB
11K SLoC
LEMON 解析器生成器修改为生成Rust代码。
Lemon源代码和SQLite3语法最后同步于2022年5月。
不支持
不支持语法语法
%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