10#ifndef TEUCHOS_FINITE_AUTOMATON_HPP 
   11#define TEUCHOS_FINITE_AUTOMATON_HPP 
   13#include <Teuchos_TableDecl.hpp> 
   20#ifdef HAVE_TEUCHOSCORE_CXX11 
   21extern template struct Table<int>;
 
   33struct FiniteAutomaton {
 
   35  std::vector<int> accepted_tokens;
 
   36  bool is_deterministic;
 
   38  FiniteAutomaton(
int nsymbols_init, 
bool is_deterministic_init, 
int nstates_reserve);
 
   39  void swap(FiniteAutomaton& other);
 
   43inline bool operator==(FiniteAutomaton 
const&, FiniteAutomaton 
const&) {
 
   47inline void swap(FiniteAutomaton& a, FiniteAutomaton& b) { a.
swap(b); }
 
   49int get_nstates(FiniteAutomaton 
const& fa);
 
   50int get_nsymbols(FiniteAutomaton 
const& fa);
 
   51bool get_determinism(FiniteAutomaton 
const& fa);
 
   52int get_epsilon0(FiniteAutomaton 
const& fa);
 
   53int get_epsilon1(FiniteAutomaton 
const& fa);
 
   54int add_state(FiniteAutomaton& fa);
 
   55void add_transition(FiniteAutomaton& fa, 
int from_state, 
int at_symbol, 
int to_state);
 
   56void add_accept(FiniteAutomaton& fa, 
int state, 
int token);
 
   57void remove_accept(FiniteAutomaton& fa, 
int state);
 
   58int step(FiniteAutomaton 
const& fa, 
int state, 
int symbol);
 
   59int accepts(FiniteAutomaton 
const& fa, 
int state);
 
   60int get_nsymbols_eps(FiniteAutomaton 
const& fa);
 
   61void append_states(FiniteAutomaton& fa, FiniteAutomaton 
const& other);
 
   63void make_single_nfa(FiniteAutomaton& result, 
int nsymbols, 
int symbol, 
int token = 0);
 
   64void make_set_nfa(FiniteAutomaton& result, 
int nsymbols, std::set<int> 
const& accepted, 
int token = 0);
 
   65void make_range_nfa(FiniteAutomaton& result, 
int nsymbols, 
int range_start, 
int range_end, 
int token = 0);
 
   66void unite(FiniteAutomaton& result, FiniteAutomaton 
const& a, FiniteAutomaton 
const& b);
 
   67void concat(FiniteAutomaton& result, FiniteAutomaton 
const& a, FiniteAutomaton 
const& b, 
int token = 0);
 
   68void plus(FiniteAutomaton& result, FiniteAutomaton 
const& a, 
int token = 0);
 
   69void maybe(FiniteAutomaton& result, FiniteAutomaton 
const& a, 
int token = 0);
 
   70void star(FiniteAutomaton& result, FiniteAutomaton 
const& a, 
int token = 0);
 
   71void make_deterministic(FiniteAutomaton& result, FiniteAutomaton& nfa);
 
   72void simplify_once(FiniteAutomaton& result, FiniteAutomaton 
const& fa);
 
   73void simplify(FiniteAutomaton& result, FiniteAutomaton 
const& fa);
 
   75void add_char_transition(FiniteAutomaton& fa, 
int from_state, 
char at_char, 
int to_state);
 
   76bool is_symbol(
char c);
 
   77int get_symbol(
char c);
 
   78char get_char(
int symbol);
 
   79void make_char_set_nfa(FiniteAutomaton& result, std::set<char> 
const& accepted, 
int token = 0);
 
   80void make_char_range_nfa(FiniteAutomaton& result, 
char range_start, 
char range_end, 
int token = 0);
 
   81void make_char_single_nfa(FiniteAutomaton& result, 
char symbol_char, 
int token = 0);
 
   82void negate_set(std::set<char>& result, std::set<char> 
const& s);
 
   84std::ostream& operator<<(std::ostream& os, FiniteAutomaton 
const& fa);
 
void swap(RCP< T > &r_ptr)
Swap the contents with some other RCP object.
 
The Teuchos namespace contains all of the classes, structs and enums used by Teuchos,...