2016-04-04 16 views
2

Ich habe versucht, alle möglichen Kombination von Ausdrücken in einer bestimmten Bedingung zu finden.Finden Sie alle möglichen Kombinationen in einem booleschen Ausdrucksbaum in Java

Betrachten Sie zum Beispiel die folgende Bedingung.

((b > 5) | (c > 4)) & ((c < 6) | (b < 2))) 

Ich brauche die endgültige Kombination wie

[(b > 5) , (c < 6)] 
[(b > 5) , (b < 2)] 
[(c > 4) , (c < 6)] 
[(c > 4) , (b < 2)] 

Die Logik ist wie (a|b)&(c|d) -> a&c,a&d,b&c,b&d. Die obige comma (,) kann als AND-Operator betrachtet werden.

Da ein Baum die beste Lösung zum Analysieren von Ausdrücken ist, gelang es mir, einen abstrakten Syntaxbaum mit einem rekursiven Descent-Parser zu erstellen, der Java verwendet, wobei der Baum wie folgt aussieht.

Boolean expression tree

Ich verwende eine modifizierte Version des Parsers wie in this Blog beschrieben. Dies ist, wo ich feststecke, wie ich nicht die endgültigen Ausdrücke extrahieren kann.

Gibt es irgendwelche Eingaben, in welche Richtung ich versuchen könnte.

Andere Beispiele betrachten Sie die folgende Bedingung.

((b > 5) & ((c < 6) | (b < 2))) 

Ergebnis:

[(b > 5) , (c < 6)] 
[(b > 5) , (b < 2)] 

betrachten die folgende Bedingung.

((b > 5) | ((c < 6) & (b < 2))) 

Ergebnis:

[(b > 5)] 
[(c < 6) , (b < 2)] 

Antwort

0

Keine Notwendigkeit für einen hier Baum. Sie können damit beginnen, eine 2D-Matrix der Bedingungen zu erstellen. so für

 (b > 5) | (c > 4)) & ((c < 6) | (b < 2))) 

Die Matrix wäre 2X2 und wie folgt aussehen:

(b > 5) (c > 4) 
(c < 6) (b < 2) 

In jeder Zeile die Bedingung zwischen den Nachbarn würde OR sein und in jeder Spalte die Bedingung zwischen den Nachbarn wäre AND. Jetzt müssen Sie nur noch alle möglichen Kombinationen dieser 2D-Matrix generieren. Dafür können Sie How to get 2D array possible combinations

folgen