为SQLite3生成JavaScriptSQL解析器(使用Lemon?ANTLR3?)
Generating a JavaScript SQL parser for SQLite3 (with Lemon? ANTLR3?)
在过去的几周里,我一直在深入研究将SQL语句解析成可管理的东西的美好世界,结果发现我可能需要一个完整的lexer/parser来正确处理所有允许的令牌/格式来做同样的事情。
我最感兴趣的是创建表语句,但一个完整的通用解析器会更好,因为网络上似乎还没有人拥有它。
我不是计算机专业的毕业生,而是一个自学成才的人,所以这是我的学习曲线。我采取的步骤是:
- 使用正则表达式分析sql
- 如果失败,请修复regex
- 更糟糕的是,通过挖掘SQLite源代码,发现它使用了Lemon解析器,这是一个SQLite特定的项目
- 试着让Lemon+PHP解析器工作,我认为我可以手动将其转换为js。(失败)
- 尝试让Emscripten在C中处理Lemon生成的解析器(依赖地狱,失败)
- 搜索其他解析器/lexer生成器,注意ANTLR3
- 夜以继日地尝试通过更改输出格式和回溯错误将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
相关文章:
- 在指令控制器中使用$attrs时出现问题
- 如何使用jQuery自动打开页面上的所有链接
- 如何使用url加载程序在webpack中导入多个图像
- 使用php或javascript从facebook相册URL中删除多余的部分
- 正在添加'X'按钮,在文本字段旁边使用javascript
- 如何使用jquery在填充自动完成的值后使文本框只读
- 使用agility.js进行页面布局和合成
- 使用Clipboard.js复制span文本
- 使用JS如何动态更改显示的html文件中的文本背景颜色
- 如何使用WCF服务和javascript表单post上传.doc文件
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 如何使用动画实现纸张推车
- 如何在Angular2中使用jQuery插件
- 使用Express捕获参数
- 使用clickToggle并在单击另一个元素时关闭元素
- 如何使用jQuery选择下拉列表的值
- 可以前端maven插件使用节点,npm已经安装
- 使用javascript将动态表从一个html页面打印到另一个html页
- 使用JS将数组转换为json对象
- 为SQLite3生成JavaScriptSQL解析器(使用Lemon?ANTLR3?)