检测等效表达式

Sta*_*ked 4 java algorithm design-patterns

我目前正在开发一个Java应用程序,我需要实现一个用于构建BPF表达式的系统.我还需要实现检测等效BPF表达式的机制.

构建表达式并不太难.我可以使用Interpreter设计模式构建语法树,并实现toString获取BPF语法.

但是,检测两个表达式是否相同则要困难得多.一个简单的例子如下:

A: src port 1024 and dst port 1024
B: dst port 1024 and src port 1024
Run Code Online (Sandbox Code Playgroud)

为了检测A和B是等价的,我可能需要在比较它们之前将每个表达式转换为"标准化"形式.对于上面的例子,这很容易,但是,当使用嵌套和操作的组合时AND,它变得越来越难.ORNOT

有谁知道我应该如何最好地解决这个问题?

NPE*_*NPE 6

比较布尔表达式的一种方法可能是将两者转换为析取范式(DNF),并比较DNF.这里,变量将是Berkeley Packet Filter令牌,并且port 80在两个表达式中的任何一个中出现的相同令牌(例如)将需要被赋予相同的变量名称.

http://www.izyt.com/BooleanLogic/applet.php上有一个看起来很有趣的小程序- 遗憾的是,由于浏览器中的Java问题,我现在无法试一试.