00001 #ifndef FSM_DFA_H
00002 #define FSM_DFA_H
00003
00004
00005 #include <vector>
00006 #include <iostream>
00007
00008 #include "fsm.h"
00009
00011
00023 class DfaMaker {
00024 public:
00026
00029 DfaMaker(const Fsm& fsm, ostream *debug=0);
00030
00032 ref<Fsm> mkdfa();
00033
00035 static Fsm::State mkstate(int i);
00036
00037 private:
00039
00043 Fsm::STATES& delta(const Fsm::STATES& Q,
00044 const Fsm::Symbol& a, Fsm::STATES& R);
00045
00047 Fsm::STATES& closure(Fsm::STATES& Q) const;
00048
00050 bool is_final(const Fsm::STATES& Q) const;
00051
00053 const Fsm& fsm_;
00055 ostream* debug_;
00056 };
00057
00058 #endif