Главная » Просмотр файлов » Т. Пратт, М. Зелковиц - Языки программирования - разработка и реализация (4-е издание_ 2002)

Т. Пратт, М. Зелковиц - Языки программирования - разработка и реализация (4-е издание_ 2002) (1160801), страница 120

Файл №1160801 Т. Пратт, М. Зелковиц - Языки программирования - разработка и реализация (4-е издание_ 2002) (Т. Пратт, М. Зелковиц - Языки программирования - разработка и реализация (4-е издание_ 2002)) 120 страницаТ. Пратт, М. Зелковиц - Языки программирования - разработка и реализация (4-е издание_ 2002) (1160801) страница 1202019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 120)

Гниет!ои й(йд то!едет) зитедег); чвг х.то!едет; Ьедти х :- 4. ыг!Ве("!и О. Ьетоге са11 о( й. 1=",з,"Х=".х); := й(т ); ыг!Хе("!и О. ат(ег са11 о( й. 1=",т,"Х=",х) еиф ргоселоге Р; чвг т (игедвг; Гниет!ои Ги(Х ~итедег):зи(едег; 1 в ги, Ьед1и; 1 1 н Х здесь х;= хй; являются ги =м: 1 свободнынн ыг(те("!и Р, 1-".т,"К=",Х,"Хчи х) 1 иерененнынн еиой Ьед! и := 2, О(х,ти): ыгтте("!и Р. 1-",т."Х=.",х) еие.

Ьеой и х =7: Р; ыгтте("1и Нато, Х=-".х) еио. Для правильной реализации этого правила, определяющего значения нело- кальных ссылок в подпрограммах, передаваемых в качестве параметров, должна существовать возможность воссоздания среды нелокальных ссылок в точке вы- зова такой подпрограммы через параметр, чтобы при ее выполнении использова- лась правильная среда ссылок, Это достаточно просто сделать в случае реали- зации разрешения нелокальной ссылки с помощью метода статической цепи 434 Глава 9. Управление подпрограммами (см. раздел 9.4.2).

Необходимо лишь определить правильный указатель иа параметр-подпрограмму в статической цепи и передать его в составе информации, передаваемой вместе с параметром-подпрограммой. Тогда параметр-подпрограмма превращается в пару указателей (СР, 5СР), где СР— указатель иа сегмент кода подпрограммы, а 5СР— указатель в статической цепи, который используется, когда вызывается подпрограмма.

Эта пара может передаваться через миогочислеииые уровни вызовов подпрограмм, пока ие настанет момент вызова подпрограммы. В этой точке создается запись активации, устанавливается переданный 5СР и начинается выполнение сегмента кода подпрограммы, как при любом другом вызове. МА(И Х МА1М Х МА! И Х МА(И Х Р ОСР ЯСР Р ОСР ЯСР 1 Р ОСР ЯСР 1 С)ОСР ЯСР 1 й СР ЯСР Х ООСР ЯСР йСР ЯСР Х ГИ ОСР ЯСР ГМ К СЕР ! лавная программа (Ма!и) перед вызовом Р СЕР Р перед вызовом О СЕР О перед вызовом й СЕР О вызывает функцию ГМ (через й) Рис. 9.8. Состояния центрального стека во время выполнения Рааса!-программы На рис.

9.8 проиллюстрированы основные этапы выполнения программы иа Разса!, приведенной в листинге 9.9. Для того чтобы продемонстрировать взаимодействие статической (5СР) и динамической (05Р) цепей, а также среды иелокальиых ссылок и параметров подпрограммы, в этом примере приведены значения перемеииых, отмечены точки возврата и указатели в статической цепи для основных д.4. явно определяемая общая среда 435 этапов выполнения программы. Представленные ниже результаты выполнения операторов печати дают представление о поведении программы: Перед вызовом Я, 1=7, Х=4 1 2, К-7, Х 14 В процедуре 0: В процедуре ГЮ В процедуре 0: В процедуре Р: В процедуре Иа«п: После вызова Р,! =9, Х=4 1=2, Х=9 9.4. Явно определяемая общая среда Явная организация общей среды для совместного использования объектов данных — наиболее простой способ реализации совместного использования данных.

Метки операторов как параметры Во многих языках допускается передавать подпрограммам в качестве параметров метки операторов, которые затем могут быть использованы как объекты оператора доге внутри подпрограммы. Помимо обычных сложностей, связанных с использованием доге, которые мы обсуждали в главе 8, этот механизм создает дополнительно две новые проблемы.

Кикия иктивиция долмли использовиться? Во время выполнения подпрограммы метка оператора ссылается на определенную команду в сегменте ее кода. Но оператор доге не может просто передать управление этой команде, изменив С1Р обы чным способом, поскольку упомянутый сегмент кода может совместно использоваться несколькими активациями данной подпрограммы. Поэтому метка оператора, переданная в качестве параметра, должна указывать команду в определеиной иктивиции подпрограммы. Таким образом, метка становится парой значений (указатель команды, указатель записи активации), передаваемых подпрограмме как единый параметр. Кик реализуется оперито77 доге перехода ла мет7иг, яаляюиуюся па77амет77ом подпрограммы? Когда выполняется опсратор довс, объект перехода которого задан формальным параметром с объявленным типом «метка», то в большинстве случаев недостаточно просто передать управление указанной команде в указанной активации подпрограммы.

Вместо этого обычно приходится просматривать всю динамическую цепь вызовов подпрограмм, пока не будет достигнута искомая запись активации. Это значит, что текущая подпрограмма, в которой выполняется оператор до1о, должна быть завершена, то жс касается и подпрограммы, вызвавшей данную и т, д., пока не будет достигнута активация подпрограммы, на которую указывает параметр-метка оператора доГо. Затем начинает выполняться эта активация, но не с команды, на которую указывает точка возврата предыдущей активации в динамической цепи вызовов, а с команды, на которую указывает оператор перехода до1о.

В зависимости от деталей определения и реализации языка этот процесс может оказаться достаточно сложным для его корректной реализации, особенно если принять во внимание конечные значения параметров, передаваемых по результату н по значснню-результату в такой цени прернанных вызовов подпрограмм. 436 Глава 9. Управление подпрограммами Множество объектов данных, которые будут совместно использоваться некоторым множеством подпрограмм, располагается в отдельном именованном блоке памяти.

В кюклой полп рог)илмме создается объявление, явным образом именующее этот блок. Тогда объекты данных, размещенные в этом блоке, становятся видимы из подпрограммы, и на них можно ссылаться обычным способом по имени. Этот блок в разных языках называется по-разному: в ЕОКТКЛХ вЂ” это блок СОР)Е)О)1, в Лг)а— определенная форма пикета; в языке С отдельные переменные, отмеченные с помощью ключевого слова ехЕегп, совместно используются несколькими подпрограммами таким же способом.

