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

1 ... 129 130 131 [ 132 ] 133 134 135 ... 156


break;

case WHILE: обрабатывает цикл while exec while(); break;

case DO: обрабатывает цикл do-while

exec do(); break;

case FOR: обрабатьшает цикл for exec for(); break;

case BREAK: обрабатывает break breakfound = true;

Восстанавливает вложенную область видимости. local var stack.resize(nest scope stack.top()); nest scope stack.pop(); return;

case SWITCH: обрабатывает оператор switch exec switch(); break;

case COUT: обрабатывает консольный вывод exec cout(); break;

case CIN: обрабатывает консольный ввод

exec cin();

break; case END:

exit(O);

} while (tok != END && block); return;

Возвращает точку входа заданной функции. Возвращает NULL, если не найдена, chcur *f ind fvinc(char *name) {

Linsigned i;

for(i=0; i < func table.size(); i++)



if (! strcitp (name, fvinc table [ i]. func name)) return fvinc table[i] .loc; return NULL;

Объявление глобальной переменной,

void decllobal ()

token ireps vartype; var type vt;

get token(); получает тип

vartype = tok; сохраняет тип переменной

Обрабатывает список, разделенный запятыми, do {

vt.v type = vartype;

vt.value =0; инициализирует с нулевым значением get token(); получает имя

Проверяет, не дублируется ли переменная, for(unsigned i=0; i < global vars.size(); i++) if (!strcitp(global vars[i] .var name. token)) throw InterpExc (DUP VAR);

s trcpy(vt.var name, token); global vars.push back(vt);

get token(); } while(*token == );

if(*token != ;) throw InterpExc(SEMI EXPECTED);

Объявление локальной переменной.

void decl local ()

var type vt;



404 Глава 9

get token{); получает тип переменной vt.v type = tok; запоминает тип

vt.value =0; инициализирует переменную с нулевым значением

Обрабатывает список, разделенный запятыми, do t

get token(); get var name

Проверяет, нет ли уже в этой области видимости переменной с тем же именем, что и у локальной переменной, if(!local var stack.enpty()) for(int i=local var stack.size()-1; i >= nest scope stack.top(); i-)

if(!strcnp (local var stackti].var name, token)) throw InterpExc(DUP VAR);

s trcpy(vt.var name, token); local var s tack pushJack (vt); get token(); } while(*token == , );

if(*token != ; ) throw InterpExc(SEMI EXPECTED);

Вызывает функцию.

void callO

char *loc, *tenp; int Ivartenp;

Сначала находит точку входа функции, loc = find fvinc (token);

if(loc == NULL)

throw InterpExc(FUNCJUNDEF); функция не определена



1 ... 129 130 131 [ 132 ] 133 134 135 ... 156

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