我正在寻找一个C / C ++ SQL解析库,它能够为我提供查询所依赖的表的名称。
我的期望:
SELECT * FROM TABLEA NATURAL JOIN TABLEB
结果:TABLEA,TABLEB
当然,提供的例子非常简单。我已经编写了自己的解析器(基于Boost.Spirit)来处理SQL语法的一个子集,但我需要的是一个能够处理复杂(递归等)查询的解析器。
你知道为此目的有用吗?
我发现的是http://www.sqlparser.com - 它是商业化的,但却完全符合我的需要。 我也深入研究了PostgreSQL的来源,没有效果。
答案 0 :(得分:3)
Antlr可以为您生成一个不错的SQL解析器(解析器的源代码可以是C ++),并且可用的SQL语法很少:http://www.antlr3.org/grammar/list.html
如果您感兴趣的只是表名,那么使用其中一个语法并添加收集这些名称的语义操作应该相当容易。
拥有Antlr和Bison / Yacc& amp; Lex / Flex我绝对推荐Antlr。它是用Java编写的,但目标语言可以是C ++ - 生成的代码实际上是可读的,看起来像是由人类编写的。 Antlr生成的解析器的调试非常好,不能说是关于Bison生成的解析器。
如果您愿意,还有其他选项,例如Lemon和sqlite语法,请查看此问题:SQL parser in C