|
Программирование >> Формирование пользовательского контейнера
for(;;) { Получает значение условного вь53с1жения. eval exp(cond) ; if(*token != ; ) throw InterpExc(SEMI EXPECTED); prog++; переходит за в исходном коде tenp2 = prog; Ищет начало блока for. paren = 1; while(paren) { get token(); if(*token == () paren++; if(*token == )) paren--; Подтверлщает начало блока. get token (); if(*token != {) throw InterpExc (BRACE EXPECTED); putbackO ; Если условие true, интерпретирует, if(cond) interpO ; else { в противном случае переходит к концу блока findeobO; return; prog = tenp2; переходит к инкрементному выражению Ищет оператор break в цикле, if(breakfound) { Ищет начало блока в цикле. do { get token(); } while(*token != { && tok != END); * putbackO; breakfoimd = false; find eobO; теперь ищет конец цикла return; Вычисляет инкрементное выражение. eval exp(cond); prog = tenp; возвращается к началу цикла Выполняет оператор cout. void exec cout() int val; get token(); if(*token != LS) throw InterpExc(SYNTAX); do { get token(); if(token type==STRING) { Выводит строку, cout token; else if(tokentype == NUMBER tokentype == IDENTIFIER) { Выводит число. putbackO; eval exp(val); cout val; else if(*token == -N ) { выводит символьную константу. putbackO ; eval exp(val); Вьшолняет оператор cin. void exec cin() int val; char chval; tokenireps vtype; get token(); if(*token != RS) throw InterpExc(SYNTAX); do { get token(); if(token type != IDENTIFIER) throw InterpExc(NOT VAR); vtype = find var type(token); if(vtype == CHAR) { cin chval; assign var(token, chval); else if(vtype == INT) { cin val; assign var(token, val); get token(); } while(*token == RS); if (*token != ; ) throw InterpExc(SEMI EXPECTED) ; cout (char) val; get token(); } while(*token == LS); if(*token != ;) throw InterpExc(SEMI EXPECTED);
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.007
При копировании материалов приветствуются ссылки. |