|
Программирование >> Формирование пользовательского контейнера
prog++; переходит за ; в исходном коде temp2 = prog; Ищет начало блока for. paren = 1; while(paren) { get token(); if(*token == () paren++; if(*token == ) ) paren-; Подтверждает начгшо блока. get token(); if(*token !={) throw InterpExc(BRACE EXPECTED); putbackO ; Если условие true, интерпретирует if(cond) interpO ; else { в противном случае переходит к концу блока find eob(); return; prog = tenp2; переходит к инкрементному выражению Шет оператор break в цикле, if(breakfound) { Ищет начало блока в цикле. do { get token(); ) while(*token != { && tok != END); putbackO ; breakfound = false; find eob(); теперь ищет конец цикла return; Вычисляет инкрементное выражение. eval exp(cond); prog = tenp; возвращается к началу цикла Функция начинается с вычисления инициализирующего выражения в цикле for. Инициализирующая часть выполняется один раз и не входит в состав тела цикла. Далее указатель программы продвигается к позиции, следующей за точкой с запятой, завершающей инициализирующую часть цикла for и адрес этой позиции присваивается переменной temp. Это местоположение начала условного выражения. Далее выполняется вход в бесконечный цикл, который проверяет условное выражение цикла for и присваивает переменной temp2 адрес начала инкрементного выражения. Затем определяется начало кода цикла. Наконец, если условное выражение равно true, интерпретируется блок цикла. В противном случае находится конец блока цикла и продолжается выполнение части программы, следующей за циклом for. Предположим, что цикл выполняется, тогда после заверщения вызова функции interpO вычисляется инкрементное выражение и процесс повторяется. Конечно, процесс будет остановлен, если внутри блока цикла встретится оператор break. Обработка операторов cin и cout Поскольку ввод/вывод с помошью операторов cin и cout - фундаментальная составляющая языка С++, представляется естественной их поддержка в интерпретаторе Mini С++. Однако Mini С++ не обрабатывает ввод/вывод с помощью операторов cin и cout так, как это делает коммерческий компилятор. Как вы знаете, cin и cout - предопределенные идентификаторы, соответствующие потокам, связанным со стандартными вводом и выводом. Они используются для ввода информации с консоли и вывода ее на консоль с помощью операторов ввода/вывода и . Соответственно операторы и переопределены для ввода/вывода. Но в интерпретаторе Mini С++ не поддерживается перегрузка операторов. Для сохранения максимально возможной простоты интерпретатора в нем даже не поддерживаются операторы сдвига и (но функция get token узнает их)! Несмотря на эти ограничения интерпретировать операторы cin и cout все же довольно легко. Консольный вывод с помощью оператора cout обрабатывается функций exec cout, приведенной далее. Выполняет оператор cout. void exec cout() int val; get tolcen(); if(*token != LS) throw InterpExc(SYNTAX); do { get token(); if(token type==STRING) { Выводит строку, cout token; else if(tokentype == NUMBER tokentype == IDENTIFIER) { Выводит число. putbackO; eval eзф(val); cout val; else if(*token == \ ) { выводит символьную константу. putbackO ; eval eзф(val); cout (char) val; get token(); ) while(*token == LS); if(*token != ;) throw InterpExc(SEMI EXPECTED); Когда в коде обнаружен идентификатор cout, читается следующая лексема. Если она не , то выводится сообщение о синтаксической ошибке. В противном случае выполняется цикл, который получает и затем выводит строку или значение выражения, расположенные справа от комбинации символов . Этот процесс продолжается до тех пор, пока не будет достигнут коней оператора cout.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |