Главная arrow Программирование С++ arrow Библиотечные функции Mini С++

Библиотечные функции 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.