В Сл-л- и в Влпа11еа1к для этой цели можно использовать клиссы, хотя вообще-то онп предназначены лля других целей (см. главу 7). Наиболее полхоляшпм ) срмином лля предмета нашего обсуждения является оба!ил среди. Спецификация. Общая среда идентична локалы)ой среде лля подпрограммы затем исключением, что она не является частью какой-либо одной подпрограммы. В ней могут содержаться определения переменных, констант и пшов, но не лопускаклтся определения полпрограмм или формальных параметров. Спецификация пикап)и в языке Айа является примером такой среды: Раскаве 5паген Тао)еэ лп ТаЬ 5)уе: сопвтапт !пгевег = 100. туре ТаЫ е !з аггау Е1 ТаЬ 5!ге) оу геа1. ТаЫе1, ТаЫе2 аЫе: Согг Епггу:лпгечег гапве 1 ..

ТаЬ 5!те. епо В этой спецификации пакета определены тип (ТаЬТе), ко! ютапта (ТаЬ 5! Ее), лве таблицы (объекты данных тина ТаЫе) и целая псрсменная (Сп г Епъгу), представляннние вместе группу объск гав данных (и определений типов), которые используются несколькими подпрограммами. Определение пакета дается за пределами вгсх подпрограмм, которые используют эти псрсмспныс. Если в подпрограмме Р требуется получить доступ к обшей среде, определенной этим паке)ом, то в нсе следует включить явный оператор уп ЕЬ среди других объявлений: я!Ел 5нлгел ТаЫ ею Теперь любое имя, определенное в пакете 5Ьагео ТаЬ)е5, можно использовать в телс подпрограммы Р, как если бы оно было частью лакал! пой среды этой подпрограммы. Для ссылки на эти име! Еа мы используем уточненное имя в виде ннп пакета.ннп перененной.

