Реализация языкового процессора оператора FOR языка BASIC
}
unsc();
if(var()==TRUE) return; // если пеpеменная - веpнуться
if(cbz()==TRUE) return; // если число без знака - веpнуться
error(7); // иначе - ошибка
}
/***********************************************************/
/* */
/* Число без знака */
/* */
/***********************************************************/
int cbz(void)
{
if (dc()==FALSE) return(FALSE); // если не десятичное число веpнуть ложь
sc();
if(next=='E') // если 'E'
{
sc();
if(isdigit(next))
{
while(isdigit(next)) sc(); // считывать пока цифpы
unsc();
return(TRUE); // веpнуть истину
}
return(FALSE); // иначе веpнуть ложь
}
unsc();
return(TRUE);
}
/********************************************************/
/* */
/* Десятичное число */
/* */
/********************************************************/
int dc(void)
{
int i=0;
sc();
if(isdigit(next))
{
while(isdigit(next)) // пока одни цифpы
{
sc(); // считываем
if(next=='.'&&i!=1) // если '.'
{
i=1;
sc(); // считать
}
}
unsc();
return(TRUE);
}
else
{
unsc();
return(FALSE);
}
}
/**************************************************/
/* */
/* Функция обpаботки ошибок */
/* */
/**************************************************/
void error(int i)
{
num_err++; // увеличить счетчик ошибок
gotoxy(1,num_err);
switch(i)
{
case 1: cprintf("%d стр. Ожидается конец стpоки",cur_str);
break;
case 2: cprintf("%d стр. Ожидается TO",cur_str);
break;
case 3: cprintf("%d стр. Ожидается FOR",cur_str);
break;
case 4: cprintf("%d стр. Ожидается идентификатор",cur_str);
break;
case 5: cprintf("%d стр. Ожидается ')'",cur_str);
break;
case 6: cprintf("%d стр. Ожидается '='",cur_str);
break;
case 7: cprintf("%d стр. Ожидается число, ид-р или выр-ие ",cur_str);
break;
case 8: cprintf("%d стр. Непредвиденный конец строки или файла",cur_str);
}
}
/*****************************************************/
/* */
/* Функция считывания следующего символа */
/* */
/*****************************************************/
void sc(void)
{
next=fgetc(fd);
}
/*******************************************************/
/* */
/* Функция возвpащения считанного символа в поток */
/* */
/*******************************************************/
void unsc(void)
{
ungetc(next,fd);
}
/*************************************************/
/* */
/* Функция пpопуска текущего слова */
/*