【发布时间】:2011-07-27 15:45:43
【问题描述】:
我目前正在开发一个 Java 应用程序,我需要实现一个系统来构建 BPF 表达式。我还需要实现检测等效 BPF 表达式的机制。
构建表达式并不难。我可以使用Interpreter 设计模式构建语法树并实现toString 以获取BPF 语法。
但是,检测两个表达式是否等价要困难得多。一个简单的例子如下:
A: src port 1024 and dst port 1024
B: dst port 1024 and src port 1024
为了检测 A 和 B 是等价的,我可能需要在比较它们之前将每个表达式转换为“标准化”形式。对于上面的示例,这很容易,但是,当使用嵌套的 AND、OR 和 NOT 操作的组合时,它会变得越来越难。
有谁知道我应该如何最好地解决这个问题?
【问题讨论】:
-
我认为我们需要在这里更好地定义“等效”。上下文是否重要(由于 DNS,
net xx.xx.xx.xx/24等同于net xyz)。 -
检测变量并将它们按某种顺序排列而不更改表达式。意识到 b-a 和 a-b 是不一样的。
-
@Jim Garrison 它应该检测两个表达式在语法上是否等效。它不会做任何 dns 解析,它只会认为你的两个表达式是不同的。
标签: java algorithm design-patterns