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

1 ... 134 135 136 [ 137 ] 138 139 140 ... 156


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;



1 ... 134 135 136 [ 137 ] 138 139 140 ... 156

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