Помогите доделать пожалуйста лабу по информатике с++
enum EState {S, Ai, Ac, As, Bs, Cs, Ds, Gs, E, F};
enum ELexType{ lWhile, lDo, lEnd, lAnd, lOr, lRel, lAs, lAo,
lVar, lConst };
struct Lex{
ELexType type;
int index;
int pos;
Lex* next;
} *pFirst = NULL, *pLast = NULL;
bool LexAnalysis( const char* text )
{
const char *str = text, *lexstart;
EState state = S, prevState;
int add;
while ((state != E) && (state != F))
{
prevState = state;
add = true;
switch (state) {
case S: {
if (isspace(*str)) ;
else if (isalpha(*str)) state = Ai;
else if (isdigit(*str)) state = Ac;
else if (*str=='<') state = As;
else if (*str=='=') state = Bs;
else if ((*str=='+')||(*str == '-')) state = Cs;
else if (*str==0) state = F;
else state = E;
add = false;
break;
}
case Ai: {
if (isspace(*str)) state = S;
else if (isalnum(*str)) add = false;
else if (*str=='<') state = As;
else if (*str=='=') state = Bs;
else if ((*str=='+')||(*str == '-')) state = Cs;
else if (*str==0) state = F;
else { state = E; add = false; }
break;
}
case Ac: {
if (isspace(*str)) state = S;
else if (isdigit(*str)) add = false;
else if (*str=='<') state = As;
else if (*str=='=') state = Bs;
else if ((*str=='+')||(*str == '-')) state = Cs;
else if (*str==0) state = F;
else { state = E; add = false; }
break;
}
case As: {
if (isspace(*str)) state = S;
else if (isalpha(*str)) state = Ai;
else if (isdigit(*str)) state = Ac;
else if ((*str=='=')||(*str == '>'))
{ state = Ds; add = false; }
else if (*str==0) state = F;
else { state = E; add = false; }
break;
}
case Bs: {
if (isspace(*str)) state = S;
else if (isalpha(*str)) state = Ai;
else if (isdigit(*str)) state = Ac;
else if (*str=='=') { state = Gs; add = false;
}
else if (*str==0) state = F;
else { state = E; add = false; }
break;
}
case Cs: case Ds: case Gs: {
if (isspace(*str)) state = S;
else if (isalpha(*str)) state = Ai;
else if (isdigit(*str)) state = Ac;
else if (*str==0) state = F;
else { state = E; add = false; }
break;
}
}
if ( add ) AddLex(prevState, text, lexstart, str);
if ( (state != prevState) &&
(state==Ai || state==Ac || state==As ||
state==Bs || state==Cs) )
lexstart = str;
if ((state!=E)&&(state !=F)) str++;
}
return (state == F);
}
void AddLex( EState state, const char* txt, const char* lexPtr, const char* curPtr);
int AddVar(const char* var);
int AddConst(const char* cons);
Нужно дописать 3 последних функции, программа должна распознавать строку do while <логическое выражение> <операторы>, т. е. лексический анализатор