С для профессиональных программистов


         

Уровень вложенности цикла FOR слишком


return 0;

return variables[toupper(*token)-'^'];

/* выдать сообщение об ошибке */

void serror(error)

int error;

static char *e[]=

"Синтаксическая ошибка",

"Непарные круглые скобки",

"Это не выражениеt",

"Предполагается символ равенства",

"Не переменная",

"Таблица меток переполнена",

"Дублирование меток",

"Неопределенная метка",

"Необходим оператор THEN",

"Необходим оператор TO",

" Уровень вложенности цикла FOR слишком велик",

"NEXT не соответствует FOR",

"Уровень вложенности GOSUB слишком велик",

"RETURN не соответствует GOSUB"

;

printf("&4%s\n",e[error]);

longjmp(e_buf, 1); /* возврат в точку сохранения */

/* Чтение лексемы. */

get_token()

register char *temp;

token_type=0; tok=0;

temp=token;

if(*prog=='\0')  /* Конец файла */

*token=0;

tok = FINISHED;

return(token_type=DELIMITER);

while(iswhite(*prog)) ++prog; /* пропуск пробелов */

if(*prog=='\r')  /* коней строки программы */

++prog; ++prog;

tok = EOL; *token='\r';

token[1]='\n'; token[2]=0;

return (token_type = DELIMITER);

if(strchr("+-^/%=;(),><", *prog)) /* разделитель */

*temp=*prog;

prog++; /* переход на следующую позицию */

temp++;

*temp=0;

return (token_type=DELIMITER);

if(*prog=='"')  /* строка кавычек */

prog++;

while(*prog != '"' && *prog!='\r') *temp++=*prog++;

if(*prog=='\r') serror(1);

prog++;*temp=0;

return(token_type=QUOTE);

if(isdigit(*prog))  /* число */

while(!isdelim(*prog)) *temp++=*prog++;

*temp = '\0';

return(token_type = NUMBER);

if(isalpha(*prog))  /* переменная или команда */

while(!isdelim(*prog)) *temp++=*prog++;

token_type=STRING;

*temp = '\0';

/* просматривается, если строка - переменная или команда */

if (token_type==STRING)

tok=look_up(token); /* Преобразование во внутренний формат */


Содержание  Назад  Вперед