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

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


if (!scrcnp(global vars [i] .var naine, vname)) { if(global vars[i].v type == CHAR)

global vars[i].value = (char) value; else if(global vars[i].v type == INT)

global vars[i].value = value; retiim;

throw InterpExc(NOT VAR); переменная не найдена

Находит значение переменной.

int finci var(char * vname)

Сначала проверяет, не локальная ли переменная, if(!local var stack.empty())

for(int i=local var s tack.s ize()-1; i >= £imc call stack.top(); i-)

i f (! s trcmp (local var s tack [ i ]. var name, vname)) retiim local var stack[i] .value;

В противном случае проверяет глобальные переменные. for(imsigned i=0; i < global vars.size(); i++)

if (! strcmp(global vars [i]. var name, vname))

retiim global vars [ i ] . value;

throw InterpExc(NOT VAR); переменная не найдена

Выполняет оператор if.

void exec ifО

int cond;

eval exp(cond); получает вьражение оператора if.

if(cond) ( если true, обрабатывает блок в составе IF



eval exp(sval); Получает вьражение switch.

Проверяет начало блока. if(*token != {)

Подтверждает начало блока. if(*token != {)

throw InterpExc(BRACE EXPECTED);

interpO ;

else {

В противном случае пропускает блок IF и обрабатывает ELSE, если он есть.

finci eob(); находит начало следующей строки get token() ;

if(tok != ELSE) (

Возвращает лексему, если нет ELSE. putbackO ; retum;

Подтверждает начало блока. get token(); if(*token !={)

throw InterpExc(BRACE EXPECTED); putbackO ;

interpO ;

Выполняет оператор switch.

void exec switch()

int sval, cval; int brace;



throw InterpExc(BRACE EXPECTED);

Записывает новую область видимости. nest scope stack.push(local var stack.size());

Теперь проверяет варианты case. for(;;) { brace = 1;

Находит вариант case, do {

get token() ;

if(*token == {) brace++; else if(*token == }) brace--; } while(tok != CASE && tok != END && brace);

Если соответствующего варианта case не найдено, то пропускает, i f(!brace) break;

if (tok == END) throw InterpExc (SYNTAX) ;

Получает значение варианта case. eval e (cval);

Читает и отбрасывает get token();

if(*token != :)

throw InterpExc(COLON EXPECTED);

Если значения совпадают, то интерпретирует, if(cval == sval) {

brace = 1;

do {

interpO ;

if(*token == {) brace++; else if(*token == }) brace--; } while(!breakfound && tok != END && brace);



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

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