|
Программирование >> Формирование пользовательского контейнера
char func jiaine[MA3eiD LEN+l]; имя token ireps ret type; тип возвращаемого значения char *1ос; положение точки входа в программе Этот вектор содержит информацию о функциях. vector<func type> func table; Стек для управления областью видимости функции. stack<int> func call stack; Стек для управления вложенными областями. stack<int> nest scope stack; char token[MAX T LEN+1]; текущая лексема tok types tokentype; тип лексемы tokenireps tok; внутреннее представление int ret value; значение, возвращаемое функцией bool breakfound = false; true, если обнаружен оператор break int n in(int argc, char *argv[]) { if(argc != 2) cout Usage: minicpp <filename>\n ; return 1; Выделяет память для программы, try { p buf = new char[PROG SIZE]; } atch (bad alloc exc) { cout Could Not Allocate Program Buffer\n ; return 1; Загружает программу для выполнения. i f (! loadrogram (p buf, argv [ 1 ])) return 1; Устанавливает указатель программы на начало программного буфера, prog = p buf; try { Находит местоположение всех функций и глобальных переменных в программе. prescanO ; Затем подготавливает вызов функции mainO . Находит начальную точку программы, prog = fincLfuncCnvain ) ; Проверяет некорректность функции mainO или ее отсутствие, if(!prog) { cout main О Not FoundNn ; return 1; Возвращается к открывающей скобке {. prog--; Устанавливает значение первой лексемы, равное main, strcpy(token, main ); Вызывает main(), чтобы начать интерпретащпд. callO; catch(InterpExc exc) { snt3err (exc. get err ()); return 1; catch(badLalloc exc) { cout Out Of Memory\n ; return 1; return ret value; Загружает программу. bool load program(char *р, char * fname) int i=0; ifstream in(fname, ios::in ios::binary); if(!in) { cout Cannot Open file.Xn ; return false; do { *p = in.get 0; P++; i++; } whiledin.eof 0 && i < EROGSIZE); if(i == PROGLSIZE) { cout Program Too Big\n ; return false; Завершает нулем код программы. Пропускает любую метку EOF, присутствующую в файле. if(*(p-2) == Oxla) *(р-2) = \0; else *(р-1) = \0; in.closeO ; return true; Находит местоположение всех функций в программе и запоминает глобальные переменкые. void prescanO { char *р, *tp; char temp[MAX ID LEN+l]; token ireps datatype;
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |