Функция main о начинает интерпретацию программы, заданной в командной строке. Далее приведен код функции, int main(int argc, char *argv[]) { if(argc != 2) { cout « "Usage: minicpp <filename>\n" ; return 1; } // Выделяет память для программы, try { p_buf = new char[PROG_SIZE]; } catch (bad_alloc exc) { cout « "Could Not Allocate Program Buffer\n"; return 1; } // Загружает программу для выполнения. if(!load_program(p_buf, argv[1])) return 1; // Устанавливает указатель программы на начало программного, буфера, prog = p_buf; } try { // Находит местоположение всех функций //и глобальных переменных в программе, prescan(); // Затем подготавливает вызов функции main(). // Находит начальную точку программы, prog = find_func("main"); // Проверяет на некорректность или отсутствие функцию main(). 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(bad_alloc exc) { cout « "Cut Of Memory\n"; return 1; } return ret_value; > функция main о начинается с выделения памяти для программы, которая будет интерпретироваться. Обратите внимание, максимальный размер интерпретируемой программы задается константой PROG_SIZE. ЭТО значение, равное 10 ООО, задается произвольно, и вы можете увеличить его, если захотите. Далее программа загружается с помощью функции load_program(). После загрузки программы функция main () выполняет три основных действия. 1. Вызывает функцию prescano для предварительного просмотра программы интерпретатором. 2. Подготавливает интерпретатор для вызова функции main о программы, определяя ее местоположение в исходном коде. 3. Выполняет функцию callo, которая начинает выполнение программы со стартовой точки функции main о. Функция main () также обрабатывает все исключения типа InterpExc, генерируемые интерпретатором Mini С++, включая исключительные ситуации, созданные синтаксическим анализатором выражений. В следующих разделах подробно рассматриваются ключевые компоненты интерпретатора.
|