Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- bool startstate(string w) //also final state
- {
- int charpos = 0;
- bool result = true; //result of going through bools
- while(w[charpos] != '\0')
- {
- switch(w[charpos])
- {
- case 'a': case 'i': case 'u': case 'e': case 'o':
- result = vowels(w, charpos);
- break;
- case 'n': case 'k': case 'h': case 'm': case 'r': case 'g': case 'b': case 'p':
- result = consonants(w, charpos);
- break;
- case 's':
- result = sRoot(w, charpos);
- break;
- case 'z':
- result = zRoot(w, charpos);
- break;
- case 'j':
- result = jRoot(w, charpos);
- break;
- case 't':
- result = tRoot(w, charpos);
- break;
- case 'd':
- result = dRoot(w, charpos);
- break;
- case 'c':
- result = cRoot(w, charpos);
- break;
- case 'w':
- result = wRoot(w, charpos);
- break;
- case 'y':
- result = yRoot(w, charpos);
- break;
- default: //invalid character
- return false;
- }
- if(w[charpos] == 'E' || w[charpos] == 'I') //WORD2 check
- return true;
- if(result == false) //failed in bools
- return false;
- }
- return true;
- }
- bool vowels(string w, int& charpos)
- {
- int state = 0;
- if(w[charpos + 1] == 'n') //Vn
- {
- charpos++; charpos++;
- return true;
- }
- else
- {
- charpos++;
- return true;
- }
- }
- bool consonants(string w, int& charpos)
- {
- int state = 0;
- char hold = w[charpos];
- charpos++;
- if(state == 0 && w[charpos] == hold && (hold == 'k' || hold == 'p')) //little tsu, CC
- {
- state = 0;
- charpos++;
- }
- if(state == 0 && (w[charpos] == 'a' || w[charpos] == 'i' || w[charpos] == 'u' || w[charpos] == 'e' || w[charpos] == 'o')) //CV
- {
- state = 2;
- charpos++;
- }
- if(state == 0 && w[charpos] == 'y') //Cy
- {
- state = 1;
- charpos++;
- }
- if(state == 1 && (w[charpos] == 'a' || w[charpos] == 'u' || w[charpos] == 'o')) //CyV
- {
- state = 2;
- charpos++;
- }
- if(state == 2 && w[charpos] == 'n') //-n
- {
- charpos++;
- state = 3;
- }
- if(state == 2 || state == 3)
- return true;
- else
- return false;
- }
- bool sRoot(string w, int& charpos)
- {
- int state = 0;
- charpos++;
- if(state == 0 && w[charpos] == 's') //little tsu, ss
- {
- state = 0;
- charpos++;
- }
- if(state == 0 && w[charpos] == 'h') //sh
- {
- state = 1;
- charpos++;
- }
- if(state == 1 && (w[charpos] == 'a' || w[charpos] == 'i' || w[charpos] == 'u' || w[charpos] == 'o')) //sha shi shu sho
- {
- state = 2;
- charpos++;
- }
- if(state == 0 && (w[charpos] == 'a' || w[charpos] == 'u' || w[charpos] == 'e' || w[charpos] == 'o')) //sa su se so
- {
- state = 2;
- charpos++;
- }
- if(state == 2 && w[charpos] == 'n') //-n
- {
- state = 3;
- charpos++;
- }
- if(state == 2 || state == 3)
- return true;
- else
- return false;
- }
- bool zRoot(string w, int& charpos)
- {
- int state = 0;
- charpos++;
- if(state == 0 && (w[charpos] == 'a' || w[charpos] == 'u' || w[charpos] == 'e' || w[charpos] == 'o')) //za zu ze zo
- {
- state = 1;
- charpos++;
- }
- if(state == 1 && w[charpos] == 'n') //-n
- {
- state = 2;
- charpos++;
- }
- if(state == 1 || state == 2)
- return true;
- else
- return false;
- }
- bool jRoot(string w, int& charpos)
- {
- int state = 0;
- charpos++;
- if(state == 0 && (w[charpos] == 'a' || w[charpos] == 'i' || w[charpos] == 'u' || w[charpos] == 'o')) //ja ji ju jo
- {
- state = 1;
- charpos++;
- }
- if(state == 1 && w[charpos] == 'n') //-n
- {
- state = 2;
- charpos++;
- }
- if(state == 1 || state == 2)
- return true;
- else
- return false;
- }
- bool tRoot(string w, int& charpos)
- {
- int state = 0;
- charpos++;
- if(state == 0 && w[charpos] == 't') //little tsu, tt
- {
- state = 0;
- charpos++;
- }
- if(state == 0 && w[charpos] == 's') //ts
- {
- state = 1;
- charpos++;
- }
- if(state == 1 && w[charpos] == 'u') //tsu
- {
- state = 2;
- charpos++;
- }
- if(state == 0 && (w[charpos] == 'a' || w[charpos] == 'e' || w[charpos] == 'o')) //ta te to
- {
- state = 2;
- charpos++;
- }
- if(state == 2 && w[charpos] == 'n') //-n
- {
- state = 3;
- charpos++;
- }
- if(state == 2 || state == 3)
- return true;
- else
- return false;
- }
- bool dRoot(string w, int& charpos)
- {
- int state = 0;
- charpos++;
- if(state == 0 && (w[charpos] == 'a' || w[charpos] == 'e' || w[charpos] == 'o')) //da de do
- {
- state = 1;
- charpos++;
- }
- if(state == 1 && w[charpos] == 'n') //-n
- {
- state = 2;
- charpos++;
- }
- if(state == 1 || state == 2)
- return true;
- else
- return false;
- }
- bool cRoot(string w, int& charpos)
- {
- int state = 0;
- charpos++;
- if(state == 0 && w[charpos] == 'c') //little tsu
- {
- state = 0;
- charpos++;
- }
- if(state == 0 && w[charpos] == 'h') //ch
- {
- state = 1;
- charpos++;
- }
- if(state == 1 && (w[charpos] == 'a' || w[charpos] == 'i' || w[charpos] == 'u' || w[charpos] == 'o')) //cha chi chu cho
- {
- state = 2;
- charpos++;
- }
- if(state == 2 && w[charpos] == 'n') //-n
- {
- state = 3;
- charpos++;
- }
- if(state == 2 || state == 3)
- return true;
- else
- return false;
- }
- bool wRoot(string w, int& charpos)
- {
- int state = 0;
- charpos++;
- if(state == 0 && w[charpos] == 'a') //wa
- {
- state = 1;
- charpos++;
- }
- if(state == 1 && w[charpos] == 'n') //wan
- {
- state = 2;
- charpos++;
- }
- if(state == 1 || state == 2)
- return true;
- else
- return false;
- }
- bool yRoot(string w, int& charpos)
- {
- int state = 0;
- charpos++;
- if(state == 0 && (w[charpos] == 'a' || w[charpos] == 'u' || w[charpos] == 'o')) //ya yu yo
- {
- state = 1;
- charpos++;
- }
- if(state == 1 && w[charpos] == 'n') //yan yun yon
- {
- state = 2;
- charpos++;
- }
- if(state == 1 || state == 2)
- return true;
- else
- return false;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement