* \brief Deterministic finite automaton (%DFA) * * After initialization, the start state is always zero. * The final states are contiguous ranging from the first to the * last final state. * * \ingroup TaskModelIntExt */
| 2182 | * \ingroup TaskModelIntExt |
| 2183 | */ |
| 2184 | class DFA : public SharedHandle { |
| 2185 | private: |
| 2186 | /// Implementation of DFA |
| 2187 | class DFAI; |
| 2188 | /// Test whether DFA is equal to \a d |
| 2189 | GECODE_INT_EXPORT |
| 2190 | bool equal(const DFA& d) const; |
| 2191 | public: |
| 2192 | /// Specification of a %DFA transition |
| 2193 | class Transition { |
| 2194 | public: |
| 2195 | int i_state; ///< input state |
| 2196 | int symbol; ///< symbol |
| 2197 | int o_state; ///< output state |
| 2198 | /// Default constructor |
| 2199 | Transition(void); |
| 2200 | /// Initialize members |
| 2201 | Transition(int i_state0, int symbol0, int o_state0); |
| 2202 | }; |
| 2203 | /// Iterator for %DFA transitions (sorted by symbols) |
| 2204 | class Transitions { |
| 2205 | private: |
| 2206 | /// Current transition |
| 2207 | const Transition* c_trans; |
| 2208 | /// End of transitions |
| 2209 | const Transition* e_trans; |
| 2210 | public: |
| 2211 | /// Initialize to all transitions of DFA \a d |
| 2212 | Transitions(const DFA& d); |
| 2213 | /// Initialize to transitions of DFA \a d for symbol \a n |
| 2214 | Transitions(const DFA& d, int n); |
| 2215 | /// Test whether iterator still at a transition |
| 2216 | bool operator ()(void) const; |
| 2217 | /// Move iterator to next transition |
| 2218 | void operator ++(void); |
| 2219 | /// Return in-state of current transition |
| 2220 | int i_state(void) const; |
| 2221 | /// Return symbol of current transition |
| 2222 | int symbol(void) const; |
| 2223 | /// Return out-state of current transition |
| 2224 | int o_state(void) const; |
| 2225 | }; |
| 2226 | /// Iterator for %DFA symbols |
| 2227 | class Symbols { |
| 2228 | private: |
| 2229 | /// Current transition |
| 2230 | const Transition* c_trans; |
| 2231 | /// End of transitions |
| 2232 | const Transition* e_trans; |
| 2233 | public: |
| 2234 | /// Initialize to symbols of DFA \a d |
| 2235 | Symbols(const DFA& d); |
| 2236 | /// Test whether iterator still at a symbol |
| 2237 | bool operator ()(void) const; |
| 2238 | /// Move iterator to next symbol |
| 2239 | void operator ++(void); |
| 2240 | /// Return current symbol |
| 2241 | int val(void) const; |