К. Йенсен, Н. Вирт - Паскаль - Руководство для пользователя (1109480), страница 22
Текст из файла (страница 22)
5. КОНСТАНТЫ Определение константы вводит имя константы как обозначение для величины константы из определения; определяемое имя константы не должно входить в константную часть данного опреде- а Коистакты 259 ления*. Определения констант объединяются в раздел определения Констант. Раздел определения констант = 1"сопвп' Определение константы 1Определение константы ";"1].
Определение константы = Имя "=" Коистиита. Константа = 13иак) 1т1исло без лиона! Имя констинтег)~ Строка символов. Имя константы = Имя. Имя константы, перед которым стоит знак («+» или « — »), должно обозначать значение типа 1п1едег нли Йеа!. Существует три стандартных, предопределенных имени констант: Махгп1 обозначает определяемое реализацией значение типа 1п1едег, а 1а!зе и!гпе — значения логического типа (см.равд.6.1.2.). Пример раздела определения констант: соп51 И = 20; Зреед01118М = 2.998е8 ( песета У аесопд 1; Ро1е31аг = 'Ро1аг1а'; ерз = 1Е-б; 6.'ТИПЫ Любой тип определяет множество значений переменных, выражений, функции и т. п., которые относятся к этому типу. Правила совместимости (сопграМ)а11йу) типов определяют совместное использование типов в выражениях, присваиваниях н т. и.
Определение типа вводит для обозначения некоторого типа имя типа. Определяемое имя не должно встречаться в типовой части данного определения; исключение делается лишь для типа области в случае ссылочного типа (см. равд. 6.3) . Определения типов объединяются в раздел определения типов. Пример раздела определения типов приводится в равд. 6.4. Раздел определения типов = 1"1уре" Определение гила 10пределеиие типа; 11. Определение типа = Имя "=" Тип. Имя типа = Имя. Типы представляются с помощью РБНФ с метаименем Тип. Если представление некоторого типа состоит из одного имени типа, "Не должно быть рекурсивные определенна.
— Примеч. пер. 160 Описание языка то оно представляет некоторый (существующий) тип, который обозначается упомянутым именем типа. Если представление типа состоит не только из имени типа, то оно представляет полностью новый тип. Типы классифицируются в соответствии с некоторыми их свойствами. Тип = Простой тип1 Составной тип1 Ссылочный тить 6.1. ПРОСТЫЕ ТИПЫ Любой простой тип определяет некоторое упорядоченное множество значений и представляет собою либо предопределенный тип ясен! (вещрсгвенногй), либо некоторый орданалоный (огд(па1 ) тип.
Имя вещественного типа — зто имя типа, обозначающего тип Простой тип — Ординильный тип(Имя вещественного типа. Имя вещественного тшш = Имя типа. оп1 (Х) янсс(Х) дает ординальное число, соответствующее Х; результат отно- сится к типу 1п1екег дает следующее за Х значение, т. е. мгсс(Х) ) Х и огд(янсс(Х)) = огд(Х) + 1, если только Х не максимальное число соответствующего типа. В последнем случае янсс(Х) суть ошибка дает значение, предшествующее Х, т. е.
ргед(Х) ( Х и огд(ргед(Х)) огд(Х) — 1, если только Х йе минимальное число соответствующего типа. В последнем случае ргед(Х) суть ошибка ргед(Х) Ясно, что порядок значений любого ординального типа тот же, что и порядок соответствующих им ординальных чисел. Ординальный тип — это либо перечисляемый тип (епцгпега(ед), либо один нз предопределенных типов 1п1ецег, Сваг нли Воо1еап, либо диапазон одного из этих типов.
Ординальный тип = Перечисляемый тип)йиапазонный тип(Имя ординольного типа. Имя ординильного типа Имя типо. Ординальный тип отличается (от типа Кеа!) тем, что существует соотнетствие один к одному между его значениями и множеством порядковых (орданалоных) чисел. Порядковые числа для любого ординального типа относятся к некоторому интервалу целых чисел. К любому ордннальному значению Х применимы три следующие предописанные функции; б.
Типы Гб! Имя ординального типа — это имя типа, обозначающего ординальный тип*. 6.1.1. Перечисляемые типы. Перечисляемый тип определяет множество полностью. новых значений и вводит имена констант, обозначающих каждое из таких значений. Перечпслвелый глп = "(УСписок имен") Список имен = Иля ('*," Иля). Первое из имен обозначает самое маленькое из значений, ему соответствует ординальное число нуль. Любое другое имя из списка обозначает значение, следующее за значением, обозначенным предшествующим именем. Таким образом, имена констант перечисляются в порядке увеличения значений. Примеры перечисляемьгх типов: (Веб, Огапйе, Уе11ои, Огееп, В1пе) (С!пй, Отаяопб, Неаге, Ьрабе) (Мапбзу, Тпезбау, Иебпезбзу, Тйпгзбзу, Ег)бау, Вайпгбзу, Вппбау) 6.1.2.
Предопределенные простые типы. В Паскале стандартными считаются такие имена предопределенных типов: Кеа! определяет зависящее от реализации подмножество вещее~вен- ных чисел включает множество целых с абсолютными значениями, меньши- ми или равными определенного при реализации значения с предо- пределенным именем константы Мах!и!»» Для любого целого 1, огб(!) = ! определяет множество истин- ностиых значений, обозначаемых предопределенными именами констант 1а!зе и1гпе. Заметим, что: 1аво (1гпе и огб (1а!ве) — О 1п1екег Воо!сап "Зта н аналогичные фразы порождены, похоже, тем, что в английском языке не всегда можно точно фиксировать смысл некоторых конструкций. В частности, выражение «огсипа) 1уре 1беппб1ег» можно понимать и как «ордииальное имя типа», и как «имя орлинального типа». Конечно, чаще всего «ординальных имен» не бываег, но вель речь идет о формальном определении языка, и читатель уже привык к тому, что в таких определениях имя «черное» может обозначать значение «белое».
Система управления, принятая в русском языке, делает такие фразы тавтологиямн. — Примеч. пер. ** Если вспомнить предыдущее примечание, то фразу «ргебе(!пей сопгйап1 !Веп(!1(ег» можно переводить и иак «предопределенное имя константы», и как«имя предопределенной константы». А что действительно предопределена? Имя или константа? — Примеч.
лер. и 2 Описание языка СЬаг задает определяемое прн реализации множество символов с определяемыми при реализации ордииальными числами, такими, что: а) цифры '0', 'Г..... '9' упорядочены как числа и идут одна за другой (т. е. зпсс1'0') = '1'); б) если есть строчные бунвы 1'а', 'Ь', ..., 'з'), то они упорядочены в алфавитном порядне 1но не обязательно следуют точно одна за лругой); в) если есть прописные буивы 1'А', 'В', ..., 'Х'), то оии упорядочены в алфавитном порядке 1и не обязательно точно следуют одна За другой). б.1.3.
Диапазонные типы. Множество значений, определяемых диапазонным типом, представляет собою подмножество значений другого ордннального типа, он называется базовым типом данного диапазонного типа. Диапазонный тип задается самым маленьким и самым большим значениями и включает все значения, лежащие между ними. Даааазонный таа = Константа "..*' Константа. Обе константы должны относиться к базовому типу. Первая константа' задает самое маленькое значение; она должна быть меньше или равна второй константе, задаюшей самое большое значение. Примеры диапизонных типов: 1..й -10 ..
+10 йопйау..рг)бау б2. СОСТАВНЫЕ ТИПЫ Любой составной тип характеризуется типами его компонент и методом их объединения. Кроме того, для каждого составного типа может быть указано предпочтительное представление данных. Если перед составным типом поставлен префикс рас)сед, то на смысл программы это не оказывает никакого влияния, а лишь подсказывает транслятору, что надо экономить память, выделяемую для значений этого типа, даже за счет эффективности доступа к ним и возможного увеличения обьема памяти самой программы. Есть только два исключения: всегда упаковываются строковые типы (см. равд. 6.2.1), а фактические параметры-переменные (см. равд.
11.3) не должны быть компонентами какой-либо упакованной составной переменной. Если компоненты упакованного составного типа относятся к некоторому составному типу, то тип компонент считается упакованным только в том случае, если в представлении типа компонент стоит явный префикс б.
Типы 1бб Составной тиа — 1" рас]гед" 1 Неупикованный составной тип~ Имя составные типа Неупакованный составной тип = Миссивовый тип[Зипиской тип[ Файловый тип[Мнаавественный тип. Имн состивноео типа Имн типа. Имя составного типа есть имя типа, обозначающего составной тип. 6.2.1. Массивовый тип. Массивовый тип относится к структурам, состоящим из фиксированного числа компонент, причем все компоненты принадлежат к одному и тому же типу, называемому типом компонент.
Компоненты находятся во взаимо однозначном соответствии со значениями, относящимися к типу индекса. Массиеовый тип — "аггау*' "1" Тип индекси 1",'* 1ип индекса', "ог' Тип комытненты Тип индекса = Ординаланый тип. Тип компоненты = Тип. Можно задавать' более одного типа индекса, как, например, в рас]сес] аггау [Т1, Т2, ..., Тп[ о[ С Это просто 'сокращение записи: расйес] аггау [Т1[ о[ аггау [Т2, ..., Тп] о1 С. Эти две записи должны считаться эквивалентными и при отсутствии в них префикса расЕей.