-->

生成sqlite3的一个JavaScript SQL解析器(柠檬?ANTLR3?)(Generati

2019-09-20 21:33发布

在过去的几个星期,我一直在深入解析SQL语句到的东西易于管理的美丽世界,才发现,我可能会需要一个完整的词法分析器/解析器来妥善处理所有允许令牌/格式做一样。

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

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

  1. 解析与正则表达式SQL
  2. 失败了,修复的正则表达式
  3. 失败更糟的是,挖通了SQLite的源,找出它使用的柠檬分析器,一个SQLite具体项目
  4. 尽量让柠檬+ PHP解析器的工作思路,我可以手动将其转换成JS。 (失败)
  5. 用C试图让Emscripten工作的柠檬生成的解析器(依赖地狱,失败了。)
  6. 搜索其他语法/词法分析器发电机,注意ANTLR3
  7. 尝试了一整天,晚上拿到Sqljet语言文件通过改变输出格式和回溯错误转换为JavaScript。

我一直在使用的优秀AntlrWorks GUI,试图找出什么错误,但我不能确定它是否是一个的突破的JavaScript栈,Java堆栈,或者说.G格式是旧格式的V2。

有没有与语法/词法分析器发电机经验的人,可以点我到正确的方向产生一个适当的可重复使用的SQLite的解析器? 我似乎能够发电的javascript MySQL和PL / SQL解析器。 这是否意味着,SQLite的.G格式是需要更新?

Answer 1:

为了能够使用的语法与JavaScript的目标,你必须:

  • 改变在目标语言options块: options { language=JavaScript; } options { language=JavaScript; }
  • 更改.G语法文件中的所有嵌入的代码(之间的东西{}用JavaScript代码)。 需要注意的是ANTLR 并不取决于你在定义什么把这段代码转换optionslanguage值,你必须自己做!
  • 生成解析器的时候,不要使用ANTLRWorks但在命令行上做,并使用大量堆Java的-Xmx参数:SQL语法都需要大量的内存大野兽

这里有一个以前的Q&A,显示如何使用(和运行)的ANTLR生成的解析器结合JavaScript的目标: antlr3 -生成解析树

HTH



文章来源: Generating a JavaScript SQL parser for SQLite3 (with Lemon? ANTLR3?)