Библиотечные функции Mini С++ |
Поскольку программы, выполняемые интерпретатором Mini С++, никогда не компилируются и не компонуются, любые библиотечные процедуры, которые они используют, должны обрабатываться непосредственно интерпретатором. Лучший способ — создать для этого интерфейсную функцию, которую вызывает интерпретатор Mini С++, когда в коде встретилась библиотечная функция. Эта интерфейсная функция выполняет вызов действительной библиотечной функции и обрабатывает любые возвращаемые функцией значения. Из-за ограничений, накладываемых на объем кода, интерпретатор Mini С++ поддерживает только четыре библиотечные функции: getchar (), putchar (), abs о и rando. Эти функции преобразуются в вызовы реальных библиотечных функций с тем же именем. Библиотечные подпрограммы интерпретатора Mini С++ находятся в файле libcpp.cpp, приведенном в листинге 9.3. J Листинг 9.3. Внутренние библиотечные функции // Добавьте сюда и ваши собственные функции. #include <iostream> #include <cstdlib> #include <cstdio> #include "mccornmon.h" using namespace std; // Читает символ с консоли. // Если ваш компилятор снабжен функцией небуферизованного // символьного ввода, просто // замените ее вызовом функции cin.getO . int call_jgetchar () { char ch; ch = getchar(); // Продвигается за () get_token(); if(*token != '(') throw InterpExc(PAREN_EXPECTED); get_token(); if(*token != ')') throw InterpExc (PARENLEXPECTED) ; return ch; } // Выводит символ на дисплей. int call_putchar() { int value; eval_exp(value); putchar(value); return value; ) // Возвращает абсолютное значение (модуль). int call_abs() { int val; eval_exp(val); val = abs(val); return val; ) // Возвращает случайное целое. int call_rand() { // Продвигается за () get_token () ; if(*token != ¦ (') throw InterpExc(PAREN_EXPECTED); get_token (),if(*token != •)') throw InterpExc(PAREN_EXPECTED); return rand(); > Для вставки других библиотечных функций по вашему выбору сначала введите имена и адреса их интерфейсных функций в массив intern_func (который объявлен в файле parser.cpp). Далее по аналогии с только что приведенными функциями создайте подходящие интерфейсные функции. И, наконец, добавьте их прототипы в файл mccommon.h.
|