summaryrefslogtreecommitdiff
path: root/sources
diff options
context:
space:
mode:
Diffstat (limited to 'sources')
-rw-r--r--sources/scalac/transformer/matching/BerrySethi.java4
-rw-r--r--sources/scalac/transformer/matching/BindingBerrySethi.java8
-rw-r--r--sources/scalac/transformer/matching/DetWordAutom.java153
-rw-r--r--sources/scalac/transformer/matching/FiniteAutom.java120
-rw-r--r--sources/scalac/transformer/matching/NondetWordAutom.java143
5 files changed, 267 insertions, 161 deletions
diff --git a/sources/scalac/transformer/matching/BerrySethi.java b/sources/scalac/transformer/matching/BerrySethi.java
index 76a5c0aecd..79d67a8db3 100644
--- a/sources/scalac/transformer/matching/BerrySethi.java
+++ b/sources/scalac/transformer/matching/BerrySethi.java
@@ -592,8 +592,8 @@ class BerrySethi {
labels,
initials,
finals,
- (Object) deltaq,
- (Object) defaultq,
+ deltaq,
+ defaultq,
null/*(Object) qbinders*/);
/*
diff --git a/sources/scalac/transformer/matching/BindingBerrySethi.java b/sources/scalac/transformer/matching/BindingBerrySethi.java
index 9763c389d0..ab1528bdb8 100644
--- a/sources/scalac/transformer/matching/BindingBerrySethi.java
+++ b/sources/scalac/transformer/matching/BindingBerrySethi.java
@@ -120,8 +120,8 @@ public class BindingBerrySethi extends BerrySethi {
labels,
initials,
finals,
- (Object) deltaq,
- (Object) defaultq,
+ deltaq,
+ defaultq,
(Object) qbinders);
result.leftTrans = true;
@@ -144,8 +144,8 @@ public class BindingBerrySethi extends BerrySethi {
labels,
revInitials,
revFinals,
- (Object) deltaqRev,
- (Object) defaultqRev,
+ deltaqRev,
+ defaultqRev,
(Object) qbinders);
revnfa.rightTrans = true;
diff --git a/sources/scalac/transformer/matching/DetWordAutom.java b/sources/scalac/transformer/matching/DetWordAutom.java
index f1e487c7c6..52023487c2 100644
--- a/sources/scalac/transformer/matching/DetWordAutom.java
+++ b/sources/scalac/transformer/matching/DetWordAutom.java
@@ -7,12 +7,125 @@ import java.util.* ;
import scalac.ApplicationError ;
-public class DetWordAutom extends FiniteAutom {
+public class DetWordAutom {
+
+ // BEGIN stuff from FiniteAutom
+
+ //final static Integer FINTAG = new Integer(0);
+
+ /** number of states */
+ protected int nstates;
+
+ /** the 'alphabet' */
+ protected HashSet labels;
+
+ /** the set of final states, here as a TreeMap */
+ protected TreeMap finals;
+
+ /** dfa: HashMap trans: Object -> Integer
+ * nfa: HashMap trans: Object -> Vector [ Integer ]
+ *
+ * nfa: Integer ->(Object -> Vector [ Int ])
+ * [q] |->( a |-> { q' | (q,a,q') in \deltaright } )
+ *
+ * dfa: Integer ->(Object -> Int)
+ * [q] |->( a |-> q' | \deltaright(q,a) = q' } )
+ */
+
+ public HashMap[] deltaq;
+
+ public Integer[] defaultq; // this gives the default transitions
+
+ //protected HashMap deltaq[];
+
+ // --- accessor methods
+
+ /** returns number of states
+ */
+ public int nstates() {
+ return nstates;
+ }
+
+ /** returns the labels
+ */
+ public HashSet labels() {
+ return labels;
+ }
+
+ /** returns the transitions
+ */
+ public HashMap deltaq( int state ) {
+ return deltaq[ state ];
+ }
+
+ /** returns the transitions
+ */
+ public HashMap deltaq( Integer state ) {
+ return deltaq[ state.intValue() ];
+ }
+
+
+ /** returns the transitions
+ */
+ public Integer defaultq( int state ) {
+ return defaultq[ state ];
+ }
+
+ /** returns the transitions
+ */
+ public Integer defaultq( Integer state ) {
+ return defaultq[ state.intValue() ];
+ }
+
+
+ /** returns true if the state is final
+ */
+ public boolean isFinal( int state ) {
+ return ((finals != null)
+ && (finals.get( new Integer( state )) != null));
+ }
+
+ /** returns true if the state is final
+ */
+ public boolean isFinal( Integer state ) {
+ return ((finals != null) && finals.containsKey( state ));
+ }
+
+ /** returns true if the state is final
+ */
+ public Integer finalTag( Integer state ) {
+ return (Integer) finals.get( state );
+ }
+
+
+ public Integer finalTag( int state ) {
+ return (Integer) finals.get( new Integer (state ));
+ }
+
+ /** returns true if the set of states contains at least one final state
+ */
+ boolean containsFinal( TreeSet Q ) {
+ for( Iterator it = Q.iterator(); it.hasNext(); ) {
+ if( isFinal( (Integer) it.next()))
+ return true;
+ }
+ return false;
+ }
+
+
+ /** returns true if there are no finite states
+ */
+ public boolean isEmpty() {
+ return finals.isEmpty();
+ }
+
+ // END stuff from FiniteAutom
static final int FIRST = 0;
static final int LAST = FIRST + 1;
- static final int WHICH_LONGEST_MATCH = FIRST ;
+ //static final int WHICH_LONGEST_MATCH = FIRST ;
+ static final int WHICH_LONGEST_MATCH = LAST ;
// inherited from FiniteAutom:
@@ -24,11 +137,11 @@ public class DetWordAutom extends FiniteAutom {
//Integer defaultq[];
- // used only during determinization and debug printing
+ // TEMPORARY VAR used only during determinization and debug printing
// Q -> (Label -> Q )
- HashMap delta;
- // Q -> Integer;
- HashMap indexMap;
+ HashMap delta;
+ // Q -> Integer;
+ HashMap indexMap;
// Integer -> Q
HashMap invIndexMap;
@@ -39,13 +152,13 @@ public class DetWordAutom extends FiniteAutom {
final static Integer NODEFAULT = new Integer( -1 );
public boolean isSink( int i ) {
- return (((HashMap[])deltaq)[ i ].keySet().isEmpty()
- && (defaultq != null )
- && (((Integer)defaultq( i )).intValue() == i));
+ return ( deltaq[ i ].keySet().isEmpty()
+ && (defaultq != null )
+ && (defaultq( i ).intValue() == i) );
}
public boolean hasDefault( int i ) {
- return (Integer) defaultq( i ) != NODEFAULT;
+ return defaultq( i ) != NODEFAULT;
}
void determinize( NondetWordAutom nfa ) {
@@ -184,8 +297,8 @@ public class DetWordAutom extends FiniteAutom {
}
}
- ((HashMap[])deltaq)[ state_x.intValue() ] = newTrans;
- ((Integer[])defaultq)[ state_x.intValue() ] = defTarget_x;
+ deltaq[ state_x.intValue() ] = newTrans;
+ defaultq[ state_x.intValue() ] = defTarget_x;
delta.remove( state );
deftrans.remove( state );
@@ -232,14 +345,14 @@ public class DetWordAutom extends FiniteAutom {
/** for a set of nfa states (that must exist), returns its transitions
*/
HashMap deltaq( TreeSet nset ) {
- return (HashMap) deltaq( (Integer) indexMap.get( nset ) );
+ return deltaq( (Integer) indexMap.get( nset ) );
}
/** for a set of nfa states (that must exist), returns its transitions
*/
Integer defaultq( TreeSet nset ) {
- return (Integer) defaultq( (Integer) indexMap.get( nset ) );
+ return defaultq( (Integer) indexMap.get( nset ) );
}
/** returns target of the transition from state i with label label.
@@ -254,7 +367,7 @@ public class DetWordAutom extends FiniteAutom {
return (Integer) defaultq( i ) ;
case SimpleLabel( _ ):
case TreeLabel( _ ):
- return (Integer) ((HashMap[])deltaq)[ i ].get( label ) ;
+ return (Integer) deltaq[ i ].get( label ) ;
/*case Pair( Integer state, Label lab ):
return state;
*/
@@ -315,7 +428,7 @@ public class DetWordAutom extends FiniteAutom {
for( Iterator su = targets.iterator(); su.hasNext(); ) {
TreeSet nset = (TreeSet) su.next();
- HashMap ddelta = (HashMap) dLeft.deltaq( nset );
+ HashMap ddelta = dLeft.deltaq( nset );
// ... at THIS dstate
if( (Integer) ddelta.get( theLabel ) == dstate ) {
@@ -366,7 +479,7 @@ public class DetWordAutom extends FiniteAutom {
for( Iterator su = targets.iterator(); su.hasNext(); ) {
TreeSet nset = (TreeSet) su.next();
- Integer ddef = (Integer) dLeft.defaultq( nset );
+ Integer ddef = dLeft.defaultq( nset );
//System.out.println( "ddef ="+ddef );
@@ -494,7 +607,7 @@ public class DetWordAutom extends FiniteAutom {
////System.out.print(" binders: ");
////System.out.print( right.qbinders[ npair.nstate.intValue() ] );
- HashMap delta = (HashMap) right.deltaq( npair.nstate );
+ HashMap delta = right.deltaq( npair.nstate );
////System.out.print(" we could have arrived : ");
//search the delta for target invIndexMap
@@ -564,7 +677,7 @@ public class DetWordAutom extends FiniteAutom {
nsrc = new TreeMap( new StateSetComparator() );
// now for all default transitions that arrive at this nfa state
- Vector defqs = (Vector) right.defaultq( npair.nstate );
+ Vector defqs = right.defaultq( npair.nstate );
for( Iterator it = defqs.iterator(); it.hasNext(); ) {
Integer nq = (Integer) it.next();
//System.out.println("checking nq="+nq);
@@ -699,7 +812,7 @@ public class DetWordAutom extends FiniteAutom {
hmap.put( dtarget, i );
}
- ((HashMap[])deltaq)[ 0 ] = hmap; // careful, this maps Int to Int
+ deltaq[ 0 ] = hmap; // careful, this maps Int to Int
qbinders[ 0 ] = new Vector();
//((Vector[])defaultq)[ 0 ] = new Vector(); is null
diff --git a/sources/scalac/transformer/matching/FiniteAutom.java b/sources/scalac/transformer/matching/FiniteAutom.java
deleted file mode 100644
index f075e4aa93..0000000000
--- a/sources/scalac/transformer/matching/FiniteAutom.java
+++ /dev/null
@@ -1,120 +0,0 @@
-package scalac.transformer.matching ;
-
-import java.util.Iterator ;
-import java.util.HashSet ;
-import java.util.HashMap ;
-import java.util.TreeSet ;
-import java.util.TreeMap ;
-
-public abstract class FiniteAutom {
-
- //final static Integer FINTAG = new Integer(0);
-
- /** number of states */
- protected int nstates;
-
- /** the 'alphabet' */
- protected HashSet labels;
-
- /** the set of final states, here as a TreeMap */
- protected TreeMap finals;
-
- /** dfa: HashMap trans: Object -> Integer
- * nfa: HashMap trans: Object -> Vector [ Integer ]
- *
- * nfa: Integer ->(Object -> Vector [ Int ])
- * [q] |->( a |-> { q' | (q,a,q') in \deltaright } )
- *
- * dfa: Integer ->(Object -> Int)
- * [q] |->( a |-> q' | \deltaright(q,a) = q' } )
- */
-
- public Object deltaq;
-
- public Object defaultq; // this gives the default transitions
-
- //protected HashMap deltaq[];
-
- // --- accessor methods
-
- /** returns number of states
- */
- public int nstates() {
- return nstates;
- }
-
- /** returns the labels
- */
- public HashSet labels() {
- return labels;
- }
-
- /** returns the transitions
- */
- public Object deltaq( int state ) {
- return ((Object []) deltaq)[ state ];
- }
-
- /** returns the transitions
- */
- public Object deltaq( Integer state ) {
- return ((Object []) deltaq)[ state.intValue() ];
- }
-
-
- /** returns the transitions
- */
- public Object defaultq( int state ) {
- return ((Object []) defaultq)[ state ];
- }
-
- /** returns the transitions
- */
- public Object defaultq( Integer state ) {
- return ((Object []) defaultq)[ state.intValue() ];
- }
-
-
- /** returns true if the state is final
- */
- public boolean isFinal( int state ) {
- return ((finals != null)
- && (finals.get( new Integer( state )) != null));
- }
-
- /** returns true if the state is final
- */
- public boolean isFinal( Integer state ) {
- return ((finals != null) && finals.containsKey( state ));
- }
-
- /** returns true if the state is final
- */
- public Integer finalTag( Integer state ) {
- return (Integer) finals.get( state );
- }
-
-
- public Integer finalTag( int state ) {
- return (Integer) finals.get( new Integer (state ));
- }
-
- /** returns true if the set of states contains at least one final state
- */
- boolean containsFinal( TreeSet Q ) {
- for( Iterator it = Q.iterator(); it.hasNext(); ) {
- if( isFinal( (Integer) it.next()))
- return true;
- }
- return false;
- }
-
-
- /** returns true if there are no finite states
- */
- public boolean isEmpty() {
- return finals.isEmpty();
- }
-
-
-}
diff --git a/sources/scalac/transformer/matching/NondetWordAutom.java b/sources/scalac/transformer/matching/NondetWordAutom.java
index f4a7458f52..d0133955a8 100644
--- a/sources/scalac/transformer/matching/NondetWordAutom.java
+++ b/sources/scalac/transformer/matching/NondetWordAutom.java
@@ -13,7 +13,120 @@ import java.util.* ;
* states are represented (implicitly) as Integer objects.
*/
-public class NondetWordAutom extends FiniteAutom {
+public class NondetWordAutom {
+
+ // BEGIN stuff from FiniteAutom
+
+ //final static Integer FINTAG = new Integer(0);
+
+ /** number of states */
+ protected int nstates;
+
+ /** the 'alphabet' */
+ protected HashSet labels;
+
+ /** the set of final states, here as a TreeMap */
+ protected TreeMap finals;
+
+ /** dfa: HashMap trans: Object -> Integer
+ * nfa: HashMap trans: Object -> Vector [ Integer ]
+ *
+ * nfa: Integer ->(Object -> Vector [ Int ])
+ * [q] |->( a |-> { q' | (q,a,q') in \deltaright } )
+ *
+ * dfa: Integer ->(Object -> Int)
+ * [q] |->( a |-> q' | \deltaright(q,a) = q' } )
+ */
+
+ public HashMap[] deltaq;
+
+ public Vector[] defaultq; // this gives the default transitions
+
+ //protected HashMap deltaq[];
+
+ // --- accessor methods
+
+ /** returns number of states
+ */
+ public int nstates() {
+ return nstates;
+ }
+
+ /** returns the labels
+ */
+ public HashSet labels() {
+ return labels;
+ }
+
+ /** returns the transitions
+ */
+ public HashMap deltaq( int state ) {
+ return deltaq[ state ];
+ }
+
+ /** returns the transitions
+ */
+ public HashMap deltaq( Integer state ) {
+ return deltaq[ state.intValue() ];
+ }
+
+
+ /** returns the transitions
+ */
+ public Vector defaultq( int state ) {
+ return defaultq[ state ];
+ }
+
+ /** returns the transitions
+ */
+ public Vector defaultq( Integer state ) {
+ return defaultq[ state.intValue() ];
+ }
+
+
+ /** returns true if the state is final
+ */
+ public boolean isFinal( int state ) {
+ return ((finals != null)
+ && (finals.get( new Integer( state )) != null));
+ }
+
+ /** returns true if the state is final
+ */
+ public boolean isFinal( Integer state ) {
+ return ((finals != null) && finals.containsKey( state ));
+ }
+
+ /** returns true if the state is final
+ */
+ public Integer finalTag( Integer state ) {
+ return (Integer) finals.get( state );
+ }
+
+
+ public Integer finalTag( int state ) {
+ return (Integer) finals.get( new Integer (state ));
+ }
+
+ /** returns true if the set of states contains at least one final state
+ */
+ boolean containsFinal( TreeSet Q ) {
+ for( Iterator it = Q.iterator(); it.hasNext(); ) {
+ if( isFinal( (Integer) it.next()))
+ return true;
+ }
+ return false;
+ }
+
+
+ /** returns true if there are no finite states
+ */
+ public boolean isEmpty() {
+ return finals.isEmpty();
+ }
+
+ // END stuff from FiniteAutom
+
// inherited from FiniteAutom
@@ -58,13 +171,13 @@ public class NondetWordAutom extends FiniteAutom {
for( Iterator it = Qsrc.iterator(); it.hasNext(); ) {
// state
int q1 = ((Integer) it.next()).intValue();
- Vector ps = (Vector) ((HashMap[])deltaq)[ q1 ].get( label );
+ Vector ps = (Vector) deltaq[ q1 ].get( label );
//System.out.println( "q1 "+q1+" targ:"+ps.toString() );
if( ps!=null )
Qdest.addAll( ps );
- Qdest.addAll((Vector) defaultq( q1 ));
+ Qdest.addAll( defaultq( q1 ) );
}
return Qdest;
}
@@ -76,7 +189,7 @@ public class NondetWordAutom extends FiniteAutom {
for( Iterator p1 = P1.iterator(); p1.hasNext(); ) {
int q1 = ((Integer) p1.next()).intValue();
//System.out.println(" q1:"+q1+ " defa: "+defaultq( q1 ));
- defTarget.addAll( (Vector) defaultq( q1 ));
+ defTarget.addAll( defaultq( q1 ) );
}
return defTarget;
}
@@ -175,7 +288,7 @@ public class NondetWordAutom extends FiniteAutom {
_deltaq [ i + offset ] = (HashMap) mapmap( ((HashMap[])deltaq)[ i ],
offset, new HashMap(), false, true);
- _defaultq[ i + offset ] = vmap( offset, ((Vector[])defaultq)[ i ]);
+ _defaultq[ i + offset ] = vmap( offset, defaultq[ i ] );
}
if ((_qbinders != null) &&( qbinders != null ))
@@ -210,7 +323,7 @@ public class NondetWordAutom extends FiniteAutom {
finals.put( q0, finTag );
- HashMap tmp = (HashMap) deltaq( ostate );
+ HashMap tmp = deltaq( ostate );
if( reloc )
tmp = (HashMap) mapmap( tmp, 1, new HashMap(), false, true );
@@ -225,7 +338,7 @@ public class NondetWordAutom extends FiniteAutom {
}
//System.out.println( "normalize:defaultq[ "+ostate+" ] "+((Vector[]) defaultq) [ ostate.intValue() ]);
if( defaultq( ostate ) != null )
- idefault.addAll( (Vector) defaultq( ostate ) );
+ idefault.addAll( defaultq( ostate ) );
}
if( reloc ) {
@@ -247,9 +360,9 @@ public class NondetWordAutom extends FiniteAutom {
this.qbinders = _qbinders;
}
- ((HashMap[])this.deltaq) [ 0 ] = idelta;
+ this.deltaq [ 0 ] = idelta;
//System.out.println("normalize:deltaq[ 0 ]"+ idelta );
- ((Vector[])this.defaultq) [ 0 ] = new Vector( idefault );
+ this.defaultq[ 0 ] = new Vector( idefault );
//System.out.println("normalize:defaultq[ 0 ]"+ idefault );
@@ -269,8 +382,8 @@ public class NondetWordAutom extends FiniteAutom {
HashSet labels,
TreeSet initials,
TreeMap finals,
- Object deltaq,
- Object defaultq,
+ HashMap[] deltaq,
+ Vector[] defaultq,
Object qbinders) {
this.nstates = nstates;
this.labels = labels;
@@ -329,7 +442,7 @@ public class NondetWordAutom extends FiniteAutom {
this.defaultq = new Vector [ nstates ];
//TreeSet defaultqSet = new TreeSet();
- ((HashMap [])deltaq)[ 0 ] = new HashMap(); // 0 = our new initial state
+ deltaq[ 0 ] = new HashMap(); // 0 = our new initial state
TreeSet initials = new TreeSet();
@@ -345,8 +458,8 @@ public class NondetWordAutom extends FiniteAutom {
n.relocate( offs,
this.finals,
- (HashMap[]) this.deltaq,
- (Vector[]) this.defaultq,
+ this.deltaq,
+ this.defaultq,
(Vector[]) this.qbinders );
}
@@ -383,7 +496,7 @@ public class NondetWordAutom extends FiniteAutom {
System.out.print("*"); //final
}
System.out.print(" transitions: {");
- HashMap arrows = ((HashMap[])deltaq)[ i ];
+ HashMap arrows = deltaq[ i ];
for( Iterator it = arrows.keySet().iterator();
it.hasNext(); ) {