|
Программирование >> Формирование пользовательского контейнера
void eval eзф4(int &value) { char op; char temp; op = \0*; if(*token == + II *token == - II *token == INC II *token == DEC) temp = *token; op = *token; get token(); if(temp == INC) assign vcir (token, f ind var (token) +1); if(temp == DEC) assign var(token, find var(token)-1); eval eзф5 (value) ; if(op == -) value = -(value); Обрабатывает вьгражение со скобками. void eval eзф5 (int &value) if((*token == ()) { get token(); eval eзфO (value); получает подвьгражение if(*token != )*) throw InterpExc(PAREN EXPECTED); get token(); else atom(value); Находит значение числа, переменной или функции. void atom(int &value) { int i; char temp[MAX ID LEN+ll; switch(token type) { case IDENTIFIER: i = intemal func(token) ; if(i != -1) { Вызывает функцию стандартной библиотеки ( standard library ). value = (* intem f unc [ i ]. p) (); } else if(find func(token)) { Вызывает функцию, созданную программистом. call(); value = ret value; else { value = find var(token); получает значение переменной strcpy(temp, token); сохраняет имя переменной Проверяет операции ++ или -. get token(); if(*token == INC II *token == DEC) { if(*token == INC) assign vcar(temp, find var(temp)+1); else assign var(temp, find var(temp)-1); } else putbackO; get token(); return; case NUMBER: числовая константа value = atoi(token); get token(); return; case DELIMITER: проверяет, не символьная ли константа 374 Гяаеа£ if(*token == \ ) { value = *prog; prog++; if (*prog! = \ ) throw InterpExc(QUOTE EXPECTED); prog++; get token(); return ; if (*token==) ) return; обрабатьшает пустое вьцэажение else throw InterpExc(SYNTAX); иначе синтаксическая ошибка default: throw InterpExc(SYNTAX); синтаксическая ошибка Отображает сообщение об ошибке, void sntx err (error insg error) { char *p, *tenp; int linecount = 0; static char *e[]= { Syntcix error , No eзфression present , Not a variable , Duplicate variable name , Duplicate function name , Semicolon expected , Unbalanced braces , Function undefined , Type specifier expected , Return without call , Parentheses expected , While expected , Closing quote expected , Division by zero , { eзфected (control statements must use blocks) .
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |