|
Программирование >> Формирование пользовательского контейнера
Оператор 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();
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |