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

1 ... 144 145 146 [ 147 ] 148 149 150 ... 156


Оператор cin обрабатывается функцией exec cin (), приведенной далее.

Выполняет оператор cin.

void exec cin()

int val; char chval;

token ireps vtype;

get token();

if(*token != RS) throw InterpExc(SYNTAX);

do {

get token();

if(token type != IDENTIFIER) throw InterpExc(NOT VAR);

vtype = find var type(token);

if(vtype == CHAR) { cin chval; ass ign var(token, chval);

else if(vtype == INT) { cin val;

assign var(token, val);

get token(); } while(*token == RS);

if(*token != ;) throw InterpExc(SEMI EXPECTED);

Когда обнаружен идентификатор cin, читается следующая лексема. Если она не , то выводится сообщение о синтаксической ощибке. В противном случае выполняется цикл, который получает имя переменной для вводимого значения, читает с консоли это значение и запоминает его в переменной. Обратите внимание на то, что определяется тип переменной: считывается целое число или символьные данные. Этот процесс продолжается до тех пор, пока не обнаружен конец оператора cin.



Листинг 9.3. Внутренние библиотечные функции

Добавьте сюда и ваши собственные функции. #include <iostreain> #include <cstdlib> #include <cstdio> #include mccommon.h

using namespace std;

Читает символ с консоли.

Если ваш компилятор снабжен функцией небуферизованного

символьного ввода, просто

замените ее вызовом функции cin.getO .

int call jgetchar ()

char ch;

ch = getchar0;

Продвигается за ()

get token();

if(*token !=()

throw InterpExc(PAREN EXPECTED);

get token();

Библиотечные функции Mini С++

Поскольку программы, выполняемые интерпретатором Mini С++, никогда не компилируются и не компонуются, любые библиотечные процедуры, которые они используют, должны обрабатываться непосредственно интерпретатором. Лучший способ - создать для этого интерфейсную функцию, которую вызывает интерпретатор Mini С++, когда в коде встретилась библиотечная функция. Эта интерфейсная функция выполняет вызов действительной библиотечной функции и обрабатывает любые возвращаемые функцией значения. Из-за Офаничений, накладываемых на объем кода, интерпретатор Mini С++ поддерживает только четыре библиотечные функции: getchar (), putchar (), abs о и randO. Эти функции преобразуются в вызовы реальных библиотечных функций с тем же именем. Библиотечные подпрофаммы интерпретатора Mini С++ находятся в файле libcpp.cpp, приведенном в листинге 9.3.



if{*token != ))

throw InterpExc(PAREN EXPECTED);

return ch;

Выводит символ на дисплей.

int call putchar()

int value; eval e3(p(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();



1 ... 144 145 146 [ 147 ] 148 149 150 ... 156

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