Программирование >>  Формирование пользовательского контейнера 

1 ... 132 133 134 [ 135 ] 136 137 138 ... 156


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;



1 ... 132 133 134 [ 135 ] 136 137 138 ... 156

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика