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

libsql-sqlite3-parser

SQLite 解析器(SQLite 所理解的)(libsql 分支)

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

Download history 1145/week @ 2024-04-23 1177/week @ 2024-04-30 1242/week @ 2024-05-07 1464/week @ 2024-05-14 1303/week @ 2024-05-21 1089/week @ 2024-05-28 1313/week @ 2024-06-04 1383/week @ 2024-06-11 1882/week @ 2024-06-18 1500/week @ 2024-06-25 1444/week @ 2024-07-02 911/week @ 2024-07-09 1158/week @ 2024-07-16 2175/week @ 2024-07-23 2580/week @ 2024-07-30 1931/week @ 2024-08-06

每月7,982次下载
2 个crate中使用(通过libsql

Apache-2.0/MIT

450KB
11K SLoC

Rust 5.5K 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语法最后同步于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。

词法分析器/解析器

  • 跟踪位置(行,列)。
  • 可流式处理(在语句结束时停止)。
  • 可恢复的(在语句结束时重新启动)。

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

待办事项

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