gpt4 book ai didi

javascript - 为 SQLite3 生成一个 JavaScript SQL 解析器(使用 Lemon?ANTLR3?)

转载 作者:行者123 更新时间:2023-11-30 05:56:06 29 4
gpt4 key购买 nike

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

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

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

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

我一直在使用优秀的AntlrWorks GUI 试图弄清楚出了什么问题,但我不确定是 Javascript 堆栈损坏、Java 堆栈还是 .g 格式是 v2 的旧格式。

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

最佳答案

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

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

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

HTH

关于javascript - 为 SQLite3 生成一个 JavaScript SQL 解析器(使用 Lemon?ANTLR3?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11828627/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com