Главная arrow Программирование С++ arrow Выполнение цикла while

Выполнение цикла while

Цикл while интерпретировать совсем легко. Эту задачу выполняет функция
exec_while (), код которой приведен далее.
// Выполняет цикл while.
void exec_while()
{
int cond; char *temp;
putbackO; // возвращает во входной поток лексему while temp = prog; // сохраняет начало цикла while
get_token();
eval_exp(cond); // проверяет условное выражение
// Подтверждает начало блока. if(*token != '{')
throw InterpExc(BRACE_EXPECTED);
if(cond)
interpO; // если true, интерпретирует else { // в противном случае переходит к концу цикла find_eob(); return;
}
prog = temp; // возвращается к началу
// Ищет оператор break в цикле, if(breakfound) {
// Ищет начало блока в цикле.
do {
get_token ();
} while(*token != '{' && tok != END);
putback(); breakfound = false;
find_eob(); // теперь ищет конец цикла return;
}
}
Функция exec_while() выполняется следующим образом. Сначала лексема while возвращается во входной поток, и местоположение в программе цикла while сохраняется в указателе temp. Этот адрес позволяет интерпретатору возвращаться к началу цикла при его повторении. Далее повторно читается лексема while для удаления ее из входного потока, и вызывается функция evai_expo, которая вычисляет значение условного выражения цикла while. Если оно истинно, вызывается функция interp о для интерпретации кода блока while. Когда функция interp о возвращается в вызывающую процедуру, в указатель программы prog загружается адрес начала цикла while, что приводит к возобновлению выполнения программы с точки начала цикла, когда управление вновь передается функции interp (). В результате выполняется следующая итерация цикла. Однако если функция interp () возвращается, потому что внутри цикла встретился оператор break, итерация прерывается, определяется конец блока while и завершается функция exec_whiie(). Если условное выражение цикла равно false, то находится конец блока while, и функция заканчивает работу.