在过去的几周里,我一直潜入将 SQL 语句解析为可管理的东西的美丽世界,只是发现我可能需要一个完整的词法分析器/解析器来正确处理所有允许的标记/格式来执行一样。
我最感兴趣的是 create table 语句,但一个完整的通用解析器会更好,因为网络上似乎还没有人拥有这个。
我不是计算机专业的毕业生,而是一个自学成才的人,所以这对我来说是一个相当大的学习曲线。我采取的步骤是:
- 使用正则表达式解析 sql
- 失败,修复正则表达式
- 更糟糕的是,挖掘 SQLite 源代码,发现它使用了 Lemon 解析器,这是一个特定于 SQLite 的项目
- 尝试让 Lemon + PHP 解析器工作,认为我可以手动将其转换为 js。(失败的)
- 尝试让 Emscripten 在 C 中处理 Lemon 生成的解析器(依赖地狱,失败。)
- 搜索其他解析器/词法分析器生成器,注意 ANTLR3
- 日夜尝试通过更改输出格式和回溯错误将Sqljet语言文件转换为javascript。
我一直在使用出色的AntlrWorks GUI 来尝试找出问题所在,但我不确定是 Javascript 堆栈出了问题,还是 Java 堆栈,或者 .g 格式是 v2 的旧格式。
是否有任何具有解析器/词法分析器生成器经验的人可以指出正确的方向来生成正确的可重用 Sqlite 解析器?我似乎能够在 javascript 中为 mysql 和 pl/sql 生成解析器。这是否意味着 sqlite .g 格式需要更新?