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

为SQLite3生成JavaScript SQL解析器(使用Lemon?ANTLR3?),javascript,sqlite,parsing,antlr3,lemon,Javascript,Sqlite,Parsing,Antlr3,Lemon,在过去的几周里,我一直在潜入将SQL语句解析成可管理的东西的美好世界,结果发现我可能需要一个完整的lexer/parser来正确处理所有允许的标记/格式来完成同样的事情 我最感兴趣的是CREATETABLE语句,但是一个完整的泛型解析器会更好,因为在web上似乎还没有人有这样的解析器 我不是计算机专业的毕业生,而是自学成才的人,所以这是我的学习曲线。 我采取的步骤是: 用正则表达式解析sql 这失败了,修复正则表达式 更糟糕的是,仔细查看SQLite源代码,发现它使用了Lemon解析器,一个特定

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

我最感兴趣的是CREATETABLE语句,但是一个完整的泛型解析器会更好,因为在web上似乎还没有人有这样的解析器

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

  • 用正则表达式解析sql
  • 这失败了,修复正则表达式
  • 更糟糕的是,仔细查看SQLite源代码,发现它使用了Lemon解析器,一个特定于SQLite的项目
  • 试着让Lemon+PHP解析器工作起来,并认为我可以手动将其转换为js。(失败)
  • 尝试让Emscripten在C中处理Lemon生成的解析器(dependency hell,失败)
  • 搜索其他解析器/词法生成器,注意ANTLR3
  • 通过更改输出格式和回溯错误,日夜尝试将代码转换为javascript
  • 我一直在使用优秀的GUI来尝试找出哪里出了问题,但我不确定是Javascript堆栈出了问题,还是Java堆栈出了问题,还是.g格式是v2的旧格式

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

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

    • options
      块中更改目标语言:
      options{language=JavaScript;}
    • 用JavaScript代码更改.g语法文件中的所有嵌入代码(介于
      {
      }
      之间)。注意,ANTLR不会根据您在
      选项
      语言
      值中定义的内容转换此代码,您必须自己进行转换
    • 生成解析器时,不要使用ANTLRWorks,而是在命令行上使用,并使用大量堆和java的
      -Xmx
      参数:SQL语法是需要大量内存的大型工具
    下面是前面的问答,展示了如何结合JavaScript目标使用(和运行)ANTLR生成的解析器:

    HTH

    非常感谢:)我今晚会试试看是否有用。