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

1 ... 127 128 129 [ 130 ] 131 132 133 ... 156


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;



1 ... 127 128 129 [ 130 ] 131 132 133 ... 156

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