|
FSMState |
|
1 /* 2 * FSMState.java 3 * 4 * Copyright (c) 1998-2001, The University of Sheffield. 5 * 6 * This file is part of GATE (see http://gate.ac.uk/), and is free 7 * software, licenced under the GNU Library General Public License, 8 * Version 2, June 1991 (in the distribution as file licence.html, 9 * and also available at http://gate.ac.uk/gate/licence.html). 10 * 11 * Valentin Tablan, 11/07/2000 12 * 13 * $Id: FSMState.java,v 1.7 2001/11/05 16:14:22 nasso Exp $ 14 */ 15 16 package gate.creole.gazetteer; 17 18 import java.util.*; 19 import java.io.*; 20 21 import gate.creole.tokeniser.*; 22 import gate.util.*; 23 24 /** Implements a state of the deterministic finite state machine of the 25 * gazetter. 26 * 27 */ 28 class FSMState implements Serializable { 29 30 /** Debug flag 31 */ 32 private static final boolean DEBUG = false; 33 34 /** Constructs a new FSMState object and adds it to the list of 35 * states of the {@link DefaultGazetteer} provided as owner. 36 * 37 * @param owner a {@link DefaultGazetteer} object 38 */ 39 public FSMState(DefaultGazetteer owner) { 40 myIndex = index++; 41 owner.fsmStates.add(this); 42 } 43 44 /** Adds a new value to the transition function 45 */ 46 // >>> DAM: was - to use charMap 47 /* 48 void put(Character chr, FSMState state) { 49 transitionFunction.put(chr,state); 50 } 51 */ 52 // >>> DAM: TransArray optimization 53 void put(char chr, FSMState state) { 54 transitionFunction.put(chr,state); 55 } 56 // >>> DAM: end 57 58 /** This method is used to access the transition function of this state. 59 */ 60 // >>> DAM: was 61 /* 62 FSMState next(Character chr) {//UnicodeType type){ 63 return (FSMState)transitionFunction.get(chr); 64 } 65 */ 66 // >>> DAM: TransArray optimization 67 FSMState next(char chr) {//UnicodeType type){ 68 return (FSMState)transitionFunction.get(chr); 69 } 70 // >>> DAM: end 71 72 /** Returns a GML (Graph Modelling Language) representation of the edges 73 * emerging from this state. 74 */ 75 //<<< DAM: was - to use new char Iter returned by the charMap iteratior 76 /* 77 String getEdgesGML() { 78 String res = ""; 79 Iterator charsIter = transitionFunction.keySet().iterator(); 80 Character currentChar; 81 FSMState nextState; 82 83 while(charsIter.hasNext()){ 84 currentChar = (Character)charsIter.next(); 85 nextState = next(currentChar); 86 res += "edge [ source " + myIndex + 87 " target " + nextState.getIndex() + 88 " label \"'" + currentChar + "'\" ]\n"; 89 } 90 */ 91 // DAM, TransArray optimization 92 String getEdgesGML() { 93 String res = ""; 94 char currentChar; 95 FSMState nextState; 96 97 for (int i = 0; i < transitionFunction.itemsKeys.length; i++) 98 { 99 currentChar = transitionFunction.itemsKeys[i]; 100 nextState = next(currentChar); 101 res += "edge [ source " + myIndex + 102 " target " + nextState.getIndex() + 103 " label \"'" + currentChar + "'\" ]\n"; 104 } 105 // >>> DAM, end 106 return res; 107 } 108 109 /** Checks whether this state is a final one 110 */ 111 boolean isFinal() { 112 // >>> was 113 // return !lookupSet.isEmpty(); 114 // >>> BOBI, Lookup opitimization 115 if (lookupSet==null) 116 return false; 117 return !lookupSet.isEmpty(); 118 // >>> end 119 } 120 121 /** Returns a set of {@link Lookup} objects describing the types of lookups 122 * the phrase for which this state is the final one belongs to 123 */ 124 Set getLookupSet(){return lookupSet;} 125 126 /** Adds a new looup description to this state's lookup descriptions set 127 */ 128 void addLookup(Lookup lookup) { 129 // >>> was nothing 130 // >>> BOBI, Lookup opitimization 131 if (lookupSet == null) 132 lookupSet = new HashSet(4); 133 // >>> end 134 135 lookupSet.add(lookup); 136 } // addLookup 137 138 /** Removes a looup description from this state's lookup descriptions set 139 */ 140 void removeLookup(Lookup lookup) { 141 lookupSet.remove(lookup); 142 } // removeLookup 143 144 /** Returns the unique ID of this state. 145 */ 146 int getIndex(){ return myIndex; } 147 148 149 /** The transition function of this state. 150 */ 151 // >>> was 152 // Map transitionFunction = new HashMap(); 153 // >>> NASO, hash4 optimization 154 // Map transitionFunction = new HashMap(4); 155 // >>> DAM, TransArray 156 charMap transitionFunction = new charMap(); 157 // >>> end 158 159 /** * 160 */ 161 // >>> was 162 // Set lookupSet = new HashSet(); 163 // >>> NASO, hash4 optimization 164 // Set lookupSet = new HashSet(4); 165 // >>> BOBI, Lookup opitimization 166 Set lookupSet; 167 // >>> end 168 169 /** 170 * The unique id of this state. This value is never used by the algorithms but 171 * it can be useful for graphical representations. 172 */ 173 int myIndex; 174 175 /** 176 * Class memebre used to generate unique ids for the instances 177 * 178 */ 179 static int index; 180 181 static{ 182 index = 0; 183 } 184 185 } // class FSMState 186
|
FSMState |
|