Юлия Козлова
Юлия Козлова

Помогите доделать пожалуйста лабу по информатике с++

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 <логическое выражение> <операторы>, т. е. лексический анализатор

АМ
Алексей Марин

Халявщик. Деньги платишь?

Мария 89
Мария 89

я с нуля напишу дешевле чем если ты меня заставишь это развивать

Похожие вопросы
Помогите, пожалуйста, по информатике
информатика ) помогите пожалуйста )
Пожалуйста помогите мне доделать курсовую работу
помогите пожалуйста доделать задачу
помогите с лабой по инфе
Тест по информатике, 2 вопроса, помогите доделать
Помогите доделать!!!
помогите пожалуйста доделать плейер на delphi
Лаба по информатике, ПОМОГИТЕ ПОЖАЛУЙСТА 2
лаба по информатике, помогите пожалуйста