gpt4 book ai didi

c++ - SQL 解析器库 - 从查询中获取表名

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:03:51 26 4
gpt4 key购买 nike

我正在寻找一个 C/C++ SQL 解析库,它能够为我提供查询所依赖的表的名称。

我的期望:

    SELECT * FROM TABLEA NATURAL JOIN TABLEB

结果:TABLEA、TABLEB

当然提供的例子非常简单。我已经编写了自己的解析器(基于 Boost.Spirit)来处理 SQL 语法的一个子集,但我需要的是一个能够处理复杂(递归等)查询的解析器。

你知道什么对此有用吗?

我找到的是 http://www.sqlparser.com - 它是商业的,但正是我需要的。我还深入研究了 PostgreSQL 源代码,但没有效果。

最佳答案

Antlr 可以为您生成一个很好的 SQL 解析器(解析器的源代码可以是 C++),并且可用的 SQL 语法很少:http://www.antlr3.org/grammar/list.html

如果您只对表名感兴趣,那么采用其中一种语法并添加收集这些名称的语义操作应该相当容易。

有一些使用 Antlr 和 Bison/Yacc & Lex/Flex 的经验,我绝对推荐 Antlr。它是用 Java 编写的,但目标语言可以是 C++ - 生成的代码实际上是可读的,看起来像是人类编写的。 Antlr生成的解析器调试还算可以,Bison生成的就没法说了。

还有其他选项,例如 Lemon 和 sqlite 语法,如果您愿意,可以看看这个问题:SQL parser in C

关于c++ - SQL 解析器库 - 从查询中获取表名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15003128/

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