Реализация языкового процессора оператора 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();

}

}

}