13
13
final class LR1ItemSet implements Cloneable, Comparable
15
private final TreeMap items;
16
private int hashCode = 0;
20
this.items = new TreeMap();
23
private LR1ItemSet(LR1ItemSet set)
25
this.items = (TreeMap) set.items.clone();
26
this.hashCode = set.hashCode;
29
void set(LR1Item item)
31
if(items.put(item, item) == null)
33
hashCode += item.hashCode();
38
boolean get(LR1Item item)
40
return items.get(item) != null;
45
boolean modified_ = true;
47
private void computeArray()
49
Vector itemVector = new Vector(0);
51
for(Iterator e = items.keySet().iterator(); e.hasNext();)
53
itemVector.addElement(e.next());
56
items_ = new LR1Item[itemVector.size()];
57
itemVector.copyInto(items_);
71
public String toString()
73
String nl = System.getProperty("line.separator");
75
StringBuffer result = new StringBuffer();
76
result.append("{" + nl + "\t");
78
Production[] productions = Production.productions();
79
Symbol[] terminals = Symbol.terminals();
80
boolean comma = false;
81
for(int i = 0; i < productions.length; i++)
83
int rightsideLength = productions[i].rightside().length;
85
for(int j = 0; j <= rightsideLength; j++)
87
LR0Item lr0Item = new LR0Item(productions[i].index, j);
89
for(int k = 0; k < terminals.length; k++)
91
LR1Item item = new LR1Item(lr0Item, terminals[k].index);
96
result.append("," + nl + "\t");
109
result.append(nl + "}");
110
return result.toString();
113
public String toString(Symbol lookahead)
115
String nl = System.getProperty("line.separator");
117
LR1Item[] items = items();
118
int length = items.length;
120
TreeSet strings = new TreeSet();
122
for(int i = 0; i < length; i++)
124
String s = items[i].toString(lookahead);
132
StringBuffer result = new StringBuffer();
135
boolean colon = false;
136
for(Iterator i = strings.iterator(); i.hasNext(); )
15
private final TreeMap items;
16
private int hashCode = 0;
20
this.items = new TreeMap();
23
private LR1ItemSet(LR1ItemSet set
26
this.items = (TreeMap) set.items.clone();
27
this.hashCode = set.hashCode;
33
if(items.put(item, item) == null)
35
hashCode += item.hashCode();
43
return items.get(item) != null;
47
boolean modified_ = true;
49
private void computeArray()
51
Vector itemVector = new Vector(0);
53
for(Iterator e = items.keySet().iterator(); e.hasNext();)
55
itemVector.addElement(e.next());
58
items_ = new LR1Item[itemVector.size()];
59
itemVector.copyInto(items_);
73
public String toString()
75
String nl = System.getProperty("line.separator");
77
StringBuffer result = new StringBuffer();
78
result.append("{" + nl + "\t");
80
Production[] productions = Production.productions();
81
Symbol[] terminals = Symbol.terminals();
82
boolean comma = false;
83
for(int i = 0; i < productions.length; i++)
85
int rightsideLength = productions[i].rightside().length;
87
for(int j = 0; j <= rightsideLength; j++)
89
LR0Item lr0Item = new LR0Item(productions[i].index, j);
91
for(int k = 0; k < terminals.length; k++)
93
LR1Item item = new LR1Item(lr0Item, terminals[k].index);
99
result.append("," + nl + "\t");
150
result.append(i.next());
156
return result.toString();
159
public Object clone()
161
return new LR1ItemSet(this);
164
public boolean equals(Object obj)
167
(obj.getClass() != this.getClass()))
172
LR1ItemSet set = (LR1ItemSet) obj;
174
if(set.items.size() != items.size())
179
for(Iterator e = items.keySet().iterator(); e.hasNext();)
181
if(!set.get((LR1Item) e.next()))
190
public int hashCode()
195
public int compareTo(Object object)
197
LR1ItemSet set = (LR1ItemSet) object;
199
int result = items.size() - set.items.size();
203
Iterator e = items.keySet().iterator();
204
Iterator f = set.items.keySet().iterator();
206
while(e.hasNext() && f.hasNext() && (result == 0))
208
result = ((LR1Item) e.next()).compareTo(f.next());
112
result.append(nl + "}");
113
return result.toString();
116
public String toString(Symbol lookahead)
118
String nl = System.getProperty("line.separator");
120
LR1Item[] items = items();
121
int length = items.length;
123
TreeSet strings = new TreeSet();
125
for(int i = 0; i < length; i++)
127
String s = items[i].toString(lookahead);
135
StringBuffer result = new StringBuffer();
138
boolean colon = false;
139
for(Iterator i = strings.iterator(); i.hasNext(); )
153
result.append(i.next());
159
return result.toString();
162
public Object clone()
164
return new LR1ItemSet(this);
167
public boolean equals(Object obj)
170
(obj.getClass() != this.getClass()))
178
if(set.items.size() != items.size())
183
for(Iterator e = items.keySet().iterator(); e.hasNext();)
185
if(!set.get((LR1Item) e.next()))
194
public int hashCode()
199
public int compareTo(Object object)
202
= (LR1ItemSet) object;
204
int result = items.size() - set.items.size();
208
Iterator e = items.keySet().iterator();
209
Iterator f = set.items.keySet().iterator();
211
while(e.hasNext() && f.hasNext() && (result == 0))
213
result = ((LR1Item) e.next()).compareTo(f.next());