public class LogicalExpressionConverter
extends java.lang.Object
| Modifier and Type | Class and Description |
|---|---|
static class |
LogicalExpressionConverter.Brackets
Brackets
|
static class |
LogicalExpressionConverter.Equals
"Equals" predicate
|
static interface |
LogicalExpressionConverter.EToken
Base interface for all tokens
|
private static class |
LogicalExpressionConverter.Lexer
Lexer which builds a token stream from the match expression.
|
static class |
LogicalExpressionConverter.Node
Expresssion tree node
|
static class |
LogicalExpressionConverter.Op
Logical operations
|
static class |
LogicalExpressionConverter.StartsWith
"StartsWith" predicate
|
static class |
LogicalExpressionConverter.Term
Base class for expression terms
|
| Modifier and Type | Field and Description |
|---|---|
private boolean |
caseSensitive
Should matches be checked case-sensitively?
|
private java.lang.String |
delimiters
A regex list for delimiters to use when splitting a word.
|
private java.lang.String |
expr
Logical expresssion to be converted
|
private java.util.Map<java.lang.String,LogicalExpressionConverter.Term> |
terms
Distinct terms found in the expression
|
| Constructor and Description |
|---|
LogicalExpressionConverter(java.lang.String expr,
boolean caseSensitive)
Constructor
|
LogicalExpressionConverter(java.lang.String expr,
boolean caseSensitive,
java.lang.String codePage)
Constructor
|
| Modifier and Type | Method and Description |
|---|---|
private LogicalExpressionConverter.Node |
distribute(LogicalExpressionConverter.Op op1,
LogicalExpressionConverter.Op op2,
LogicalExpressionConverter.Node t)
Apply distributive law.
|
java.util.Map<java.lang.String,LogicalExpressionConverter.Term> |
getTerms()
Get distinct terms found in the expression.
|
private static <T extends java.lang.Comparable<T>> |
lexicographicalComparator()
Lexicographical comparator for lists of Comparable
|
static void |
main(java.lang.String... args)
Test program
|
private void |
processOp(LogicalExpressionConverter.EToken token,
java.util.Stack<LogicalExpressionConverter.EToken> stack,
java.util.List<LogicalExpressionConverter.EToken> rpn)
Process operation token
|
private LogicalExpressionConverter.Node |
pushNots(LogicalExpressionConverter.Node t)
Apply De Morgan's law and eliminate double negation.
|
java.util.List<java.util.List<LogicalExpressionConverter.Term>> |
toCNF(boolean debug)
Convert to Conjunctive Normal Form (CNF)
|
java.util.List<java.util.List<LogicalExpressionConverter.Term>> |
toDNF(boolean debug)
Convert to Disjunctive Normal Form (DNF)
|
private java.util.List<LogicalExpressionConverter.EToken> |
toList(LogicalExpressionConverter.Node t,
java.util.List<LogicalExpressionConverter.EToken> list)
Recursively convert expression tree to linear representation
|
java.util.List<java.util.List<LogicalExpressionConverter.Term>> |
toNormalForm(LogicalExpressionConverter.Op op1,
LogicalExpressionConverter.Op op2,
boolean debug)
Convert to Normal Form (CNF or DNF)
|
java.util.List<LogicalExpressionConverter.EToken> |
toRPN(boolean debug)
Convert to Reverse Polish Notation (RPN)
|
private java.lang.String delimiters
private final boolean caseSensitive
private final java.lang.String expr
private java.util.Map<java.lang.String,LogicalExpressionConverter.Term> terms
public LogicalExpressionConverter(java.lang.String expr,
boolean caseSensitive)
expr - Logical expression to be convertedcaseSensitive - Should matches be checked case-sensitively?public LogicalExpressionConverter(java.lang.String expr,
boolean caseSensitive,
java.lang.String codePage)
expr - Logical expression to be convertedcaseSensitive - Should matches be checked case-sensitively?codePage - character encoding usedpublic java.util.Map<java.lang.String,LogicalExpressionConverter.Term> getTerms()
public java.util.List<LogicalExpressionConverter.EToken> toRPN(boolean debug)
debug - print tokens as they are provided by lexerprivate void processOp(LogicalExpressionConverter.EToken token, java.util.Stack<LogicalExpressionConverter.EToken> stack, java.util.List<LogicalExpressionConverter.EToken> rpn)
token - operation tokenstack - RPN stackrpn - RPN expressionpublic java.util.List<java.util.List<LogicalExpressionConverter.Term>> toCNF(boolean debug)
debug - Enables printing of tokens as they are provided by lexer and intermediate datapublic java.util.List<java.util.List<LogicalExpressionConverter.Term>> toDNF(boolean debug)
debug - print tokens as they are provided by lexer and intermediate datapublic java.util.List<java.util.List<LogicalExpressionConverter.Term>> toNormalForm(LogicalExpressionConverter.Op op1, LogicalExpressionConverter.Op op2, boolean debug)
op1 - The innermost operation (OR or AND).op2 - The outermost operation (OR or AND).debug - Enables printing of tokens as they are provided by lexer and intermediate data.private static <T extends java.lang.Comparable<T>> java.util.Comparator<java.util.List<T>> lexicographicalComparator()
T - type parameterprivate java.util.List<LogicalExpressionConverter.EToken> toList(LogicalExpressionConverter.Node t, java.util.List<LogicalExpressionConverter.EToken> list)
t - tree to be convertedlist - list to hold a linear representationprivate LogicalExpressionConverter.Node pushNots(LogicalExpressionConverter.Node t)
t - source treeprivate LogicalExpressionConverter.Node distribute(LogicalExpressionConverter.Op op1, LogicalExpressionConverter.Op op2, LogicalExpressionConverter.Node t)
op1 - innermost operation (OR or AND)op2 - outermost operation (OR or AND)t - source treepublic static void main(java.lang.String... args)
throws java.lang.Exception
args - command line argumentsjava.lang.Exception - if error