#sql-parser #sql #scanner #tokenizer #parser #tokenize

sqlite3-parser

SQL 解析器(如 SQLite 所理解)

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解析器实现

Download history 25735/week @ 2024-05-04 21238/week @ 2024-05-11 21188/week @ 2024-05-18 22599/week @ 2024-05-25 23720/week @ 2024-06-01 22166/week @ 2024-06-08 24612/week @ 2024-06-15 19975/week @ 2024-06-22 23097/week @ 2024-06-29 26182/week @ 2024-07-06 25806/week @ 2024-07-13 27087/week @ 2024-07-20 22778/week @ 2024-07-27 27718/week @ 2024-08-03 25896/week @ 2024-08-10 25346/week @ 2024-08-17

106,578 每月下载量
4 crate 中使用(3 个直接使用)

Apache-2.0/MIT

485KB
12K SLoC

Rust 6K SLoC // 0.1% comments C 4.5K SLoC // 0.2% comments Happy 1.5K SLoC

Build Status Latest Version Docs dependency status

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。

词法分析器/解析器

  • 跟踪位置(行,列)。
  • 可流式传输(在语句末尾停止)。
  • 可恢复的(在语句末尾后重新启动)。

词法分析器和解析器已用以下脚本进行测试

待办事项

Rust 不支持

  • #line 指令

API 变更

  • 不再有 ParseAlloc/ParseFree

未测试的功能

  • NDEBUG
  • YYNOERRORRECOVERY
  • YYERRORSYMBOL

待修复

  • 右侧已移动。如果它们总是只用一次,可能不是问题。只需在 lemon 中添加检查...
  • %extra_argument 不受支持。
  • lemon 生成的终端符号应该输出到指定的文件中。

目的

  • lemon_rust 做同样的工作,但是使用的是旧版本的 lemon。而且似乎无法将 yystack 作为栈使用,因为项目可能被随机访问,并且可以使用 top+1 项。

  • lalrpop 将是完美的替代品,但它不支持回退/流式处理(参见 这个问题)并且编译/生成速度较慢。

依赖项

~1.2–1.8MB
~32K SLoC