Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Непейвода Н.Н. -> "Основания программирования " -> 139

Основания программирования - Непейвода Н.Н.

Непейвода Н.Н., Скопин И.Н. Основания программирования — Институт компьютерных исследований , 2002. — 919 c.
Скачать (прямая ссылка): osnovanprogramm2002.pdf
Предыдущая << 1 .. 133 134 135 136 137 138 < 139 > 140 141 142 143 144 145 .. 316 >> Следующая

ри определении абстрактных вычислений было бы неправильно трактовать взов процедур как преобразование дерева абстрактного синтаксиса: замена конструкции вызова процедур деревом, представляим ее тело. Причина не в том, что при этом необходимо оперировать потенциально бес-конечнми графами (например, при раскрытии рекурсивных вызовов): это вполне реализуемо, поскольку в семантически правильной программе рекурсия всегда конечна. Серьезным доводом против трактовки вызова как замен является растворение экземпляра процедур в дереве программы и, как следствие, невозможность оперирования с экземплярами. А оперирование с экземплярами процедур, в том числе и не ограничивающее себя рамками стека, — исключительно важный момент10.
днако, как всегда, нецелесообразность некоторого реения в обем случае не означает его нецелесообразности в частнх. апример, в язке C/C++ имеются встраиваемые процедуры (inline-процедуры), семантика вызова которых — именно прямая текстовая подстановка11 тела процедур вместо конструкции вызова.
сознав, что абстрактный вчислитель дол ен поро дать именно экземпляры процедур, необходимо далее ответить на вопрос, как запоминать экземпляры, становящиеся временно пассивными, и как их активизировать, когда
10 Надо заметить, что в языке Algol 60 было принято именно подстановочное определение семантики вызова. Неудобства, связанные с таким определением, выявились в работах по реализации Algol 60, и стимулировали осознание концепции контекста.
11 Как всегда, такое определение некорректно, и некорректность явно оговорена в семантике, в частности, языка C++: правила локализации имен для встраиваемой и обычной процедур одни и те же, и в этом главное отличие встраиваемых процедур от препроцессорных определений.
398
ГЛАВА 8. ПОДПРОГРАММЫ
заверается текуий активный экземпляр? ля этого есть две возмо ности.
• Присоединить локальный контекст порождаемого экземпляра к локальным данным экземпляра абстрактного вычислителя, коотрй специально создается для отработки конструкции вызова процедуры. Это чисто теоретический путь реализации, который, тем не менее, может быть целесообразен, например, для распределеннх систем, в случае, когда вызов обрабатывается на своем процессоре.
• Организация специальной памяти для хранения локальных контекстов процедур, к которой имеет доступ абстрактный вчислитель. Это — прагматический вариант реализации. Если не фиксировать дисциплину доступа к такой памяти, то мо но реализовать различне вариант оперирования с экземплярами вызываемой процедуры.
Здесь используется вторая возможность, и чаще всего тот ее частный случай, когда память контекстов организована как стек. бстрактнй вчислитель, обрабатывающий вызов процедуры, переходит к интерпретации дерева тела процедуры и одновременно размеает на стеке локальнй контекст. ри заверении экземпляра стек восстанавливается, а управление возвраается в точку вызова. В данном случае стек предоставляет место для хранения и динамической, и статической цепочки процедур.
В практике программирования понятие экземпляра подпрограммы не ограничивается применением лиь в области рекурсивнх алгоритмов. частности, одновременное суествование нескольких экземпляров подпрограмм, не подчиняееся стековой дисциплине, является моным средством программного моделирования. Здесь нет принципиальной разницы, выполня т-ся ли эти подпрограммы последовательно, приостанавливаясь или продолжаясь по какой-либо из внених причин, или параллельно, когда на причины приостановки, продол ения и заверения накладыва тся правила одновременной работ нескольких процессоров. Вано одно, что суествует и вы-деривается определенная дисциплина активизации и взаимодействия процессов, и стековая дисциплина — это существенный, но лишь один из многих пример реально используемых дисциплин.
Выше (см. § 7.3.4) при обсуждении циклической обработки было определено понятие сопрограммного механизма взаимодействия процессов, при котором несколько программных объектов поочередно передают друг другу управление и поставляют данные для обработки. Эта важная с практической
8.4.
399
точки зрения дисциплина мо ет рассматриваться как вариант, альтернативный по отношению к стековой организации взаимодействий. Тем не менее, часто, особенно в случаях последовательных вычислений, сопрограммное взаимодействие моделируется обычной стековой дисциплиной.
Типичный пример — синтаксическое управление трансляцией. Здесь в -делен главный процесс — синтаксический анализатор. Когда ему это ну но, он запрашивает лексический анализатор путем обыкновенного вызова процедуры, называемой далее генератором лексемы, которая вырабатывает очередную лексему. Генератор лексемы останавливает себя сам, когда лексема сформирована. Это реализуется как обычный возврат из процедур . онят-но, что кадая лексема вырабатвается отдельнм экземпляром генератора, который тут же уничтожается, когда надобность в нем пропадает.
В то же время, генератор лексемы работает в собственном контексте, основ-нми данными которого явля тся поток (файл) входных символов и указатель очередного символа этого потока. о но естественно определить состояние такого контекста (совокупность значений его переменнх), которое меняется при работе кадого экземпляра генератора, и, как следствие, есть все основания рассматривать, пусть даже умозрительно, особую программ-ну единицу, объединяу процедуру генерации лексем и указанный контекст. менно к ней обраается синтаксический анализатор за очередной лексемой, а то, что такое обраение превраается в взов процедуры, есть ничто иное, как реализация требуемого действия. именно эта программная единица связана с синтаксическим анализатором как с сопрограммой.
Предыдущая << 1 .. 133 134 135 136 137 138 < 139 > 140 141 142 143 144 145 .. 316 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100