1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.kuali.student.common.messagebuilder.booleanmessage.ast;
20
21 import java.util.ArrayList;
22 import java.util.List;
23
24 public class BooleanFunction {
25 private String booleanExpression;
26 private BinaryMessageTree ASTtree;
27 private BooleanNode root;
28 private ArrayList<String> funcVars = new ArrayList<String>();
29 private ArrayList<String> symbols = new ArrayList<String>();
30
31 public BooleanFunction(String booleanExpression) {
32
33
34 ASTtree = new BinaryMessageTree();
35 root = ASTtree.buildTree(booleanExpression);
36 this.booleanExpression = booleanExpression;
37 }
38
39
40
41
42
43
44
45
46
47
48 public List<String> getVariables() {
49 ASTtree.traverseTreePostOrderDontSetNode(root, null);
50 List<BooleanNode> treeNodes = ASTtree.getAllNodes();
51
52 for (BooleanNode bnode : treeNodes) {
53 String label = bnode.getLabel();
54 if (label.equals("+") || label.equals("*")) {
55 continue;
56 }
57 funcVars.add(label);
58 }
59 return funcVars;
60 }
61
62
63
64
65
66
67
68
69
70
71 public List<String> getSymbols() {
72 String workString = null;
73
74 this.booleanExpression = (booleanExpression == null ? null : booleanExpression.replaceAll("\\s+", ""));
75
76 workString = this.booleanExpression;
77
78 while (workString != null && workString.length() > 0) {
79 String propositionKeyPattern = "^[A-Z][0-9]*";
80 String restOfFunctionString = null;
81 String theSymbol = null;
82 int restOfFunctionStringStartIndex = 0;
83 if (workString.matches(propositionKeyPattern + ".*")) {
84 restOfFunctionString = workString.replaceFirst(propositionKeyPattern, "");
85 restOfFunctionStringStartIndex = workString.indexOf(restOfFunctionString);
86 if (restOfFunctionStringStartIndex <= 0) {
87 theSymbol = workString;
88 workString = "";
89 } else {
90 theSymbol = workString.substring(0, restOfFunctionStringStartIndex);
91 workString = restOfFunctionString;
92 }
93 } else {
94 theSymbol = workString.substring(0, 1);
95 workString = workString.substring(1, workString.length());
96 }
97 symbols.add(theSymbol);
98 }
99 return symbols;
100 }
101 }