|
Программирование >> Формирование пользовательского контейнера
break; case WHILE: обрабатывает цикл while exec while(); break; case DO: обрабатывает цикл do-while exec do(); break; case FOR: обрабатьшает цикл for exec for(); break; case BREAK: обрабатывает break breakfound = true; Восстанавливает вложенную область видимости. local var stack.resize(nest scope stack.top()); nest scope stack.pop(); return; case SWITCH: обрабатывает оператор switch exec switch(); break; case COUT: обрабатывает консольный вывод exec cout(); break; case CIN: обрабатывает консольный ввод exec cin(); break; case END: exit(O); } while (tok != END && block); return; Возвращает точку входа заданной функции. Возвращает NULL, если не найдена, chcur *f ind fvinc(char *name) { Linsigned i; for(i=0; i < func table.size(); i++) if (! strcitp (name, fvinc table [ i]. func name)) return fvinc table[i] .loc; return NULL; Объявление глобальной переменной, void decllobal () token ireps vartype; var type vt; get token(); получает тип vartype = tok; сохраняет тип переменной Обрабатывает список, разделенный запятыми, do { vt.v type = vartype; vt.value =0; инициализирует с нулевым значением get token(); получает имя Проверяет, не дублируется ли переменная, for(unsigned i=0; i < global vars.size(); i++) if (!strcitp(global vars[i] .var name. token)) throw InterpExc (DUP VAR); s trcpy(vt.var name, token); global vars.push back(vt); get token(); } while(*token == ); if(*token != ;) throw InterpExc(SEMI EXPECTED); Объявление локальной переменной. void decl local () var type vt; 404 Глава 9 get token{); получает тип переменной vt.v type = tok; запоминает тип vt.value =0; инициализирует переменную с нулевым значением Обрабатывает список, разделенный запятыми, do t get token(); get var name Проверяет, нет ли уже в этой области видимости переменной с тем же именем, что и у локальной переменной, if(!local var stack.enpty()) for(int i=local var stack.size()-1; i >= nest scope stack.top(); i-) if(!strcnp (local var stackti].var name, token)) throw InterpExc(DUP VAR); s trcpy(vt.var name, token); local var s tack pushJack (vt); get token(); } while(*token == , ); if(*token != ; ) throw InterpExc(SEMI EXPECTED); Вызывает функцию. void callO char *loc, *tenp; int Ivartenp; Сначала находит точку входа функции, loc = find fvinc (token); if(loc == NULL) throw InterpExc(FUNCJUNDEF); функция не определена
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |