К. Йенсен, Н. Вирт - Паскаль - Руководство для пользователя (1109480), страница 23
Текст из файла (страница 23)
Примеры маесивовых типов: аггау [1..100] о1 Яеа1 аггау [1..10, 1..20] ог 0.99 аггау [Воо1еап] о1 Со1ог аггау [3[ге] о1 расаед аггау ['а'..'г'] ог Воо1еап Каждое значение массивового типа это функциональное [много к одному) отображение всего множества значений индексов во множество значений, относящихся к типу компонент. Массивовый тип называется строковым типом, если он упакованный, его компоненты относятся к предопределенному типу Сваг, а тип его индекса — диапазон из ]п1едег от 1 до п, причем п больше 1, Строки символов (см.
равд. 4) относятся к константам строковых типов. Примеры: рас]чед аггау [1..ЗЬг1пй[епйсп] о1 01чаг рас]чей аггау [1..2] о1 Скат гйй Описание языка 6.2.2. Записные типы. Записной тип имеет фиксированное число компонент, относящихся, возможно, к различным типам. Отдельные компоненты и их типы, а также сами значения записного типа определяются с помощью списка полей (1(е(й 1(з() из записного типа. Записной тип = "гесогй" Список полей "еой" Список полей — ((Фиксирозинная часть (" *'Вариантная часть) ( Вориинтная часть) (";"11.
Фиксирооинная часть = Секция полиси (";" Секция записи). Секция зиписи = Список имен ":" Тип. Имя поля = Имя. Список полей может содержать фикс(гровинную часть (((хеб раг1), которая задает фиксированное чис)го компонент, называемых полями (((е)пз). С каждой секцией записи связан некоторый тип: считается, что все имена из ее списка имен полей принадлежат к этому типу.
Область действия имен полей включает весь записной тип, а также обозначения полей и операторы присоединения, где эти имена могут использоваться (см. равд. 7.2.2; 9.2.4 и 1Рн2). Таким образом, в любом из записных типов написание каждого имени поля должно быть уникальным. Примеры записных типов с одной фиксированной частью. Расеей гесогй Уеаг: 1900 .2100; Мооаь: 1..12; Вау. 1. 3! еой гесогй гггаейаее, ьаааоаие: оас)гей аггау ( 1..32) о( Сааг; Аее: 0..99; Магггей. Воо!еао еой Список полей может также содержать и вариантную чисто, задающую один н более вариантов. Структура и значения варианта задаются его списком полей.
Вариантная часть = саве Селектор еарианти "ог' Вириант (*', ' Вариакг). Вариинг = Константа ( ',' Константа) ": ( Список пояей")*'. Селектор оарианти = (Поле призника ":"( Тип признака. Тип признака = Имя ординального типа. Поле признака — Имя б.
Типы убб Примеры записных типов с вариантными иистями. гесогб сазе ВааеКпоип: Воо1еап о( (а1зе: ( ); Сгое: (Иаае: распел аггау (1..Певеках] о( Сваг) епб гесоге Х, У: Веа1; Агеа: Веа1; сазе Б: икаре ТгсапВ1е: о( ( $(г]е: Веа1; 1пс1]паз!оп, Ап21е1, Апа1е2: Апа!е ) ( В!бе1, В(бе2: Яеа1; Баек, Апк1еЗ: АпВ1е ); ( 0]ааетег: Веа1 ) Кесаапк1е С!гс1е епд 6.2.3. Множественные типы. Множественный тип определяется как множество значений множества-степени, построенного на основе значений базового типо. Таким образом, каждое значение множественного типа есть множество, содержащее нуль или более компонент (элементов), причем каждый элемент — значение базового типа.
Константа, предшествуюшая варианту, должна обозначать значение, относяшееся к типу признака. В данной вариантной части 'каждое такое значение должно встречаться точно один раз. Если в селекторе варианта встречается поле признака, то его нмя считается именем поля, припадлежашего к типу признака. В любой данный момент активным может быть лишь один из вариантов данной вариантной части. Если есть поле признака, то активным будет вариант, которому предшествует значение, равное значению поля признака. Если поля признака нет, то активным будет тот вариант, к которому относилась самая последняя по обращению компонента. Значение списка полей определяется значением каждого из полей, заданных в фиксированной части, и значением вариантной части.
Значение вариантной части состоит нз указания (!пс](са(1оп) того, какой вариант активен, значения поля признака (если он есть) и значения активного варианта. !66 Оппсипие лзьжа Множественный тип = "зег' "оГ' Базовый тип. Бизовый тип = Ординилвпый тип. Примеры множественных типов: зе1 о1 Сйзг рваней зет о1 0..11 6.2.4. Файловые типы.
Любой файловый тип выглядит как объединение последовательности компонент, имеющих одинединственный тип (тип компонент), некоторого положения в этой последовательности (позиции) и режима (щос)е), указывающего, формируется файл или просматривается. Число компонент в последовательности называется длиной файла; при описании файлового типа его длина не фиксируется. Файл называется пустым, если его длина ранна нулю. Файшн~ый тип = "Ые" *'оГ' Тип компоненты. Тип компоненты любого файлового типа должен быть присваиваемым (см. разд. 6.5). Файл, находящийся в режиме просмотра (1пзрес1юп), может быть установлен на любую компоненту последовательности или в положение конца файла (епй-о1-1!!е).
Файл, находящийся в режиме формирования (пепега1!оп), постоянно установлен в положение конца файла. Работа с файловыми значениями идет с помощью предописанных процедур и функций обработки файлов (см. разд. !!). Имя предопределенного составного типа Тех1 относится к особому файловому типу, в котором последовательность (символов. Примеч пер.) состоит из нуля или более строчек (!!пез)*. Любая строчка в свою очередь состоит нз нуля или более символов (значений типа Сваг), за которыми следует особый маркер конца строки (епс)-о1-!!пе) . !!еременные типа Тех1 называются текстовыми файлами (1ех1-11!е). Если непустой текстовый файл находится в режиме просмотра, то перед положением конца файла всегда находится конец строки.
Для работы с текстовыми файлами существует несколько дополнительных„предописапных процедур н функций (см. равд. !1.5 н 12). ' Слелуя определенной траднпнн, мы сохраняем одинаковый перевод лля терминов Нпе н з1ппя — «строка». Надеемся, что «контекстные» связи позволяют провОдить естественное отождествление. Там же, где зто сделать невозможно,,для тсрмнна Нпе будет употребляться уто ынющес . «строчкам — - Примеч. пер.
б. Типы 167 6.3. ССЫЛОЧНЫЕ ТИПЫ Ссылочный тип отличается от составного и простого типов тем, что его множество значений — динамическое„т. е. значения любоСо ссылочного типа порождаются и уничтожаются в процессе выполнения программы. Множество значений всякого ссылочного типа всегда содержит некоторое особое значение, представляемое с помощью слова пГ!. Каждое из значений этого множества должно в программе порождаться с помощью предописанной процедуры )Чехч (см. разд. 11.4.2) . Такие значения называютси ыдеытифицируюы(ими (!деп(!(у(пд ча!пез), поскольку каждое нз них идентифицирует некоторую переменную; ее будем называть идентифицированной переменной ()бепИ!ед наг!аЫе)«(см.
равд. 7.3). Идентифицированная переменная относится к типу области (догпауп 1уре) соответствующего ссылочного типа. Идентифицирующее значение и его идентифицированная переменная могут уничтожаться с помощью предописанной процедуры )л(ароне (см. равд. 11.4.2). При окончании программы все идентифицирующие значения, порожденные в ней, перестают существовать. Ссылочный тип = "1" Тип области! Имя ссыло«ного гила. Тия облисти = Имя гила. Им» ссылочного типа = Имя гила. бя. ПРИМЕР РАЗГ(ЕЛА ОПРЕДЕЛЕНИИ ТИПОВ Фуре МаФога1 = 0..МахГпФ; Со1ог = (Кеб, Уеыом, Сгееп, 61це); Нпе = зеФ о( Со1ог; Зйаре = (Тг1апй1е, йесФапй1е, С(гс1е); Уеаг = 1900..2100; ' Наличие такого понятия еще раз подтверждает необходимость введения нового термина в языки программирования или хотя бы нового перевода для слова «1беппчег».
Русское толкование слов «идентификация», «идентификатор» подразумевает однозначное определение объекта (в общем случае, без ионтекстных зависимостей). Поэтому, как только идентификатор связывается с понятием «область определения», «контекст», он сразу же теряет специфические черты идентификатора (глобальной однозначности) и превращается в контекстозааисимое имя Ссылочные же значения (в машинной интерпретации — «адреса») идентифицируют переменную, а точнее значение, совершенно однозначно.
Поэтому в книге и появляются идентифицирукицие значения и идентифицированные переменные. Однако интересно было бы узнать, как авторы стали бы называть переменные, идентифицированные с помощьк> идентификаторов, т. е. того, что мы в книге (переводе) называем «именем»у —. Примеч. лгр. !бб Очи«ение языка Саго = аггау [1..80] о! Сйаг; Зйг!п818 = распев аггау [1..18] о! Сйаг; Соир1ех = гесогй Ке, 1и: Кеа1 епб; РегвопРо!пвег = 1 Регвоп; Ке1астопвй!р = (Магг1еб, Соор1еб, Згп81е); Регвоп = гесогб Мане, Г!гвспаие: Заг!п818; В!гвйуеаг: уеаг; Зех: (Ма1е, Геиа[е); Гавйег, Мовйег: Регвопро1псег; Ег1епбв, Сй!1дгеп: !!1е о( РегвопРо!пйег; Ехйе1ав!опвй!рСонпв: Мавнга!; саве Звавпв: Ке1ай!опвй!р о! Магг[ей, Сонр1ебп (3!Кп!!1сапсйййег: РегвопРо!псег); З!п81е; ( ) епб; Мает!х1пЦех = 1..8; Зцпагейавг!х = аггау [Масс!х1пйех, Маеггх1пбех] а! Кеа1; бзй СОВМЕСТИМОСТЬ ТИПОВ Два типа называются совместимыми, если справедливо любое из четырех следующих условий: а) они представляют собою один и тот же тип; б) один представляет собою диапазон другого, или оба они— диапазоны некоторого исходного«()юв() типа; в) оба типа — множественные, причем их базовые типы — совместимы, н оба онн либо упакованы, либо нет; г) оба типа — строковые, причем у них одинаковое число компонент**.