00001 #ifndef FSM_OPTIMIZER_H
00002 #define FSM_OPTIMIZER_H
00003
00004
00005 #include <iostream>
00006
00007 #include "fsm.h"
00008
00010
00013 class Optimizer {
00014 public:
00016 Optimizer(const Fsm& fsm, ostream* trace = 0);
00017
00018 ref<Fsm> optimize();
00019 private:
00021
00024 typedef map<pair<Fsm::State,Fsm::State>,bool> DISTINCT_T;
00025
00027
00032 DISTINCT_T distinct_;
00033
00035
00038 bool& distinct(const Fsm::State&, const Fsm::State&);
00039
00041 Fsm::State eq_class(const Fsm::State& q);
00042
00044 const Fsm& fsm_;
00046 ostream* debug_;
00047 };
00048
00049 #endif