Jump to content

Родительское дерево указателей

Стопка спагетти с выделенной «активной» рамкой стопки

В информатике внутридеревьевое , или родительское дерево указателей представляет собой N -арную древовидную структуру данных в которой каждый узел имеет указатель на родительский узел , но не имеет указателей на дочерние узлы . При использовании для реализации набора стеков структура называется стеком спагетти , стеком кактуса или стеком сагуаро (по имени сагуаро , разновидности кактуса). [1] Деревья родительских указателей также используются в качестве структур данных с непересекающимися наборами .

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

Использование в компиляторах

[ редактировать ]

Компилятор создает такого языка, как C, спагетти-стек, открывая и закрывая таблицы символов, блоков представляющие области . Когда открывается новая область блока, таблица символов помещается в стек. При обнаружении закрывающей фигурной скобки область видимости закрывается и таблица символов извлекается. Но эта таблица символов запоминается, а не уничтожается, и она запоминает свою «родительскую» таблицу символов более высокого уровня и так далее. Таким образом, когда компилятор позже выполняет переводы абстрактного синтаксического дерева для любого заданного выражения, он может получить таблицу символов, представляющую среду этого выражения, и может разрешить ссылки на идентификаторы. Если выражение ссылается на переменную X, сначала она ищется в таблице конечных символов, представляющей самую внутреннюю лексическую область видимости, затем в родительской и так далее.

Использовать в качестве стеков вызовов

[ редактировать ]

Термин «стек спагетти» тесно связан с реализациями языков программирования , поддерживающими продолжения . Стеки спагетти используются для реализации фактического стека времени выполнения, содержащего привязки переменных и другие функции среды. Когда необходимо поддерживать продолжения, локальные переменные функции не могут быть уничтожены, когда эта функция возвращается: сохраненное продолжение может позже повторно войти в эту функцию и ожидать, что не только переменные там останутся нетронутыми, но также будет ожидаться, что весь стек присутствовать, чтобы функция могла вернуться снова. Чтобы решить эту проблему, кадры стека можно динамически распределять в структуре стека спагетти и просто оставлять для сбора мусора , когда на них больше не ссылаются никакие продолжения. Этот тип структуры также решает проблемы как восходящего, так и нисходящего движения первоклассные лексические замыкания , в результате чего в этом субстрате легко реализуются .

Примеры языков, использующих стопки спагетти:

Мэйнфреймы, использующие архитектуру больших систем Burroughs и работающие под управлением операционной системы MCP, могут создавать несколько задач в одной и той же программе. Поскольку изначально это были системы, основанные на АЛГОЛЕ, они должны поддерживать вложенные функции , и в результате создание задачи приводит к разветвлению стека, который Берроуз неофициально назвал «стеком Сагуаро».

См. также

[ редактировать ]
  1. ^ Клингер, В.; Хартхаймер, А.; Ост, Э. (1988). «Стратегии реализации продолжений». Материалы конференции ACM 1988 года по LISP и функциональному программированию - LFP '88 . стр. 124–131. дои : 10.1145/62678.62692 . ISBN  089791273X .
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 5a2b6e4ef3b5eec16343ce147dd59b4b__1715617020
URL1:https://arc.ask3.ru/arc/aa/5a/4b/5a2b6e4ef3b5eec16343ce147dd59b4b.html
Заголовок, (Title) документа по адресу, URL1:
Parent pointer tree - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)