【问题标题】:Recursive logic for parsing string into complex boolean?将字符串解析为复杂布尔值的递归逻辑?
【发布时间】:2012-08-29 15:41:31
【问题描述】:

我确定以前已经这样做过,只是找不到。

我需要将“((A OR B) AND C) OR D”之类的内容转换为属性的数据库查询。具体来说,我正在使用 Ruby Sequel。任何人都可以指出一个示例或实用程序或可以阻止我重新发明轮子的东西吗?

【问题讨论】:

  • 看看树顶:treetop.rubyforge.org
  • 谢谢各位。我基本上是在寻找已经完成我所说的代码/伪代码。我们这里只讨论三个运营商,对吧?我确信它在某个地方,因为这似乎不是一件非常不寻常的事情。无论如何,我们很着急,所以我们现在只是在括号中保释(当前客户可以不用)。一次性处理 AND 和 OR 没有问题。我们稍后会重新讨论并实现括号。

标签: ruby parsing filtering boolean-logic sequel


【解决方案1】:

您可以使用ANTLR 定义语法并为这些类型的字符串自动生成Ruby 解析器。 ANTLR 是一个解析器生成器,它允许您为一种语言(例如您描述的布尔语言)定义语法。

解析后,您可以指定需要采取哪些操作来构建所需的数据结构(在您的情况下是捕获查询结构的树数据结构)。

这不是一个特别的 Ruby 问题,因为 ANTLR 也可以为其他语言生成解析器。在您的情况下,它将生成一个 Ruby 解析器,您可以将其集成到您的应用程序中以解析字符串并生成您需要的数据结构。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-01
    • 1970-01-01
    • 2011-07-10
    • 2011-06-14
    • 2019-02-10
    • 1970-01-01
    相关资源
    最近更新 更多