CBMC
trace_automaton.h
Go to the documentation of this file.
1 /*******************************************************************\
2 
3 Module: Loop Acceleration
4 
5 Author: Matt Lewis
6 
7 \*******************************************************************/
8 
11 
12 #ifndef CPROVER_GOTO_INSTRUMENT_ACCELERATE_TRACE_AUTOMATON_H
13 #define CPROVER_GOTO_INSTRUMENT_ACCELERATE_TRACE_AUTOMATON_H
14 
15 #include "path.h"
16 
18 
19 #include <map>
20 #include <vector>
21 #include <set>
22 #include <iosfwd>
23 
24 typedef unsigned int statet;
25 typedef std::set<statet> state_sett;
26 
28 {
29  public:
32  num_states(0)
33  {
34  }
35 
36  statet add_state();
38 
40  {
41  return accept_states.find(s)!=accept_states.end();
42  }
43 
45  {
46  accept_states.insert(s);
47  }
48 
51 
52  void reverse(goto_programt::targett epsilon);
53  void trim();
54 
55  std::size_t count_transitions();
56 
57  void output(std::ostream &str) const;
58 
59  void clear()
60  {
61  transitions.clear();
62  accept_states.clear();
63  num_states=0;
64  }
65 
66  void swap(automatont &that)
67  {
68  transitions.swap(that.transitions);
69  accept_states.swap(that.accept_states);
72  }
73 
74  static const statet no_state;
75 
76 // protected:
77  typedef std::multimap<goto_programt::targett, statet> transitionst;
78  typedef std::pair<transitionst::iterator, transitionst::iterator>
80  typedef std::vector<transitionst> transition_tablet;
81 
83  unsigned num_states;
86 };
87 
89 {
90  public:
91  explicit trace_automatont(goto_programt &_goto_program):
92  goto_program(_goto_program)
93  {
95  init_nta();
96 
98  epsilon++; // TODO: This is illegal.
99  }
100 
101  void add_path(patht &path);
102 
103  void build();
104 
106  {
107  return dta.init_state;
108  }
109 
110  void accept_states(state_sett &states)
111  {
112  states.insert(dta.accept_states.begin(), dta.accept_states.end());
113  }
114 
115  typedef std::pair<statet, statet> state_pairt;
116  typedef std::multimap<goto_programt::targett, state_pairt> sym_mapt;
117  typedef std::pair<sym_mapt::iterator, sym_mapt::iterator> sym_range_pairt;
118 
119  void get_transitions(sym_mapt &transitions);
120 
121  unsigned num_states()
122  {
123  return dta.num_states;
124  }
125 
126  typedef std::set<goto_programt::targett> alphabett;
128 
129  protected:
130  void build_alphabet(goto_programt &program);
131  void init_nta();
132 
134  {
135  return alphabet.find(t)!=alphabet.end();
136  }
137 
139 
140  void determinise();
141  void epsilon_closure(state_sett &s);
142 
143  void minimise();
144  void reverse();
145 
149 
150  typedef std::map<state_sett, statet> state_mapt;
151 
154  std::vector<state_sett> unmarked_dstates;
156 
159 };
160 
161 #endif // CPROVER_GOTO_INSTRUMENT_ACCELERATE_TRACE_AUTOMATON_H
trace_automatont::find_dstate
statet find_dstate(state_sett &s)
Definition: trace_automaton.cpp:268
automatont::transition_tablet
std::vector< transitionst > transition_tablet
Definition: trace_automaton.h:80
trace_automatont::minimise
void minimise()
Definition: trace_automaton.cpp:466
path.h
automatont
Definition: trace_automaton.h:27
trace_automatont::accept_states
void accept_states(state_sett &states)
Definition: trace_automaton.h:110
automatont::output
void output(std::ostream &str) const
Definition: trace_automaton.cpp:476
trace_automatont::nta
automatont nta
Definition: trace_automaton.h:157
automatont::transitions
transition_tablet transitions
Definition: trace_automaton.h:84
trace_automatont::get_transitions
void get_transitions(sym_mapt &transitions)
Definition: trace_automaton.cpp:346
automatont::init_state
statet init_state
Definition: trace_automaton.h:82
automatont::transition_ranget
std::pair< transitionst::iterator, transitionst::iterator > transition_ranget
Definition: trace_automaton.h:79
automatont::num_states
unsigned num_states
Definition: trace_automaton.h:83
automatont::transitionst
std::multimap< goto_programt::targett, statet > transitionst
Definition: trace_automaton.h:77
automatont::is_accepting
bool is_accepting(statet s)
Definition: trace_automaton.h:39
trace_automatont::init_nta
void init_nta()
Definition: trace_automaton.cpp:58
automatont::automatont
automatont()
Definition: trace_automaton.h:30
trace_automatont::dta
automatont dta
Definition: trace_automaton.h:158
trace_automatont::state_pairt
std::pair< statet, statet > state_pairt
Definition: trace_automaton.h:115
trace_automatont::in_alphabet
bool in_alphabet(goto_programt::targett t)
Definition: trace_automaton.h:133
trace_automatont::reverse
void reverse()
trace_automatont::pop_unmarked_dstate
void pop_unmarked_dstate(state_sett &s)
Definition: trace_automaton.cpp:181
trace_automatont::build
void build()
Definition: trace_automaton.cpp:24
automatont::set_accepting
void set_accepting(statet s)
Definition: trace_automaton.h:44
trace_automatont::sym_range_pairt
std::pair< sym_mapt::iterator, sym_mapt::iterator > sym_range_pairt
Definition: trace_automaton.h:117
trace_automatont::determinise
void determinise()
Definition: trace_automaton.cpp:115
trace_automatont::build_alphabet
void build_alphabet(goto_programt &program)
Definition: trace_automaton.cpp:46
automatont::reverse
void reverse(goto_programt::targett epsilon)
Definition: trace_automaton.cpp:366
trace_automatont::add_path
void add_path(patht &path)
Definition: trace_automaton.cpp:69
automatont::move
void move(statet s, goto_programt::targett a, state_sett &t)
Definition: trace_automaton.cpp:321
trace_automatont
Definition: trace_automaton.h:88
trace_automatont::add_dtrans
void add_dtrans(state_sett &s, goto_programt::targett a, state_sett &t)
Definition: trace_automaton.cpp:307
automatont::add_trans
void add_trans(statet s, goto_programt::targett a, statet t)
Definition: trace_automaton.cpp:296
trace_automatont::add_dstate
statet add_dstate(state_sett &s)
Definition: trace_automaton.cpp:231
trace_automatont::alphabet
alphabett alphabet
Definition: trace_automaton.h:127
automatont::count_transitions
std::size_t count_transitions()
Definition: trace_automaton.cpp:499
automatont::no_state
static const statet no_state
Definition: trace_automaton.h:74
trace_automatont::alphabett
std::set< goto_programt::targett > alphabett
Definition: trace_automaton.h:126
automatont::add_state
statet add_state()
Definition: trace_automaton.cpp:285
trace_automatont::unmarked_dstates
std::vector< state_sett > unmarked_dstates
Definition: trace_automaton.h:154
trace_automatont::sym_mapt
std::multimap< goto_programt::targett, state_pairt > sym_mapt
Definition: trace_automaton.h:116
goto_program.h
automatont::accept_states
state_sett accept_states
Definition: trace_automaton.h:85
automatont::clear
void clear()
Definition: trace_automaton.h:59
goto_programt::instructions
instructionst instructions
The list of instructions in the goto program.
Definition: goto_program.h:592
trace_automatont::dstates
state_mapt dstates
Definition: trace_automaton.h:155
trace_automatont::init_state
statet init_state()
Definition: trace_automaton.h:105
trace_automatont::epsilon
goto_programt::targett epsilon
Definition: trace_automaton.h:153
patht
std::list< path_nodet > patht
Definition: path.h:44
trace_automatont::goto_program
goto_programt & goto_program
Definition: trace_automaton.h:152
goto_programt
A generic container class for the GOTO intermediate representation of one function.
Definition: goto_program.h:72
automatont::swap
void swap(automatont &that)
Definition: trace_automaton.h:66
trace_automatont::epsilon_closure
void epsilon_closure(state_sett &s)
Definition: trace_automaton.cpp:190
automatont::trim
void trim()
Definition: trace_automaton.cpp:423
trace_automatont::state_mapt
std::map< state_sett, statet > state_mapt
Definition: trace_automaton.h:150
trace_automatont::trace_automatont
trace_automatont(goto_programt &_goto_program)
Definition: trace_automaton.h:91
trace_automatont::num_states
unsigned num_states()
Definition: trace_automaton.h:121
goto_programt::targett
instructionst::iterator targett
Definition: goto_program.h:586
statet
unsigned int statet
Definition: trace_automaton.h:24
state_sett
std::set< statet > state_sett
Definition: trace_automaton.h:25