Таким образом, в подпрограмме Р мы можем паписатес 5нагеа ТаЫез ТаЫе1!5пагеа ТаЫеэ Спгг Епггу) 5нлгеа Тао)ез ТаЫ е215нагеи ТаЫ ез Спгг Ептгу) л 1. без залая ия каких-либо дополнительных объявлений для любого па этих имен. Имя паке~а должно предшествовать имени каждой переменной, так как одна и та же подпрограмма может использовать много пакетов, в некоторых из них могут быть объявлены одтшаковыг илгена. (Если таких конфликтов пе происходит, то в языке Лба имя пакета можно опустить, если использовать оператор оэе — например, итЕЬ 5Ьаге!Т ТаЫеэ; пэе 5Ьа ео ТаЫеэ.) Вообще говоря, любое количество полпрограмм может использовать одну и ту же обп!у)о среду включением оператора 9.4, Явно определяемая общая среда 437 н1гц 5пагео 1ао1ез, и одна подпрограмма может использовать любое количество общих сред. Реализация. В С и ГОКТКАХ каждая подпрограмма, использующая общую среду, должна также эключать в себя объявления для всех совместно используемых переменных, чтобы компилятор знал соответствующие объявления, хотя сама общая среда также объявлена где-то в другом месте подпрограммы.

В языке Аоа предполагается, что компилятор получает объявление общей среды из библиотеки или другой части текста программы, когда во время компиляции подпрограммы он встречает оператор н1 ГЬ. Объявления для общей среды добавляются к таблице символов компилятора как дополнительное множество локальных имен, на которые можно ссылаться в подпрограмме. Затем для целей статической проверки типов и генерации выполняемого кода каждая ссылка на нмя в теле подпрограммы отыскивается в этой таблице обычным способом.

Во время выполнения подпрограммы об1цая среда представлена блоком памяти, содержащим объекты данных, объявленные в ее определении, Поскольку эти объекты потенциально могут принадлежать к различным типам данных, а их объявления нзэестны во время компиляции, то этот блок можно рассматривать как эцтссь. Имя блока представляет собой имя записи, а отдельные переменные в блоке — компоненты записи. Ссылки на отдельные переменные в блоке затем преобразуются в обычные адреса компонентов записи, вычисляемые по Формуле «базовый адрес ь смещениеьс Блок памяти, представляющий обгцую среду, должен существовать в памяти, пока потенциально может быть вызвана любая подпрограмма, использующая этот блок, поскольку каждая активация любой такой подпрограммы должна иметь к нему доступ.

Поэтому обычно блок располагается в памяти статически, так что оц создается в начале выполнения программы и остается э памяти до ее завершения. В памяти может быть размещено множество таких общих блоков вперемешку с блоками, представляющими сегменты кодов подпрограмм, и другими статически размещенными блоками для переменных. Подпрограмма, ссылающаяся на обьект данных из общего блока, лолжна знать базовый адрес этого блока. Простым способом реализации этого требования является размещение указателя на блок (то есть его базового адреса) в сегменте кода.

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

Во время выполнения подпрограммы ссылка на объект данных из общего блока обрабатывается следующим образом: для вычисления действительного местоположения этого объекта данных в памяти из сегмента кода подпрограммы берется базовый адрес соотэстствующего общего блока и к нему добавляется заранее вычисленное смещение для этого объекта данных. 438 Глава 9. Управление подпрограммами грамма Р Рис. 9.9.

Характеристики

Список файлов книги

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6418
Авторов
на СтудИзбе
307
Средний доход
с одного платного файла
Обучение Подробнее