Advertisement
Guest User

Untitled

a guest
Feb 23rd, 2019
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.40 KB | None | 0 0
  1. #ifndef PPJ_ENKA_H
  2. #define PPJ_ENKA_H
  3.  
  4. #include <set>
  5. #include <map>
  6. #include <string>
  7.  
  8. using namespace std;
  9.  
  10. class State {
  11. public:
  12. void addTrans(char letter, State* next) {
  13. trans[letter].insert(next);
  14. }
  15.  
  16. set <State*> getNext (char letter) {
  17. return trans[letter];
  18. }
  19.  
  20. private:
  21. map <char, set <State*> > trans;
  22. };
  23.  
  24. /**
  25. * This class only keeps pointers to start state and to end state.
  26. * It provides convinient ways to build Enka, through operators.
  27. *
  28. */
  29. class Enka {
  30. public:
  31. const static char EPS = 0; // value used for eps transitions
  32.  
  33. /**
  34. * Constructs an automata that only accepts empty string.
  35. */
  36. Enka();
  37.  
  38. /**
  39. * Constructs an automata that only accepts the letter 'letter'.
  40. */
  41. Enka(char letter);
  42.  
  43. /**
  44. * Evaluates if a string is accepted by this automata.
  45. * @return True if word is accepted
  46. * False otherwise
  47. */
  48. bool evaluate(string word);
  49.  
  50. /**
  51. * Creates automata that accepts left | right (or).
  52. */
  53. Enka operator +(const Enka& right);
  54.  
  55.  
  56. State* startState;
  57. State* endState; // endState is always considered acceptable
  58.  
  59.  
  60. private:
  61. set <State*> currStates;
  62.  
  63. Enka(State* s, State* v) {
  64. startState = s;
  65. endState = v;
  66. }
  67.  
  68. void makeTransition(char letter);
  69. void addEpsClosure();
  70. };
  71.  
  72. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement