Skip to content
Snippets Groups Projects
Commit bcded9ef authored by dgelessus's avatar dgelessus
Browse files

Use generics in DFA

parent 75b83131
No related branches found
No related tags found
No related merge requests found
...@@ -27,9 +27,8 @@ public class AcceptStates extends DepthFirstAdapter ...@@ -27,9 +27,8 @@ public class AcceptStates extends DepthFirstAdapter
@Override @Override
public void caseStart(Start node) public void caseStart(Start node)
{ {
for(int i = 0; i < dfa.states.size(); i++) for(DFA.State state : dfa.states)
{ {
DFA.State state = (DFA.State) dfa.states.elementAt(i);
state.accept = -1; state.accept = -1;
int accept = -1; int accept = -1;
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
package org.sablecc.sablecc; package org.sablecc.sablecc;
import java.util.Map;
import java.util.Vector; import java.util.Vector;
import java.util.Hashtable; import java.util.Hashtable;
...@@ -20,17 +21,17 @@ public class DFA ...@@ -20,17 +21,17 @@ public class DFA
} }
public NFA nfa; public NFA nfa;
public final Vector states = new Vector(0); public final Vector<DFA.State> states = new Vector<>(0);
public final Hashtable finder = new Hashtable(1); public final Map<IntSet, Integer> finder = new Hashtable<>(1);
private void optimize() private void optimize()
{ {
Vector transitions = new Vector(0); Vector<Vector<DFA.Transition>> transitions = new Vector<>(0);
for(int i = 0; i < states.size(); i++) for(int i = 0; i < states.size(); i++)
{ {
DFA.State state = (DFA.State) states.elementAt(i); DFA.State state = states.elementAt(i);
transitions.addElement(new Vector(0)); transitions.addElement(new Vector<DFA.Transition>(0));
for(int j = 0; j < state.transitions.size(); j++) for(int j = 0; j < state.transitions.size(); j++)
{ {
...@@ -50,15 +51,12 @@ public class DFA ...@@ -50,15 +51,12 @@ public class DFA
if(max < 2) if(max < 2)
{ {
((Vector) transitions.elementAt(i)).addElement( transitions.elementAt(i).addElement(state.transitions.elementAt(j));
state.transitions.elementAt(j));
} }
else else
{ {
DFA.Transition transition1 = DFA.Transition transition1 = state.transitions.elementAt(j);
(DFA.Transition) state.transitions.elementAt(j); DFA.Transition transition2 = state.transitions.elementAt(j + max - 1);
DFA.Transition transition2 =
(DFA.Transition) state.transitions.elementAt(j + max - 1);
DFA.Transition transition = DFA.Transition transition =
new DFA.Transition( new DFA.Transition(
...@@ -67,7 +65,7 @@ public class DFA ...@@ -67,7 +65,7 @@ public class DFA
transition2.interval().end), transition2.interval().end),
-2 - st); -2 - st);
((Vector) transitions.elementAt(i)).addElement(transition); transitions.elementAt(i).addElement(transition);
j += max - 1; j += max - 1;
} }
} }
...@@ -75,25 +73,23 @@ public class DFA ...@@ -75,25 +73,23 @@ public class DFA
for(int i = 0; i < states.size(); i++) for(int i = 0; i < states.size(); i++)
{ {
DFA.State state = (DFA.State) states.elementAt(i); DFA.State state = states.elementAt(i);
state.transitions = (Vector) transitions.elementAt(i); state.transitions = transitions.elementAt(i);
} }
} }
private int match(int st1, int tr, int st2) private int match(int st1, int tr, int st2)
{ {
DFA.State state1 = (DFA.State) states.elementAt(st1); DFA.State state1 = states.elementAt(st1);
DFA.State state2 = (DFA.State) states.elementAt(st2); DFA.State state2 = states.elementAt(st2);
DFA.Transition first = DFA.Transition first = state1.transitions.elementAt(tr);
(DFA.Transition) state1.transitions.elementAt(tr);
int j = -1; int j = -1;
for(int i = 0; i < state2.transitions.size(); i++) for(int i = 0; i < state2.transitions.size(); i++)
{ {
DFA.Transition transition = DFA.Transition transition = state2.transitions.elementAt(i);
(DFA.Transition) state2.transitions.elementAt(i);
if(transition.match(first)) if(transition.match(first))
{ {
...@@ -113,11 +109,9 @@ public class DFA ...@@ -113,11 +109,9 @@ public class DFA
while((i < state1.transitions.size()) && while((i < state1.transitions.size()) &&
(j < state2.transitions.size())) (j < state2.transitions.size()))
{ {
DFA.Transition transition1 = DFA.Transition transition1 = state1.transitions.elementAt(i);
(DFA.Transition) state1.transitions.elementAt(i);
DFA.Transition transition2 = DFA.Transition transition2 = state2.transitions.elementAt(j);
(DFA.Transition) state2.transitions.elementAt(j);
if(!transition1.match(transition2)) if(!transition1.match(transition2))
{ {
...@@ -148,7 +142,7 @@ public class DFA ...@@ -148,7 +142,7 @@ public class DFA
{ {
System.out.print("."); System.out.print(".");
state = (State) states.elementAt(i); state = states.elementAt(i);
CharSet.Interval interval = new CharSet.Interval((char) 0, (char) 0xffff); CharSet.Interval interval = new CharSet.Interval((char) 0, (char) 0xffff);
...@@ -217,7 +211,7 @@ public class DFA ...@@ -217,7 +211,7 @@ public class DFA
if(modified) if(modified)
{ {
destination = eclosure(destination); destination = eclosure(destination);
Integer dest = (Integer) finder.get(destination); Integer dest = finder.get(destination);
if(dest != null) if(dest != null)
{ {
...@@ -336,7 +330,7 @@ public class DFA ...@@ -336,7 +330,7 @@ public class DFA
} }
public IntSet nfaStates = new IntSet(); public IntSet nfaStates = new IntSet();
public Vector transitions = new Vector(0); public Vector<Transition> transitions = new Vector<>(0);
public int accept; public int accept;
@Override @Override
...@@ -355,9 +349,9 @@ public class DFA ...@@ -355,9 +349,9 @@ public class DFA
} }
}*/ }*/
for(int i = 0; i < transitions.size(); i++) for(DFA.Transition transition : transitions)
{ {
result.append(transitions.elementAt(i) + ","); result.append(transition + ",");
} }
return result /*+ " " + nfaStates*/ + ""; return result /*+ " " + nfaStates*/ + "";
......
...@@ -229,18 +229,14 @@ public class GenLexer extends AnalysisAdapter ...@@ -229,18 +229,14 @@ public class GenLexer extends AnalysisAdapter
file.write(" { // " + acceptStatesArray[accSt].stateName + System.getProperty("line.separator")); file.write(" { // " + acceptStatesArray[accSt].stateName + System.getProperty("line.separator"));
Vector outerArray = new Vector(); Vector outerArray = new Vector();
for(int i = 0; i < dfa.states.size(); i++) for(DFA.State state : dfa.states)
{ {
Vector innerArray = new Vector(); Vector innerArray = new Vector();
DFA.State state = (DFA.State) dfa.states.elementAt(i);
file.write(" {"); file.write(" {");
for(int j = 0; j < state.transitions.size(); j++) for(DFA.Transition transition : state.transitions)
{ {
DFA.Transition transition =
(DFA.Transition) state.transitions.elementAt(j);
file.write("{" + ((int) transition.interval().start) + ", " + file.write("{" + ((int) transition.interval().start) + ", " +
((int) transition.interval().end) + ", " + ((int) transition.interval().end) + ", " +
transition.destination + "}, "); transition.destination + "}, ");
...@@ -288,10 +284,8 @@ public class GenLexer extends AnalysisAdapter ...@@ -288,10 +284,8 @@ public class GenLexer extends AnalysisAdapter
file.write(" // " + acceptStatesArray[i].stateName + System.getProperty("line.separator")); file.write(" // " + acceptStatesArray[i].stateName + System.getProperty("line.separator"));
file.write(" {"); file.write(" {");
for(int j = 0; j < dfa.states.size(); j++) for(DFA.State state : dfa.states)
{ {
DFA.State state = (DFA.State) dfa.states.elementAt(j);
file.write(state.accept + ", "); file.write(state.accept + ", ");
innerArray.addElement(state.accept); innerArray.addElement(state.accept);
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment