3

我是ANTLR语法写作的新手。我的要求是解析插入/更新/删除SQL查询以获取详细信息,例如正在更新/插入/删除行的表、列列表及其值等。是的,有一个很好的文档ANTLR,但如果有人可以帮助我用于查询解析的特定语法将有很大帮助。

4

2 回答 2

3

Wiki 上有各种 SQL 语法:http ://www.antlr.org/grammar/list

但请注意:它们是由 ANTLR 用户贡献的,很可能它们没有经过适当的测试和/或包含错误。

但是为什么要自己生成一个 SQL 解析器呢?使用一些现有的 SQL 解析器可能会更容易。只需在“SQL parser Java”上进行搜索(假设您使用的是 Java),您一定会得到几十个点击。

于 2012-08-10T08:00:13.183 回答
3

实现一个“体面的”SQL 解析器实际上是相当困难的。在 SQL 中,可以编写各种复杂的语句(嵌套连接,...),而且人们确实会这样做,因此您必须实现“完整”的语言。(我见过涵盖数十页的 SQL 查询。愚蠢,是的,但是您必须处理遇到的问题)。

我建议检查SQL2011(标准)相当全面。但是,该语法可能对 ANTLR 不友好,因此请为大量工作做好准备。

您还必须担心标准 SQL 的数据库/供应商特定扩展。PL/SQL(只是 SQL 子语言部分)包含许多特定于 Oracle 的扩展。如果您面对 PL/SQL 存储过程,并且想要进行表/列跟踪,那么您可能也必须执行 PL/SQL 的过程部分,而且这也相当大。

于 2012-08-10T08:19:02.130 回答