-
Notifications
You must be signed in to change notification settings - Fork 0
/
Expression.java
119 lines (83 loc) · 2.53 KB
/
Expression.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
import java.util.List;
import java.util.Iterator;
import java.util.LinkedList;
//an expression is a list of terms, which can be a factor.
public class Expression extends Factor implements Comparable, Iterable{
//private Stack<Term> stack;
private BinaryTreeList<Term> termList;
private Term lastAdded;
public void addTerms(List<Term> terms){
termList.addAll(terms);
}
public Iterator<Term> iterator(){
return termList.iterator();
}
public Term addTerm(Term t){
termList.add(t);
return t;
}
public boolean isEmpty(){
return termList.size() <= 0;
}
public int size(){
return termList.size();
}
public Expression(){
termList = new BinaryTreeList<Term>();
}
public Expression(Iterable<Term> terms){
if(terms instanceof BinaryTreeList){
this.termList = (BinaryTreeList<Term>)terms;
}
else {
if(terms instanceof Expression)
operations = new OperationList(((Expression)terms).operations());
//implement this
termList = new BinaryTreeList<Term>();
for(Term t : terms)
termList.add(t);
}
}
public void append(char c) {
throw new IllegalArgumentException("Can't append an expression!");
}
public List<Term> terms(){
return termList.asList();
}
public String toString(){
//System.out.println("There (is/are) " + terms().size() + " term(s).");
StringBuilder toRet = new StringBuilder();
//toRet.append(getSign() ? "" : '-');
toRet.append('(');
Iterator<Term> termIter = terms().iterator();
if(termIter.hasNext())
toRet.append(termIter.next());
else return "()";
while(termIter.hasNext()){
toRet.append('+');
toRet.append(termIter.next());
}
toRet.append(')');
toRet.append(operations != null ? operations : "");
return toRet.toString();
}
public int compareTo(Object o){
Expression that = (Expression)o;
if(this.size() < that.size())
return -1;
else if(this.size() > that.size())
return 1;
//if sizes are equivalent:
Iterator<Term> thisIter = terms().iterator();
Iterator<Term> thatIter = that.terms().iterator();
int termComp;
while(thisIter.hasNext()){
termComp = thisIter.next().compareTo(thatIter.next());
if(termComp < 0)
return -1;
else if(termComp > 0)
return 1;
}
return 0;
}
} //End of the class