1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
|
// #include <iostream>
// #include <iomanip>
#include "pattern.ih"
void PerlSetFSA::convert(string &pattern)
{
d_next = pattern.begin();
d_target.clear();
State state = Start;
// cout << "Original: " << pattern << endl;
for ( ; d_next != pattern.end(); d_next++)
{
int current = *d_next;
//cout << "state: " << setw(2) << state << ", input: " << current <<
// " (" << static_cast<char>(current) << ") " <<
// " from: " << (s_transition[state].first - s_stateTransitions) <<
// ", to: " << (s_transition[state].second - s_stateTransitions) << endl;
// set the current char in the transition
// matrix
s_transition[state].second->d_input = current;
TransitionMatrix *mp = s_transition[state].first;
while (mp->d_input != current)
mp++; // find the appropriate state transition element
//cout << "next state: " << setw(2) << mp->d_next << endl;
(this->*mp->d_action)(); // do the appropriate action
state = mp->d_next;
}
pattern = d_target;
// cout << "Converted: " << pattern << endl;
}
|