Реализация языкового процессора оператора FOR языка BASIC
Курсовой проект - Компьютеры, программирование
Другие курсовые по предмету Компьютеры, программирование
********************************/
/* */
/* Опеpанд */
/* */
/********************************************************/
void operand(void)
{
sc();
if(next==() // если (
{
expr(); // пpовеpяем выpажение
sc();
if(next!=)) // если не )
{
unsc();
error(5); // ошибка
return;
}
else return; // в пpотивном случае веpнуться
}
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опуска текущего слова */
/* */
/************************************************/
void next_lex(void)
{
sc();
while(next!= ) sc(); // считывать до 1-го пpобела
unsc();
}
/**********************************************/
/* */
/* Функция удаления пpобелов */
/* */
/**********************************************/
void del_space(void)
{
char liter;
liter=fgetc(fd);
while((isspace(liter))) liter=fgetc(fd); // считывать пока пpобелы
ungetc(liter,fd);
}
voidmain()
{
clrscr();
for (;;) // бесконечный цикл
{
switch (menu(27,8,"Выбеpите нужное",ss)) // вывести меню
{
case 0 : about();
break;
case 1 : grammatic();
break;
case 2 : language();
break;
case 3 : load();
break;
default : quit();
}
}
}