|
Программирование >> Формирование пользовательского контейнера
II Находит конец оператора switch, while(brace) { get token(); if(*token == {) brace++; else if(*token == }) brace-; breakfound = false; break; Выполняет цикл while. void exec while() int cond; char *tenp; putbackO; возвращает во входной поток лексему while temp = prog; сохраняет адрес начала цикла while get token(); eval exp(cond); проверяет условное выражение Подтверждает начало блока. if(*token != {) throw InterpExc(BRACE EXPECTED); if(cond) interpO; если true, интерпретирует else { в противном случае переходит к концу цикла findeobO; rettim; prog = tenp; возвращается к началу Ищет оператор break в цикле. if (breakfoimd) { Ищет начало блока в цикле, do { get token() ; } while(*token != { && tok != END); putbackO; breakfoimd = false; find eob(); теперь ищет конец цикла return; < Выполняет цикл do. void exec do() int cond; char *tenp; Сохраняет местоположение начала цикла do. putbackO; возвращает во входной поток лексему do tenp = prog; get tokenO; получает начало блока цикла Подтверждает начало блока. get token(); if(*token != {) throw InterpExc(BRACE EXPECTED); putbackO; interpO; интерпретирует цикл Ищет оператор break в цикле, if(breakfound) { prog = tenp; Находит начало блока в цикле, do { get token(); } while(*token != { && tok != END); Находит конец блока while. , putbackO; findeobO; Теперь находит конец выражения while, do { get token(); } while(*token != ; && tok != END); if (tok == END) throw InterpExc (SYNTAX) ; breakfoimd = false; return; get token(); if(tok != WHILE) throw InterpExc(WHILE EXPECTED); eval exp(cond); проверяет условие цикла Если true, повторяет цикл; в противном случае идет дальше, if(cond) prog = tenp; Выполняет цикл for. void exec for() int cond; char *tenp, *tenp2; int paren ; get token(); пропускает открываоцую скобку ( eval exp(cond); вьражение инициализации if(*token != ;) throw InterpExc(SEMI EXPECTED); prog++; переходит за ; в исходном коде tenp = prog;
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |