|
Программирование >> Формирование пользовательского контейнера
if(tok==END) throw InterpExc(UNBAL BRACES); Определяет, является ли идентификатор переменной. Возвращает true, если найдена переменная; false - в противном случае, bool is var(char * vname) { Проверяет, является ли vname локальной переменной, if(!local var stack.empty()) for(int i=local var stack.size()-1; i >= func call stack.top(); i~) if(!strcnp(local var stack[i].var name, vname)) return true; Проверяет, является ли vname глобальной переменной, fordmsigned i=0; i < global vars.size(); i++) if (!strcitp(global vars [i] .var name, vname)) return true; Находит конец блока. void findeobO int brace; get token(); if(*token != {) throw InterpExc(BRACE EXPECTED); brace = 1; do { get token(); if(*token == {) brace++; else if(*token == }) brace--; } while(brace && tok != END); return UNDEFTOK; Функция mainO Функция main о начинзет интерпретацию программы, заданной в командной строке. Далее приведен код функции, int main (int argc, char *arsrv[]) { if(argc != 2) { cout Usage: minicpp <filename>\n ; return 1; Вьщеляет память для программы. try { p buf = new char[PROG SIZE]; } catch (badalloc exc) { cout Could Not Allocate Program Buffer\n ; return 1; Загружает программу для выполнения. if(!load program(p buf, argv[1])) return 1; Устанавливает указатель программы на начало программногр буфера, prog = p buf; return false; Возвращает тип переменной. token ireps fin<l var type(char *vname) { Сначала проверяет, не локальная ли это переменная, if(!local var stack.empty()) for(int i=local var stack.size()-1; i >= func call stack.top(); i-) if(!strcmp(local var stack[i].var name, vname)) return local var stack[i].v type; В противном случае, не глсЛальная ли. for(unsigned i=0; i < global vars.size(); i++) if(!strcmp(global vars[i].var name, vname)) return local var stack[i].v type; try { Находит местоположение всех функций и глобальных переменных в программе, prescan(); Затем подготавливает вызов функции mainO. Находит начсшьную точку программы. prog = find func( main ); Проверяет на некорректность или отсутствие функцию mainO. if(!prog) { cout mainо Not FoundNn ; return 1; Возвращается к открывающей скобке (. prog-; Устанавливает значение первой лексемы, равное main, strcpy{token, main ); Вызывает main(), чтобы начать интерпретацию, call(); catch(InterpExc exc) { sntx err(exc.get err()); return 1; catch(badalloc exc) { cout Out Of Memory\n ; return 1; return ret value;
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.002
При копировании материалов приветствуются ссылки. |