如何将复杂查询解析为SQL?

如何将复杂查询解析为SQL?,sql,parsing,tokenize,Sql,Parsing,Tokenize,我想制作一个高级搜索表单,通过语法进行搜索。我已经找到了一个github存储库,它与我想要的非常相似,但是我不理解它的实现,所以我无法使它适应我的需要。我试图完成的搜索就是用来搜索mtg卡的搜索。为了更好地理解我的意思,下面是python中的一个示例: 'c:bm' => '((id IN (SELECT card_id FROM card_color WHERE color_id = 3)) AND (id IN (SELECT card_id FROM card_color GROUP

我想制作一个高级搜索表单,通过语法进行搜索。我已经找到了一个github存储库,它与我想要的非常相似,但是我不理解它的实现,所以我无法使它适应我的需要。我试图完成的搜索就是用来搜索mtg卡的搜索。为了更好地理解我的意思,下面是python中的一个示例:

'c:bm' => '((id IN (SELECT card_id FROM card_color WHERE color_id = 3)) AND (id IN (SELECT card_id FROM card_color GROUP BY card_id HAVING COUNT(card_id) > 1)))'
'c:u OR (c:g AND NOT tou>3)' => "(id IN (SELECT card_id FROM card_color WHERE color_id = 2)) OR ((id IN (SELECT card_id FROM card_color WHERE color_id = 5)) AND NOT (toughness IS NOT NULL AND toughness <> '' AND CAST(toughness AS REAL) > 3))"

我找不到任何资源来解释如何做到这一点。我需要的是一个如何做的概述,这样我就可以自己做。有一个带有代码的答案,但我自己写不出来。我需要理解它,这样我就可以根据自己的需要修改我找到的代码。

不要担心问题的SQL部分。我猜想,一旦有了搜索查询的解析树,生成SQL条件将相当简单

因此,您当前的问题是解析搜索查询。假设这个特定语言还没有可用的解析器,您基本上有两种选择:

使用库/工具生成解析器。这方面有很多选项,尤其是在Python中。找到一个好的教程。 自己编写解析器。当然,我们并不缺乏资源来解释各种方法。您可能会发现递归下降解析器最容易理解,我认为它适用于您的搜索查询。
无论是哪种情况,我建议您首先为搜索查询语言编写语法。

您的语言是Python吗?如果是这样,您应该将其添加为标记。你链接的实现是什么?你不明白吗?我建议学习词法分析,以便更好地理解解析查询。我仍然不知道是用Python还是PHP来做。我不能完全理解它的实现。好的,我来看看词法分析。你为什么要解析它?只是提交给DBMS,它有适合特定实现的解析器。我认为您不理解这些示例。例如,我想问‘c:b’,这意味着黑色,我必须生成SQL来选择黑卡。