微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

带谓词的布尔表达式树?

如何解决带谓词的布尔表达式树?

我正在尝试设计一个表达式树构建器,该构建器可用于构建一个表达式树,该树可以使用提供的上下文(哈希图)进行惰性求值。所需的运算符集为 AND/OR/NOT<<=>>=、{{1 }}、=!=包括与否)。表达式树必须支持短路(不计算超出最终结果所需的数量)。评估结果为真或假。在我的情况下,哪些节点必须是中间节点,哪些是叶子节点?我想 in_range/AND/OR 是中间词和谓词 (NOT,<,<=,>,{{1 }},>=,=) 将是叶节点?或者每个谓词都将表示为一个子树?

解决方法

我最近为我的雇主做了这件事。不过,我还没有和他们谈过开源,所以我不能向你展示任何代码。不过我可以给你一些建议。

  • 如果你有大小比较,那么一些子表达式一定不能有布尔结果:如果你写 a <= b,那么 ab 是数字或字符串。您可能还需要数学,以便您可以编写 a <= b+1 等。我的解决方案是:
    • 只有原子是叶子(ab1 等)
    • 解析表达式或子表达式会产生一个类型化编译的表达式对象。要么已知产生布尔值、字符串或数字结果,要么可能产生任何结果。例如,已知 a < b 会产生布尔结果。
    • 用作谓词的表达式是无效的,除非已知它会产生布尔结果。
  • 由于您将采用任意哈希图作为输入,因此您需要考虑如何处理空值。我建议您按照 SQL 的方式进行操作(苦思冥想已经完成),并在您的语言中添加 IS NULLIS NOT NULL

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。