Cтраница 4
Образцы являются важным типом данных в Сноболе 4 благодаря той ключевой роли, которую играет операция сопоставления с образцом. Любая операция сопоставления с образцом управляется структурой данных типа образец. Программа, реализующая сопоставление, декодирует и интерпретирует образец, одновременно выполняя поиск соответствующей цепочки литер, указанной образцом. Детально образцы рассматриваются в следующем разделе, где мы разбираем операцию сопоставления саму по себе. Наличие образцов, как явных типов структур данных, означает, что образцы могут быть значениями переменных, элементов массивов и элементов таблиц. Во время выполнения образец представляется во внутренней форме, удобной для эффективной его интепретации программой сопоставления; обычно такой формой является связанное множество областей памяти, образующее древовидную структуру, которая отражает естественную структуру образца как набора альтернатив и конкатенации подобразцов. [46]
В языках, подобных языкам ЛИСП, Снобол и APL, в которых используется лишь динамическое связывание, статическая связь обычно никогда не применяется. Для установления среды исполнения, необходимой вызванной процедуре, используется только динамическая связь. В языках, подобных языкам Фортран, Бейсик и Кобол, в которых необходим только один объект контекст, статические связи никогда не применяются: динамические связи могли бы использоваться только для вызовов к подпрограммам системной библиотеки. [47]
Эта задача прямо-таки создана для языка типа Снобол, в котором средства работы с текстовыми данными сочетаются с простыми арифметическими операциями. Хорошим кандидатом может быть и какой-нибудь другой язык, с более широким диапазоном алгебраических вычислений и с достаточными средствами обработки текстовых данных, например PL / I, Паскаль или XPL. Но какой бы язык вы ни выбрали, постарайтесь избежать представления литер целыми числами; требования машинного представления не должны навязывать некрасивое, путаное решение задачи. [48]
В таких языках, как Лисп, Снобол 4 и АПЛ, в которых используются более общие методы управления памятью, в подпрограммах допускается создание структур данных и передача их в качестве результата вызывающим программам. В этих языках распределение памяти для различных целей происходит более или менее постоянно во время выполнения программы и границы подпрограммы ( от входа до выхода) не являются критически важными для схем управления памятью. [49]
Почти любая характеристика программы и структуры данных Снобола 4 может измениться в любой момент во время выполнения. Как следствие в Снобол-системе приходится во время выполнения программы хранить, постоянно выбирать и модифицировать значительный объем динамических данных. Это в большинстве своем такие данные, которые в других языках генерируются и используются транслятором при построении выполняемой формы программы, а затем исключаются перед началом выполнения. Удобнее всего характеризовать эти динамические системные данные в терминах множества таблиц, хотя такие данные могут храниться по-разному в разных реализациях. Ниже перечислены основные динамические таблицы, которые должны поддерживаться при выполнении программ, написанных на Сноболе. [50]
Обсуждение некоторых особенностей сопоставления с образцом в Сноболе 4 покажет, как определяются образцы. Операция сопоставления в Сноболе 4 всегда применяется к структуре данных, являющейся цепочкой литер. Она пытается найти в этой цепочке одну подцепочку, свойства которой определяются образцом. [51]
В некоторых языках программирования ( например, в СНОБОЛе) программа может быть написана так, что она будет иметь точно такую же рекурсивную, синтаксически-ориентированную структуру, как этот алгоритм. [52]