1 #ifndef TEUCHOS_FINITE_AUTOMATON_HPP 2 #define TEUCHOS_FINITE_AUTOMATON_HPP 4 #include <Teuchos_TableDecl.hpp> 11 #ifdef HAVE_TEUCHOSCORE_CXX11 12 extern template class Table<int>;
24 struct FiniteAutomaton {
26 std::vector<int> accepted_tokens;
27 bool is_deterministic;
29 FiniteAutomaton(
int nsymbols_init,
bool is_deterministic_init,
int nstates_reserve);
30 void swap(FiniteAutomaton& other);
34 inline bool operator==(FiniteAutomaton
const&, FiniteAutomaton
const&) {
38 inline void swap(FiniteAutomaton& a, FiniteAutomaton& b) { a.swap(b); }
40 int get_nstates(FiniteAutomaton
const& fa);
41 int get_nsymbols(FiniteAutomaton
const& fa);
42 bool get_determinism(FiniteAutomaton
const& fa);
43 int get_epsilon0(FiniteAutomaton
const& fa);
44 int get_epsilon1(FiniteAutomaton
const& fa);
45 int add_state(FiniteAutomaton& fa);
46 void add_transition(FiniteAutomaton& fa,
int from_state,
int at_symbol,
int to_state);
47 void add_accept(FiniteAutomaton& fa,
int state,
int token);
48 void remove_accept(FiniteAutomaton& fa,
int state);
49 int step(FiniteAutomaton
const& fa,
int state,
int symbol);
50 int accepts(FiniteAutomaton
const& fa,
int state);
51 int get_nsymbols_eps(FiniteAutomaton
const& fa);
52 void append_states(FiniteAutomaton& fa, FiniteAutomaton
const& other);
54 void make_single_nfa(FiniteAutomaton& result,
int nsymbols,
int symbol,
int token = 0);
55 void make_set_nfa(FiniteAutomaton& result,
int nsymbols, std::set<int>
const& accepted,
int token = 0);
56 void make_range_nfa(FiniteAutomaton& result,
int nsymbols,
int range_start,
int range_end,
int token = 0);
57 void unite(FiniteAutomaton& result, FiniteAutomaton
const& a, FiniteAutomaton
const& b);
58 void concat(FiniteAutomaton& result, FiniteAutomaton
const& a, FiniteAutomaton
const& b,
int token = 0);
59 void plus(FiniteAutomaton& result, FiniteAutomaton
const& a,
int token = 0);
60 void maybe(FiniteAutomaton& result, FiniteAutomaton
const& a,
int token = 0);
61 void star(FiniteAutomaton& result, FiniteAutomaton
const& a,
int token = 0);
62 void make_deterministic(FiniteAutomaton& result, FiniteAutomaton& nfa);
63 void simplify_once(FiniteAutomaton& result, FiniteAutomaton
const& fa);
64 void simplify(FiniteAutomaton& result, FiniteAutomaton
const& fa);
66 FiniteAutomaton make_char_nfa(
bool is_deterministic_init,
int nstates_reserve);
67 void add_char_transition(FiniteAutomaton& fa,
int from_state,
char at_char,
int to_state);
68 bool is_symbol(
char c);
69 int get_symbol(
char c);
70 char get_char(
int symbol);
71 void make_char_set_nfa(FiniteAutomaton& result, std::set<char>
const& accepted,
int token = 0);
72 void make_char_range_nfa(FiniteAutomaton& result,
char range_start,
char range_end,
int token = 0);
73 void make_char_single_nfa(FiniteAutomaton& result,
char symbol_char,
int token = 0);
74 void negate_set(std::set<char>& result, std::set<char>
const& s);
76 std::ostream& operator<<(std::ostream& os, FiniteAutomaton
const& fa);
bool operator==(const Allocator< T > &, const Allocator< U > &)
Return true if and only if the two input Allocator instances are interchangeable. ...
The Teuchos namespace contains all of the classes, structs and enums used by Teuchos, as well as a number of utility routines.