【问题标题】:Generating a JavaScript SQL parser for SQLite3 (with Lemon? ANTLR3?)为 SQLite3 生成 JavaScript SQL 解析器(使用 Lemon?ANTLR3?)
【发布时间】:2012-08-03 10:40:06
【问题描述】:

在过去的几周里,我一直潜入将 SQL 语句解析为可管理的东西的美丽世界,结果发现我可能需要一个完整的词法分析器/解析器来正确处理所有允许的标记/格式做同样的事情。

我最感兴趣的是 create table 语句,但是一个完整的通用解析器会更好,因为网络上似乎还没有这个。

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

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

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

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

【问题讨论】:

    标签: javascript sqlite parsing antlr3 lemon


    【解决方案1】:

    为了能够对 JavaScript 目标使用语法,您必须:

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

    这是之前的问答,展示了如何结合 JavaScript 目标使用(和运行)ANTLR 生成的解析器:antlr3 - Generating a Parse Tree

    HTH

    【讨论】:

    • 非常感谢 :) 我今晚会试试看是否有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 2015-08-16
    • 1970-01-01
    • 2014-12-24
    • 2011-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多