为SQLite3生成JavaScriptSQL解析器(使用Lemon?ANTLR3?)

Generating a JavaScript SQL parser for SQLite3 (with Lemon? ANTLR3?)

本文关键字:Lemon 使用 ANTLR3 生成 SQLite3 JavaScriptSQL      更新时间:2023-09-26

在过去的几周里,我一直在深入研究将SQL语句解析成可管理的东西的美好世界,结果发现我可能需要一个完整的lexer/parser来正确处理所有允许的令牌/格式来做同样的事情。

我最感兴趣的是创建表语句,但一个完整的通用解析器会更好,因为网络上似乎还没有人拥有它。

我不是计算机专业的毕业生,而是一个自学成才的人,所以这是我的学习曲线。我采取的步骤是:

  1. 使用正则表达式分析sql
  2. 如果失败,请修复regex
  3. 更糟糕的是,通过挖掘SQLite源代码,发现它使用了Lemon解析器,这是一个SQLite特定的项目
  4. 试着让Lemon+PHP解析器工作,我认为我可以手动将其转换为js。(失败)
  5. 尝试让Emscripten在C中处理Lemon生成的解析器(依赖地狱,失败)
  6. 搜索其他解析器/lexer生成器,注意ANTLR3
  7. 夜以继日地尝试通过更改输出格式和回溯错误将Sqljet语言文件转换为javascript

我一直在使用出色的AntlrWorks GUI来尝试找出问题所在,但我不确定是Javascript堆栈、Java堆栈,还是.g格式是v2的旧格式。

有没有任何拥有解析器/lexer生成器经验的人可以为我指明生成正确的可重用Sqlite解析器的正确方向?我似乎能够用javascript为mysql和pl/sql生成解析器。这是否意味着sqlite.g格式需要更新?

要能够将语法与JavaScript目标一起使用,您必须:

  • 更改options块中的目标语言:options { language=JavaScript; }
  • 用JavaScript代码更改.g语法文件中的所有嵌入代码({}之间的内容)。请注意,根据您在options'language值中定义的内容,ANTLR不会转换此代码,您必须自己完成
  • 在生成解析器时,不要使用ANTLRWorks,而是在命令行中使用,并使用大量带有java的-Xmx参数的堆:SQL语法是需要大量内存的大型野兽

这是之前的一个问答;展示如何将ANTLR生成的解析器与JavaScript目标结合使用(并运行):antlr3-生成解析树

HTH