Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #ifndef PPJ_ENKA_H
- #define PPJ_ENKA_H
- #include <set>
- #include <map>
- #include <string>
- using namespace std;
- class State {
- public:
- void addTrans(char letter, State* next) {
- trans[letter].insert(next);
- }
- set <State*> getNext (char letter) {
- return trans[letter];
- }
- private:
- map <char, set <State*> > trans;
- };
- /**
- * This class only keeps pointers to start state and to end state.
- * It provides convinient ways to build Enka, through operators.
- *
- */
- class Enka {
- public:
- const static char EPS = 0; // value used for eps transitions
- /**
- * Constructs an automata that only accepts empty string.
- */
- Enka();
- /**
- * Constructs an automata that only accepts the letter 'letter'.
- */
- Enka(char letter);
- /**
- * Evaluates if a string is accepted by this automata.
- * @return True if word is accepted
- * False otherwise
- */
- bool evaluate(string word);
- /**
- * Creates automata that accepts left | right (or).
- */
- Enka operator +(const Enka& right);
- State* startState;
- State* endState; // endState is always considered acceptable
- private:
- set <State*> currStates;
- Enka(State* s, State* v) {
- startState = s;
- endState = v;
- }
- void makeTransition(char letter);
- void addEpsClosure();
- };
- #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement