Все госты и снипы онлайн

Более 10000 документов в открытом доступе, абсолютно бесплатно

ГОСТ Р - ИСО 10303-11-2000 Системы автоматизации производства и их интеграция. Представление данных об изделии и обмен этими данными. Часть 11. Методы описания. Справочное руководство по языку EXPRESS

Этот документ был распознан автоматически. В блоке справа Вы можете найти скан-копию. Мы работаем над ручным распознаванием документов, однако это титанический труд и на него уходит очень много времени. Если Вы хотите помочь нам и ускорить обработку документов, Вы всегда можете сделать это, пожертвовав нам небольшую сумму денег.

Файлы для печати:

ГОСТ Р ИСО 10303-11-2000 Г О С У Д А Р С Т В Е Н Н Ы Й С Т А Н Д А Р Т Р О С С И Й С К О Й Ф Е Д Е Р А Ц И И Системы автоматизации производства и их интеграция П Р Е Д С Т А В Л Е Н И Е Д А Н Н Ы Х О Б И З Д Е Л И И И О Б М Е Н Э Т И М И Д А Н Н Ы М ИЧ а с т ь 1 1 Методы описания Справочное руководство по языку EXPRESSИздание официальное77 /1 00 20 - 7 З БГОССТАНДАРТ РОССИИМ о с к в арыночная стоимость недвижимости
ГОСТ Г ИСО 10303-11-2000Предисловие1 РАЗРАБОТАН Всероссийским научно-исследовательским институтом стандартизации(ВНИИстандарт) совместно с НИЦ CALS-технологий «Прикладная логистика»ВНЕСЕН Техническим комитетом по стандартизации ГК 431 «CALS-технологии*2 ПРИНЯТ И ВВЕДЕН В ДЕЙСТВИЕ Постановлением Госстандарта России от 14 ноября2000 г. № 293-ст3 Настоящий стандарт представляет собой аутентичный текст международною стандартаИСО 10303-11-94 «Системы автоматизации производства и их интеграция. Представлеиие данныхоб изделии и обмен этими данными. Часть 11. Методы описания. Справочное руководство поязыку EXPRESS* с учетом поправки 1—994 ВВЕДЕН ВПЕРВЫЕ© ИНК Издательство стандартов, 2001Настоящий стандарт не может быть полностью или частично воспроизведен, тиражировани распространен в качестве офи пиалы «ото издания без разрешения Госстандарта РоссииII
ГОСТ Р ИСО 10303-11-2000Содержание1 Область применения............................................................................................................................................. 12 Нормативные ссылки........................................................................................................................................... 1 3 Определения........................................................................................................................................................... 13.1 Термины, определенные в ГОСТ Р ИСО 10303-1..................................13.2 Термины, определенные в ИСО/МЭК 10646-1..................................................................................... 2 3.3 Другие определения..................................................................................................................................... 24 Требования соответствия................................................................................................................................... 24.1 Формальные спецификации, написанные на EXPRESS..................................................................... 2 4.2 Реализации E X PR E SS................................................................................................................................. 35 Фундаментальные принципы .........................46 Синтаксис определения язы ка.......................46.1 Синтаксис спецификации......................................................................................................................... 5 6.2 Специальная символьная нотация.......................................................................................................... 57 Основные элементы языка................................................................................................................................. 67.1 Набор символов............................................................................................................................................. 6 7.2 Зарезервированные слова ............................................................................................................................ 8 7.3 Знаки (symbols)............................................................................................................................................... 9 7.4 Идентификаторы.............................................................................................................................................10 7.5 Литералы............................................................................................................................................................ 108 Типы данных............................................................................................................................................................ 128.1 Простые типы данных................................................................................................................................... 12 8.2 Агрегатные (сборные) типы данных..........................................................................................................15 8.3 Поименованные типы данны х....................................................198.4 Созданные типы данных.............................................................................................................................. 20 8.5 Обобщенные типы данных........................................................228.6 Классификация использования типов данных......................................................................................229 Объявления................................................................................................................................................................239.1 Объявление т и п а ...........................................................................239.2 Объявление объекта...................................................................................................................................... 24 9.3 С хем а..................................................................................................................................................................39 9.4 Константа..........................................................................................................................................................40 9.5 Алгоритмы........................................................................................................................................................40 9.6 Правило..............................................................................................................................................................45Ю Область действия и видимость.........................................................................................................................4710.1 Правила областей действия.......................................................................................................................47 10.2 Правила видимости...................................................................................................................................... 48 10.3 Явные правила для элем ентов.................................................................................................................4911 Спецификация интерфейса...............................................................................................................................5411.1 Спецификация интерфейса U SE ............................................................................................................. 5411.2 Спецификация интерфейса REFERENCE............................................................................................. 5411.3 Взаимодействие USE и REFERENCE................................................................................................... 5511.4 Неявные интерфейсы.................................................................................................................................. 5512 Выражение.............................................................................................................................................................. 5712.1 Арифметические операторы .....................................................................................................................58 12.2 Операторы отнош ен и й ...............................................................................................................................59 12.3 Двоичные операторы.................................................................................................................................. 66 12.4 Логические операторы................................................................................................................................ 6712.5 Строковые операторы.................................................................................................................................6812.6 Агрегатные операторы............. ................................................................................................................. 69 12.7 Ссылки..............................................................................................................................................................74 12.8 Обращение к функции................................................................................................................................ 76 12.9 Инициализатор агрегатов...........................................................................................................................77 12.10 Оператор конструирования экземпляра сложного объекта............................................................7812.11 Совместимость типов................................................................................................................................ 7813 Исполняемые операторы.................................................................................................................................... 7913.1 Пустой оператор............................................................................................................................................ 80 13.2 Оператор псепдоимени...............................................................................................................................80III
ГОСТ I* ИСО 10303-11-200013.3 Оператор присваивания.............................................................................................................................80 13.4 Оператор C A S E ............................................................................................................................................ 81 13.5 Составной оператор.................................................................................................................................... 82 13.6 Оператор выхода.......................................................................................................................................... 82 13.7 Оператор I f ... Then ... Else...............................................................................8213.8 Оператор вызова процедуры.....................................................................................................................83 13.9 Оператор ц икла.............................................................................................8313.10 Оператор возврата...................................................................................................................................... 85 13.11 Оператор пропуска.................................................................................................................................... 8514 Встроенные константы...................................................................................................................................... 8614.1 Константа е ................................................................8614.2 Неопределенная...................................8614.3 Л ож ь..................................................................................................................................................................8614.4 П и ......................................................................................................................................................................8614.5 Self......................................................................................................................................................................86 14.6 Истина..............................................................................................................................................................8614.7 Неизвестная.................................................................................................................................................... 8615 Встроенные ф ункции.......................................................................................................................................... 8615.1 Abs — арифметическая функция............................................................................................................. 86 15.2 ACos — арифметическая ф ункция........................................................................................................86 15.3 ASin — арифметическая функция..........................................................................................................87 15.4 АТап — арифметическая ф ункция........................................................................................................87 15.5 Blengih — двоичная ф ункция................................................................................................................. 87 15.6 Cos — арифметическая функция.............................................................................. ............................87 15.7 Exists — общая функция........................................................................................................................... 87 15.8 Ехр — арифметическая функция............................................................................................................87 15.9 Format — общая ф ун к ци я ....................................................................................................................... 88 15.10 HiBound — арифметическая функция................................................................................................ 90 15.11 Hilndex — арифметическая функция................................................................................................... 90 15.12 Length — строковая функция............................................................................................................... 90 15.13 LoBound — арифметическая функция............ ................................................................................... 91 15.14 Log — арифметическая функция..........................................................................................................91 15.15 Log2 — арифметическая функция........................................................................................................91 15.16 Log 10 — арифметическая функция......................................................................................................91 15.17 Lolndex — арифметическая функция..................................................................................................91 15.18 NVL — функция нулевого значения..................................................................................................92 15.19 Odd — арифметическая ф ункция......................................................................................................... 92 15.20 RolesOf — общая функция.......................................................................................................................92 15.21 Sin — арифметическая ф ункция........................................................................................................... 93 15.22 SizeOf — агрегатная функция.................................................................................................................93 15.23 Sqrt — арифметическая функция........................................................................................................... 94 15.24 Tan — арифметическая функция........................................................................................................... 94 15.25 TypeOf — общая ф ункция.......................................................................................................................94 15.26 Usedln — общая ф ункция.......................................................................................................................95 15.27 Value — арифметическая функция....................................................................................................... 96 15.28 Value_in — функция принадлежности................................................................................................. 97 15.29 Value_unique — функция уникальности............................................................................................. 9716 Встроенные процедуры...................................................................................................................................... 9716.1 Insert..................................................................................................................................................................97 16.2 Remove..............................................................................................................................................................98Приложение А Синтаксис языка EXPRESS....................................................................................................99А. 1 Лексемы.................................................................................................................................. 99А.2 Грамматические правила..................................................................................................102 A. З Список перекрестных ссылок....................................................................................106Приложение В Определение разрешенных экземпляров объектов.......................................................112B . 1 Формальный подход..................................................................................................... 112В.2 Операторы супертипов..................................................................................................... 113 В.З Интерпретация возможных типов данных сложных объектов.............................ИЗIV
ГОСТ Р ИСО 10303-11-2000Приложение С Ограничения на экземпляры, налагаемые спецификацией интерфейса................119 Приложение D EXPRESS-G. Графическое подмножество EX PR ESS................................................. 122D. I Введение и обзор............................................................................................................... 122D.2 Символы определения..................................................................................................... 123D.3 Символы отнош ений..............................................................124D.4 Символы компоновки..................................................................................................... 125 D.5 Диаграммы уровня объекта............................................................................................126 [З.бДиафаммы уровня схемы................................................................................................128D . 7 Полные диаграммы E X PR E SS-G ............................................................................129Приложение Е Заявка о соответствии реализации протоколу (З С Р П )................................................131E. 1 Синтаксический анализатор языка EXPRESS...................................................... 131 Е.2 Инструментальное средство редактирования EX PR ESS-G ................................. 131Приложение F Регистрация информационного объекта.......................................................................... 132 Приложение G Отношения.................................................................................................................................133G.1 Отношения через атрибуты............................................................................................133 G . 2 Отношения подтип/супертип....................................................................................137Приложение Н Модели EXPRESS для иллюстрации примеров EXPRESS-G....................................138H . 1 Пример модели единичной схем ы .......................................................................... 138 Н.2 Шаблон отнош ения......................................................................................................... 139Н.З Простое дерево подтнп/супергип................................................................................ 139Н.4 Переобъявление атрибута................................................................................................140 Н.5 Многосхемные м одели....................................................................................................140Приложение J Библиография............................................................................................................................. 142 Предметный указатель.............................................................................................................................................142 V
ГОСТ Р ИСО 10303-11-2000ВведениеСтандарты серии ГОСТ Р ИСО 10303 распространяются на машинно-ориентированноепредставление данных об изделии и обмен этими данными. Целью является создание механизма,позволяющего описывать данные об изделии на протяжении всего жизненного цикла изделиянезависимо от конкретной системы. Характер такого описания делает его пригодным не толькодля обмена инвариантными файлами, но также и для создания баз данных об изделиях, коллек­тивного пользования этими базами и архивации соответствующих данных.Стандарты серии ГОСТ Р ИСО 10303 представляют собой набор отдельно издаваемых стан­дартов (частей). Части данной серии стандартов относятся к одной из следующих тематическихгрупп: методы описания, интегрированные ресурсы, прикладные протоколы, комплекты абст­ рактных тестов, методы реализации и аттестационное тестирование. Группы стандартов даннойсерии описаны в ГОСТ Р ИСО 10303-1. Настоящий стандарт входит в группу методов описания.Настоящий стандарт описывает элементы языка EXPRESS. Каждый элемент языка пред­ставлен в собственном контексте с примерами. Сначала следуют простейшие примеры, ддтее снарастающей сложностью раскрываются более сложные положения.Обзор языкаEXPRESS — это название формального языка описания информационных требований.EXPRESS применятся дзя определения информационных требований других стандартов серииГОСТ Р ИСО 10303. Цели создания языка EXPRESS:-объем и сложность стандартов серии ГОСТ Р ИСО 10303 требуют наличия возможностейкак дзя машинной интерпретации содержащейся в них информации, так и для интерпретацииданной информации человеком. Представление элементов информации из стандартов серииГОСТ Р ИСО 10303 в не строго формализованном виде позволит игнорировал, возможностиприменяемых средств автоматизации дзя проверки несоответствий в процессе представления илисоздания вторичных отображений, включая отображения реализации;-язык EXPRESS разрабатывался таким образом, чтобы обеспечить возможности структури­рования радзичных материалов, относящихся к стандартам серии ГОСТ Р ИСО 10303. В данномязыке EXPRESS-схема является основой дзя структурирования и взаимосвязи элементов пред­ ставления данных об изделии;- язык основан на определении объектов, представляющих формализованные описания мо­делируемых реальных объектов. Определение объекта дается через его свойства, которые характе­ризуются путем определения области их значений и ограничений, накладываемых на областьзначений;- при создании языка ставилась задача избежать, насколько это возможно, влияния особен­ностей реализации. Тем не менее, имеется возможность создания отображений реализации (такихкак статический файл обмена) как автоматически, гак и непосредственно.В языке EXPRESS объекты определяются через их атрибуты - особенности или характери­стики. имеющие важное значение дзя понимания и использования обз>ектов. Представление ат­рибутов может иметь простой тип данных (такой как целый) или являться другим объектом. Гео­ метрическая точка, например, определяется гремя действительными числами. Имена, которыеданы атрибутам, дополняют определение объекта. Так, для геометрической точки использующие­ся в ее определении три действительных числа имеют имена X. Y и Z. В языке устанавливаетсясвязь между определяемым объектом и атрибутами, которые его определяют, а также связь междуатрибутом и его представлением.П р и ме ча н и я.1 При разработке языка EXPRESS были использованы несколько языков, в частности, Ada, Algol, С,С**, Euler, Modula-2, Pascal. PL/I и SQL. В языке EXPRESS добавлены некоторые возможности, которыеделают язык более подходящим для задач описания информационной модели.2 В настоящем стандарте примеры текстов на языке EXPRESS нс соответствуют никакому конкретно­му стилю. Напротив, для того, чтобы сэкономить место зз показать гибкость языка, иногда используется не­ корректный стиль. Приведенные примеры нс отражают содержание информационных моделей, описанных вдругих стандартах серии ГОСТ Р ИСО 10303. Примеры создавались для ТОГО, чтобы показать конкретныеособенности языка EXPRESS. Необходимо игнорировать любые сходства между примерами, приведеннымив настоящем стандарте, и нормативными информационными моделями, содержащимися в других стандартахсерии ГОСТ Р ИСО 10303.3 Приложения А. В. С, D, Е и F являются обязательными и составляют неотъемлемую часть настоя­щего стандарте. Приложения G, Н и J являются справочными.4 В тексте настоящего стандарте объекты и конструкции языка EXPRESS в ряде случаев выделены по­лужирным шрифтом (например. filo_descript»on).VI
ГОСТ Р ИСО 10303-11-2000 Г О С У Д А Р С Т В Е Н Н Ы Й С Т А Н Д А Р Т Р О С С И Й С К О Й Ф Е Д Е Р А Ц И ИСистемы автоматизации производства и их интеграцияПРЕДСТАВЛЕНИЕ ДАННЫХ ОБ ИЗДЕЛИИ И ОБМЕН ЭТИМИ ДАННЫМИЧ а с т ь 11.Методы описания. Справочное руководство по языку EXPRESS Industrial automation systems and integration. Product data representation and exchange.Part 11. Dcscnption methods. The EXPRESS language reference manual Дата введения 2001—07—01 1 Область примененияВ настоящем стандарте определен язык, с помощью которого могут быть описаны аспектыданных об изделии. Данный язык называется EXPRESS.В стандарте также определено графическое представление для подмножества конструкций вязыке EXPRESS. Это графическое представление называется EXPRESS-G.В ГОСТ Р ИСО 10303-1 EXPRESS описан как язык определения данных. Данный язык со­стоит из элементов, которые позволяют однозначно определять данные и устанашшпать ограни­ чения на эти данные.Область применения настоящего стандарта охватывает:- типы данных; - ограничения на экземпляры типов данных.Область применения настоящего стандарта не охватывает:- определение форматов баз данных; - определение форматов файлов; - определение форматов передачи; - управление процессом; - обработку информации; - обработку особых ситуаций.Язык EXPRESS не является языком программирования. 2 Нормативные ссылкиВ настоящем стандарте использованы ссылки на следующие стандарты: ГОСТ Р ИСО 10303-1—99 Системы автоматизации производства и их интеграция. Пред­ставление данных об изделии и обмен этими данными. Часть I. Общие представления и осново­полагающие принципы.ИСО/МЭК 8К24-1—95' Информационная технология. Взаимосвязь открытых систем. Абст­рактная синтаксическая нотация версии один (АСН.1). Часть I. Требования к основной нотацииИСО/МЭК 10646-1—93’ Информационная технология. Универсальный многобайтный коди­рованный набор символов (UCS). Часть 1: Архитектура и основной многоязычный уровень3 О п р ед ел ен и я3.1 Термины, определенные в ГОСТ Р ИСО 10303-1В настоящем стандарте использованы следующие термины:- контекст; - данные; - язык определения данных; - информация.’ Оригинал стандарта ИСО/МЭК — во ВНИИКИ Госстандарта России. Издание официальноеI
ГОСТ I* ИСО 10303-11-20003.2 Термины, определенные в ИСО/М ЭК 10646-1- графический символ.П р и м е ч а н и е — Данное определение охватывает только те символы из ИСО/МЭК 10646-1, кото­рые имеют определенное визуальное представление; тем самым исключаются любые пустые илизаштрихованные ячейки.3.3 Другие определенияВ настоящем стандарте использованы следующие термины с соответствующими определе­ниями:3.3.1 тип данных сложного объекта (complex entity data type): Представление объекта. Типданных сложного объекта устанавливает область значений, определяемую общими атрибутами иограничениями допустимой комбинации типов данных объекта внутри конкретного графа под-тип/супертип.3.3.2 экземпляр сложного объекта (типа данных) (complex entity (data type) instance]: Обозна­ченный блок данных, который представляет блок информации внутри класса, определенногообъектом. Он принадлежит области значений, установленной типом данных сложного объекта.3.3.3 константа (constant): Обозначенный блок данных из определенной области значений.Значение этого блока данных не может быть изменено.3.3.4 тип данных (data type): Область значений. 3.3.5 объект (entity): Класс информации, определенный общими свойствами. 3.3.6 тип данных объекта (entity data type): Представление объекта. Тип данных объекта ус­танавливает область значений, определяемую общими атрибутами и ограничениями.3.3.7 экземпляр объекта (типа данных) (entity (data type) instance!: Обозначенный блок дан­ных, который представляет блок информации внутри класса, определенного объектом. Он при­надлежит области значений, установленной типом данных объекта.3.3.8 экземпляр (instance): Обозначенное значение. 3.3.9 частный тип данных сложного объекта (partial complex entity data type): Потенциальноепредставление объекта. Частный тип данных сложного объекта является группировкой типовданных объекта внутри графа подтип/супертип, которая может образовывать тип данных сложно­го объекта целиком или частично.3.3.10 частное значение сложного объекта (partial complex entity value): Значение частноготипа данных сложного объекта. Оно не имеет собственного смысла и должно комбинироваться сдругими частными значениями сложного объекта и обозначением для формирования экземплярасложного объекта.3.3.11 совокупность (population): Множество экземпляров типа данных объекта. 3.3.12 экземпляр простого объекта (типа данных) |simple entity (data type) instance!:Обозначенный блок данных, который представтяет блок информации внутри класса, определен­ного объектом. Входит в область значений, установленную единственным типом данных объекта.3.3.13 граф подтин/супертип (subtype/supertype graph): Объявленный набор типов данныхобъекта. Типы данных объекта, объявленные внутри графа подтип/супертип, связаны через вы­ражение подтипа. Граф подтип/супертип определяет один или несколько сложных типов данныхобъекта.3.3.14 лексема (token): Не подлежащий декомпозиции лексический элемент языка. 3.3.15 значение (value): Блок данных. 4 Требования соответствия4.1 Формальные спецификации, написанные на EXPRESS 4. 1. ( Л е к с и ч е с к и й я з ы к Формальная спецификация, написанная на EXPRESS, должна быть согласована с заданнымуровнем, как указано ниже. Формальная спецификация согласована с заданным уровнем, когдавсе проверки, установленные для этого уровня и всех нижних уровней, удовлетворены для этойспецификации.Уровни проверкиУровень I: проверка ссылок. Данный уровень состоит из проперки формальной специфика­ции. гарантирующей ее синтаксическую и ссылочную корректность. Формальная спецификациясинтаксически корректна, если она соответствует синтаксису, полученному расширением пер- 2
ГОСТ Р ИСО 10303-11-2000пичних синтаксических правил (синтаксиса), установленных п приложении Л. Формальная спе­ цификация корректна в отношении ссылок, если все ссылки на каждый элемент описания языкаEXPRESS соответствуют области применения и правилам видимости, установленным в разделах10 и II.Уровень 2: проверка типов. Данный уровень состоит из проверки формальной специфика­ции, гарантирующей ее соответствие следующему: - выражения должны удовлетворять правилам, установленным в разделе 12;* присваивания должны удовлетворять правилам, установленным в 13.3; - объявления инверсных атрибутов должны удовлетворять правилам, устано&пенным в 9.2.1.3;- переобъявления атрибутов должны удовлетворять правилам, установленным в 9.2.3.4.Уровень 3: проверка значения. Данный уровень состоит из проверки формальной специфи­кации. гарантирующей ее соответствие утверждениям вида «Л должно быть больше В», как уста­ новлено в разделах 7—16. Проверка справедлива для тех положений, в которых А и В могут бытьвыражены литералами и/или константами.Уровень 4: полная проверка. Данный уровень состоит из проверки формальной специфика­ции. гарантирующей ее соответствие всем формулировкам требований, установленным в настоя­щем стандарте.П р и м е р I — В настоящем стандарте установлено, что функция должна иметь операторвозврата («return») для каждой из возможных ветвей, по которым может пойти процесс после вы­зова данной функции. Это должно быть проверено.4.1.2 Г р а ф и ч е с к а я ф о р м аФормальная спецификация, написанная на EXPRESS-G, должна быть согласована с задан­ным уровнем, как указано ниже. Формальная спецификация согласована с заданным уровнем,когда все проверки, установленные для этого уровня и всех нижних уровней, удовлетворены дляэтой спецификации.Уровни проверки Уровень 1: проверка символов и области применения. Данный уровень состоит из проверкиформальной спецификации, гарантирующей ее соответствие как требованиям к уровню объекта,так и требованиям к уровню схемы, как определено в D.5 и D.6. Это охватывает проверку того,что в формальной спецификации символы используются в соответствии с D .2—D.4. Формальнаяспецификация также должна быть проверена на соответствие страничных ссылок и персобъяв-ленных атрибутов требованиям D.4.I и D.5.5.Уровень 2: полная проверка. Данный уровень состоит из проверки формальной специфика­ции для установления тех мест, которые не соответствуют требованиям к полному уровню объек­та или полному уровню схемы, определенным в приложении D. и требованиям, установленным вразделах 7—16.4.2 Реализации EXPRESS 4.2.1 С и н т а к с и ч е с к и й а н а л и з а т о р я з ы к а E X P R E S SРеализация синтаксического анализатора языка EXPRESS должна выполнять синтаксиче­ский разбор любой формальной спецификации, написанной на EXPRESS, в соответствии с огра­ничениями, установленными в приложении Е и связанными с этой реализацией. Синтаксическийанализатор языка EXPRESS будет считаться соответствующим конкретному уровню проверки(как установлено в 4.1.1), если он может применять псе проверки, требуемые для данного уровня(и любых нижележащих уровней), к формальной спецификации, написанной на EXPRESS.Разработчик синтаксического анализатора языка EXPRESS должен установить любые огра­ничения, которые реализация накладывает на число и длину идентификаторов, на диапазон об­ рабатываемых чисел и на максимальную точность действительных чисел. Такие ограничениядолжны быть документально оформлены в виде, установленном в приложении Е. с целью прове­ дения аттестационного тестирования.4.2.2 С р е д с т в о г р а ф и ч е с к о г о р е д а к т и р о в а н и яРеализация редактора EXPRESS-G должна обеспечивать возможности создания и отображе­ния формальных спецификаций па EXPRESS-G, в соответствии с ограничениями, установлен­ ными в приложении Е и связанными с этой реализацией. Редактор EXPRESS-G будет считатьсясоответствующим конкретному уровню проверки, если он может создавать и отображать фор­мальные спецификации на EXPRESS-G, которые соответствуют указанному уровню проверки (илюбому нижележащему уровню).3
ГОСТ Г ИСО 10303-11-2000Разработчик редактора EXPRESS-G должен установить любые ограничения, которые реали­зация накладывает на число и длину идентификаторов, на число доступных символов на страни­цу модели и на максимальное число страниц. Такие ограничения должны быть документальнооформлены в виде, установленном в приложении Е, с целью проведения аттестационного тести­рования. 5 Фундаментальные принципыПредполагается, что читатели настоящего стандарта знакомы с нижеуказанными концеп­циями.Схема, написанная на языке EXPRESS, описывает набор условий, которые устанавливаютобласть ее определения. Экземпляры могут быть оценены для определения их принадлежности кданной области значений. Если экземпляры отвечают всем условиям, тогда они объявляютсяпринадлежащими к данной области. Если экземпляры противоречат любому из условий, тогдаони нарушают условия и поэтому не принадлежат данной области. В случае, когда экземпляры неимеют значений для необязательных атрибутов, а некоторые условия содержат в себе эти необя­зательные атрибуты, то не всегда возможно определить, отвечают ли экземпляры всем условиям.В таком случае считается, что экземпляры входят в данную область.Многим элементам языка EXPRESS присвоены имена. Имя позволяет другим элементамязыка ссылаться на связанное с этих» именем представление. Использование имени в определе­нии других элементов языка вводит в силу ссылку на исходное предстаатенне. Так как синтаксисязыка использует идентификатор для имени, то исходное представление должно быть исследова­но для понимания его структуры.Определение типа данных объекта в языке EXPRESS описывает область его значений.Предполагается, что отдельные элементы области различаются некоторыми связанными с нимиуникальными идентификаторами. В EXPRESS не установлены содержание или представлениеэтих идентификаторов.Объявление постоянного экземпляра объекта определяет идентифицируемый элемент облас­ти, описанной типом данных объекта. Такие экземпляры объектов не будут изменены или унич­ тожены операциями, выполняемыми в дайной области.Процедурные описания ограничений в EXPRESS могут объявлять или делать ссылки на д о­полнительные экземпляры объекта как на локальные переменные, которые, как предполагается,будут временными идентифицируемыми элементами области. Данные процедурные описания мо­гут изменять эти дополнительные экземпляры объекта, но не могут изменять постоянные эле­менты данной области. Эти временные элементы области доступны только в пределах действияпроцедурного описания, в котором они объявлены, и прекращают существование за пределамиэтого описания.Язык EXPRESS не описывает среду реализации. В частности EXPRESS не определяет:- как разрешены ссылки на имена: - какие другие схемы известны; - как и когда проверяются ограничения; - что должна делать реатизация. если ограничение не удовлетворено: - имеют или нет право на существование в реализации экземпляры, которые не соответст­вуют EXPRESS-схеме;- как и где в реализации создаются, изменяются и удатяются экземпляры. 6 Синтаксис определения языкаВ настоящем разделе определена нотация, используемая для представления синтаксиса язы­ка EXPRESS. Полный синтаксис для языка EXPRESS приведен в приложении Л. Части этих син­таксических правил воспроизведены в различных разделах настоящего стандарта для иллюстра­ции синтаксиса конкретного оператора. Эти части не всегда полны. Поэтому иногда необходиморуководствоваться приложением А для недостающих в данном примере правил. Части синтаксисав тексте настоящего стандарта представлены в рамке. Каждое правило внутри синтаксическойрамки слева имеет уникальный номер для использования его в перекрестных ссылках на другиесинтаксические правила.4
ГОСТ Р ИСО 10303-11-20006.1 Синтаксис спецификацииСинтаксис EXPRESS определен как производная от Синтаксической Нотации Вирта (СНВ).П р и м е ч а й и с — См. ссылку в приложении J |3).Соглашение по нотации и самооп ределе иная СНВ приведены ниже. syntax= { production } .production = identifierexpression V .expression = tenn | '|' term } .term= factor { factor ) .factor= identifier | literal | group | option | repetition .identifier = character { character } . literal=character { character }.group= '(' expression ')* -option= 'I' expression j* .repetition = *{' expression '}* . - Знак равенства '= ' указывает логическое заключение. Элемент слева от знака определяет­ся комбинацией элементов справа. Любые пробелы, появляющиеся между элементами логическо­го заключения, не входящие в пределы литерала, не имеют значения. Логическое заключение за­ вершается точкой 'Л- Использование идентификатора внутри коэффициента означает нетерминальный символ,который появляется слева от другого логического заключения. Идентификатор состоит из букв,цифр и символа подчеркивания. Ключевые слова языка предстаазяются логическими заключе­ ниями. идентификаторы которых состоят только из заглавных букв.-Литерал используется для обозначения терминального символа, который не может бытьрасширен далее. Литерал является последовательностью любых символов, заключенной в апост­ рофы. Символ, в данном случае, может быть любым символом, определенным по ИСО/МЭК10646-1 в позициях 21-7Е группы 00, плоскости 00. сгроки 00. Чтобы апостроф был включен влитерал, он должен быть записан дважды.Семантика скобок определена ниже:- фигурные скобки '{}’ указывают нулевое или большее количество повторений; - квадратные скобки ' | | ' указывают необязательные параметры; - круглые скобки '()' указывают, что группа логических заключений, включенных в круглыескобки, должна быть использована как единое логическое заключение;- вертикальная линия 'Г указывает, что в выражении должен быть выбран только один эле­мент.П р и м е р 2 — Синтаксис для строкового типа:Синтаксис:293 string type = STRING ( width_spec | .318 width_spec = ’(' width ')' | FIXED | . 317 width = nuineric_expression .Полное определение синтаксиса (приложение А) содержит определения для STRING,numeric_expression и FIXED.П р и м е р 3 — Учитывая синтаксис, данный в примере 2, возможны следующие вариа!гты:a) string b) string (22) c) string (19) fixedПравило для numeric_expression яачяется сложным и позволяет описать много других вари­антов.6.2 Специальная символьная нотация Следующая нотация используется для представления целых символьных наборов и некото­рых специальных символов, которые сложно отобразить:- \ а — представляет символы в позициях 21-7Е строки 00, плоскости 00, группы 00ИСО/МЭК 10646-1;- \ п — представляет символ «новая строка (newline)* (системно зависимый) (см. 7.1.5.2); - \ q — символ кавычки (апострофа) С ) и содержится внутри \а; - \s — символ пробела; - \х 8 , \х9, \хА. \хВ, \хС , \x D — предстаачяет символы в позициях 8—13 строки 00. плоско­сти 00, группы 00 ИСО/МЭК 10646-1.5
ГОСТ I* ИСО 10303-11-2000 7 Основные элементы языкаВ настоящем разделе определены основные элементы, из которых составляется EXPRESS-схема: набор символов, комментарии, знаки, зарезервированные слова, идентификаторы и лите­ралы.Основные элементы языка компонуются в текст, разделяемый обычно на физические стро­ки. Физическая строка является любым числом (включая нулевое) символов, заканчивающимсясимволом «новая строка* (см. 7.1.5.2).П р и м е ч а н и е — Схема более удобна для «пения, когда операторы разделены на строки, а для ком­поновки различных конструкций используется пробел (whitespace).П р и м е р 4 - Следующие записи эквивалентны:entity point; х, v, z:real; end entity;ENTITY point;x, У, z : REAL;END_ENTITY:7.1 Набор символовВ схемах, написанных на языке EXPRESS, должны использоваться только символы из сле­дующего набора: символы, расположенные в 08—0D. графические символы, лежащие в диапазоне20—7Е из ИСО/МЭК 10646-1. а также специальный символ \п , означающий новую строку. Дан­ ный набор называется набором символов EXPRESS. Элемент этого набора ссылается на позиннюсоответствующего стандарта, в которой расположен данный символ; номера этих позиций опре­делены в шестнадцатеричной системе. Печатаемые символы данного набора (позиции 21—7Е изИСО/МЭК 10646-1) объединяются для фюрмнровання лексем языка EXPRESS. ЛексемамиEXPRESS являются ключевые слова, идентификаторы, знаки или литералы. Дальнейшая класси­фикация набора символов EXPRESS приведена ниже.Данный набор символов определен как абстрактный набор символов: он не зависит от егопредставления в реализации.П р и м е ч а н и е — В ИСО/МЭК 6429 (см. 111 из приложения J) установлены семантики символов по­зиций 08—0D из ИСО/МЭК 10646-1. В настоящем стандарте нс требуются семантики, установленные вИСО/МЭК 6429.7.1.1 Ц и ф р ыВ EXPRESS используются арабские цифры 0—9 (позиции 30—39 из набора символовEXPRESS).____________________________________________________________________________________ Синтаксис:120 digit = *0* | I' р 2 ’ | ^ | *4' [ '5' | '6' | '7' \ 'X' \ '9' .____________________________________7.1.2 Б у к в ыВ EXPRESS используются строчные и прописные буквы английского алфавита (позиции4 1 - 5 А и 61—7А набора символов EXPRESS). Регистр букв имеет значение только в явных стро­ковых литералах.П р и м е ч а н и е — Текст на языке EXPRESS может быть написан с использованием верхних, нижнихили смешанных регистров (заглавных, строчных или и тех и других букв — см. пример 4).Синтаксис: 124 letter = ’а ’ | ' Ь ’ | ’с ' | ' d ' | ’е' | Т | ' g ' | ' h ' | Т | ' j ' | ' к ' | * 1' | “т ‘ | 'п* | *о' |7.1.3. С п е ц и а л ь н ы е с и м в о л ы Специальные символы (выводимые на печать символы, которые не являются ни буквами,ни цифрами) используются главным образом для пунктуации и в качестве операторов. Специаль­ ные символы соответствуют позициям 21—2F. ЗА—3F. 40. 5В— 5Е, 60 и 7В—7Е набора символовEXPRESS. 6
ГОСТ Р ИСО 10303-11-2000Синтаксис:134 special - not_paren_star,quote_special | ( | ) 1'* | **" .128 not_paren_star_quote_special = '!'| '# ' | 'S' | '%' || '+* ||V | 7 T : T ; T < T = T > 4, e , m, vm,AT. T‘ , iTT I T I7.1.4 Г1 о л ч е р к и и а и и еСимвол подчеркивания— ячейка 5F набора символов EXPRESS) может использоватьсяв идентификаторах и ключевых словах, за исключением использования его в качестве первогосимвола.7.1.5 Г1 р о б е лПробел (whitespace) определен 7.1.5.1—7.1.5.3 и 7.1.6. Пробел должен использоваться дляразделения лексем в EXPRESS-схемах.П р и м е ч а н и е — Свободное и последовательное использование пробела может улучшить структуруи удобочитаемость схемы.7.1.5.1 Символ пробелаОдин или несколько пробелов (позиция 20 из набора символов EXPRESS) могут распола­гаться между двумя лексемами. Нотация '\s ' может быть использована для представления симво­ла пробела в синтаксисе языка.7.1.5.2 Новая строкаСимвол «-новая строка (newline)» отмечает физическое окончание строки внутри формальнойспецификации, записанной на языке EXPRESS. Обычно новая строка трактуется как пробел, но су­ществует разница между завершением заключительного комментария и неправильным окончаниемстрокового литерала. В синтаксисе языка символ ноюи строки представляется нотацией \п.Конкретное представтение повой строки определяется спецификой реализации.7.1.5.3 Другие символыСимволы из позиций 08—0D должны рассматриваться как пробел (whitespace), кроме случаев,когда они встречаются внутри строкового литерала. Ятя представления этих символов в синтаксисеязыка должна быть использована нотация \хп, где п является одним из символов: 8, 9. А, В. С и D.7.1.6. К о м м е н т а р и иКомментарий используется при документировании описания и должен быть интерпретиро­ван синтаксическим анализатором языка EXPRESS как пробел (whitespace). Существует два видакомментариев: вложенный и заключительный.7.1.6.1 Вложенный комментарийПара символов '(*’ обозначает начало вложенного комментария, а пара символов '*)' обо­значает его окончание. Вложенный комментарий может располагаться между двумя любыми лек­семами.Синтаксис:142 embedded remark = '(* ’ { not_lparen_star | Iparen_not_star | star_not_rparen |embedded_renuirk } ' * ) ' •126 not_lparen_star = not_paren_star Г ) ' .127 not paren. star = letter | digit | not„paren_star_special.124 letter = V | *b" | 'c' | d ' | V | T | 'g' | 'h ‘ | T | T | 'k* | ’ Г |m ’ | *n' | o' I p’ | V | V | 's’ | V | V | V | *w* | 'x' |V I ' z ‘ -120 digit = 'O' | 'Г | '2' | '3' | '4- | '5 ‘ | '6' | '7' | '8' | '9' . 129 not paren_.star .special = not_paren_star_quote_special | " " . 128 not_paren_star_quoie_special =f *“* | *#' | 'S' | '%' \ '| '+* ||125 lparen_not_star = '( ' not_star. 132 not_star = not_paren_star | '(' | ')' .135 star_not_rparen =not_rparen .131 not rparen = not_paren_.star | '• ' | *(’ .7
ГОСТ Р ИСО 10303-11-2000Любой символ из набора символов EXPRESS может быть вставлен между началом и концомвложенного комментария, включая символ «новая строка (newline)», поэтому вложенные коммен­тарии могут охватывать несколько физических строк.Вложенные комментарии могут вкладываться друг в друга.П р и м е ч а н и е — При вложении комментариев необходимо обращать большое внимание на согласо­вание пар символов.П р и м е р 5 — Пример вложенных комментариев.<• Символ '(*' начинает комментарий, а символ ' • ) “ его заканчивает •).7.1.6.2 Замючительпый комментарийЗаключительный комментарий записывается в конце физической строки. Два последова­тельных дефиса‘ начинают заключительный комментарий, а первый встреченный символ«новая строка* заканчивает его.Синтаксис:144 tail_remark - '-{ \а | \s | \.\8 | \х9 | \хА | \хВ | \хС | \ х Р } \п .П р и м е р 6 ------Этот текст является комментарием, который заканчивается символом «но­вая строка (newline)».7.2Зарезервированные словаЗарезервированными словами языка EXPRESS являются ключевые слова, а также именавстроенных констант, функций и процедур. Зарезервированные слова не должны использоватьсяв качестве идентификаторов. Зарезервированные слова языка EXPRESS описаны ниже.7.2.1 К л ю ч е в ы е с л о в аКлючевые слова языка EXPRESS показаны в таблице 1.П р и м е ч а н и я1 Ключевые слова представляются литералом, состоящим из символов заглавных букв (верхнего реги­стр*!). Это облегчает чтение синтаксических конструкций.2 Ключевые слова CONTEXT (КОНТЕКСТ), END_CONTEXT (КОНЕЦ_КОНТЕКСТА). MODEL(МОДЕЛЬ) и END_MODEL (КОНЕЦ_МОДЕЛИ) зарезервированы для использования в последующих ре­дакциях настоящего стандарта.Та б л и и а I — Ключевые слова язык*! EXPRESSABSTRACTAGGREGATEALIASARRAYASBAGBEGINBINARYBOOLEANBYCASECONSTANTCONTEXTDERIVEELSEENDEND_ALIASEND_CASEEND_CONSTANTEND_CONTEXTEND.ENTITYEND_ FUNCTIONENDJFEND_LOCALEND_MODELEND_PROCEDUREEND.REPEATEND_RULEEND.SCHEMAEND_TYPEENTITYENUMERATIONESCAPEFIXEDFORFROMFUNCTIONGENERICIFINTEGERINVERSELISTLOCALLOGICALMODELNUMBEROFON EOFOPTIONALOTHERWISEPROCEDUREQUERYREALREFERENCEREPEATRETURNRULESCHEMASELECTSETSKIPSTRINGSUBTYPESUPERTYPETHENTOTYPEUNIQUEUNTILUSEVARWHEREWHILE8
ГОСТ Р ИСО 10303-11-20007.2.2 З а р е з е р в и р о в а н н ы е с л о в а - о п е р а т о р ы Операторы, определенные зарезервированными словами, приведены в таблице 2. Определе­ния этих операторов см. в разделе 12.Т а б л и н а 2 — Зарезервированные слова EXPRESS-опсраторыANDAN DORDIVINLIKEMODNOTORXOR7.2.3 В с т р о е н н ы е к о н с т а н т ыИмена встроенных констант приведены в таблице 3. Определения этих констант см. в раз­деле 14.Т а б л и ц а 3 — Зарезервированные слова EXPRESS-комсганты0SELFCONST_EPIFALSETRUEUNKNOWN7.2.4 В с т р о е и н ы е ф у н к ц и иИмена встроенных функций приведены в таблице 4. Определения этих функций см. в раз­деле 15.Т а б л и ц а 4 — Зарезервированные стона EXPRESS-имена функцийABSACOSASINATANBLENGTHCOSEXISTSEXPFORMATIII BOUNDHIINDEXLENGTHLOBOUNDLOGLOG 2LOG 10LOINDEXNVLODDROLESOFSINSIZEOFSQRTTANTYPEOFIJSEDINVALUEVALUEJNVALUE_UNIQLE7.2.5 В с т р о е н и ые п р о ц е д у р ыИмена встроенных процедур приведены в таблице 5. Определения этих процедур см. в раз­деле 16.Т а б л и ц а 5 — Зарезервированные слова EXPRESS—имена процедур|INSERT|REMOVE|7.3 Знаки (symbols) Знаки являются специальными символами или группами специальных символов, которыеимеют специальное значение в языке EXPRESS. Знаки используются в языке EXPRESS как раз­делители и операторы. Разделитель используется для начала, выделения или окончания смежныхлексических или синтаксических элементов. Интерпретация этих элементов была бы невозможнабез разделителей. Операторы обозначают, что функции должны выполняться па операндах, кото­рые связаны с оператором, описания этих операторов см. в разделе 12. EXPRESS-знакн приведе­ ны в таблице 6.Т а б л и ц а 6 — EXPRES-знакиt+-%*\t<>11(»c()<=<>> -<*II■*-<■*>*<>'9
ГОСТ I* ИСО 10303-11-20007.4 ИдештификаторыИдентификаторы являются именами, заданными элементам, объявленным в схеме (см. 9.3).включая саму схему. Идентификатор не должен был, таким же, как зарезервированное словоязыка EXPRESS.Синтаксис:140 sim pleJd = letter { letter | digit |}■124 letter = ‘а’’b' | V | d ' | VI T | ' g ' | ' h ' | T• j ' l ' k ' l ' l ' l’ n ’ | 'o' | p' | 'q' 1 T ’ | 's' | ' t 'v'v' I 'w' 1 'x' 1'У*120 digit = 'O' | ' Г | *2' | '3' | ’4 ‘ | • 5 ' | ' 6 ' | ' 7 ''8'' 9 ' .Первый символ идентификатора должен быть буквой. Остальные символы, при их наличии,могут являться любой комбинацией букв, цифр и символа «подчеркивание®.Разработчик синтаксического анализатора языка EXPRESS, в соответствии с приложениемЕ. должен определить максимальное число символов идентификатора, которое может распозна­ваться данной реализацией.7.5 ЛитералыЛитерал имеет самооп ределе иное постоянное значение. Тип литерала зависит от компози­ции символов, формирующих лексему. Литерал может иметь один из следующих типов: двоич­ный, целочисленный, действительный, строковый и логический.Синтаксис:238 literal =* binary „literal | integerjiteral | logical Jiteral | real Jiteral |____________stringjiteral ._____________________________________________________________________7.5.1 Д в о и ч н ы й л и т е р а лДвоичный литерал представляет значение двоичного типа данных и состоит из знака %, закоторым следует один или более битов (1 или 0).Синтаксис:136 binary literal = '%' bit { bit } .119 bit = 'O' | ' Г .___________________________________________________________________________Разработчик синтаксического анализатора языка EXPRESS, в соотвезсгвии с приложением Е,должен определить максимальное число битов в двоичном литерале, которое может распозна­ваться данной реализацией.П р и м е р 7 — Правильный двоичный литерал.&0I01001100 7.5.2 Ц е л о ч и с л е н н ы й л и т е р а лЦелочисленный литерал представляет собой значение целого типа данных, состоящее изодной или более цифр.Синтаксис:138 integerjiteral = digits .121 digits = digit | digit ) .120 digit = ’(Г | ' ! ' 1 *2' | '3' \ '4' | '5' \ 6' \ '7' \ '8' \ '9' .____________________________________П р и м е ч а н и е — Знак целочисленного литерала нс используется в синтаксисе, так как EXPRESSиспользует концепцию унарных операторов внутри синтаксиса выражения.Разработчик синтаксического анализатора языка EXPRESS, в соответствии с приложением Е.должен определить максимальное значение целого для целочисленного литерала, которое можетраспознаваться данной реализацией.П р и м е р 8 — Допустимые целочисленные литералы4016387. 5. 3Д е й с т в и т е л ь н ы й л и т е р а лДействительный литерал представляет собой значение действительного типа данных, с о ­стоящее из мантиссы и необязательного показателя экспоненты; мантисса должна включать деся­ тичную точку.10
ГОСТ Р ИСО 10303-11-2000Синтаксис:139 realJiteral = digits V | digits |v| sign | digits | .121 digits = digit { digit ) . 120 digit = 'O' I T | *2' | '3' | '4'’5'2X6 sign = ’+* I.П р и м е ч а н и е — Знак действительного литерала нс смоделирован в пределах синтаксиса, так какEXPRESS использует концепцию унарных операторов внутри синтаксиса выражения.Разработчик синтаксического анализатора языка EXPRESS, и соответствии с приложениемЕ. должен определить максимальную точность и максимальный показатель экспоненты действи­тельного литерала, которые могут распознаваться данной реализацией.П р и м е р ы9 — Допустимые действительные литералы1.Е6«Е* может быть записано как строчной, так и прописной буквой3.5е-5359.6210 — Недопустимые действительные литералы.001По крайней мере одна цифра должна предшествовать десятичной точке,le i0Десятичная точка должна быть частью литерала.I. еЮ Пробел не является частью действительного литерала.7. 5. 4С т р о к о в ы й л и т е р а л Строковый литерал представляет собой значение строкового типа данных. Существуют двеформы строкового литерала: простой и кодированный. Простой строковый литерал состоит изпоследовательности символов из набора символов EXPRESS (см. 7.1), заключенной в апострофы( '). Апостроф внутри простого строкового литерала представляется двумя последовательнымиапострофами. Кодированный строковый литерал состоит из чстырехоктетного кодированногопредставления каждого символа из последовательности символов ИСО/МЭК 10646-1. заключен­ ного в кавычки ("). Кодирование определяется следующим образом:- первый октет = группа ИСО/МЭК 10646-1. в которой определен символ; - второй октет = плоскость ИСО/М ЭК 10646-1, в которой определен символ: - третий октет = строка ИСО/МЭК 10646-1, в которой определен символ: - четвертый октет = ячейка ИСО/МЭК 10646-1, в которой определен символ.Последовательность октетов должна определять один из символов по ИСО/МЭК 10646-1.Строковый литерал строки никогда не должен выходить за границу физической строки; тоесть символ «новая строка* не должен встречаться между апострофами, в которые заключенстроковый литерал.Разработчик синтаксического анализатора языка EXPRESS, в соответствии с приложениемЕ. должен определить максимальное число символов простого строкового литерала, которое мо­жет распознаваться данной реализацией.Синтаксис:292 string Jiteral = simple_string Jiteral | encoded .string Jiteral .141 simple string literal = \q { ( \q \q ) | not quote | \s | \xX | \x9\xA | \xB| \ x C | \ x D } \ q .130 not^quote = not paren_star quote__specia! | letter | digit | '(' | Т Г - . 128 not paren star quote special = T ||| ’ S' | '%' \I ’+ ’ I V 1I V I T | V I T г < * Г = ' ! ' > ■ |Т Г ® Т П ’\ Т 1 Т Я , 1Т 1 Т Г Г Г - .124 letter = V | 'b' | 'c' | *d' | V | T | 'g' | 'h' | T | *j’ | *k' | T |'m* I *n' | 'o' I p' I 'q' I ’г* I 's' 1 't' 1 ’u' 1 'v' 1 *w' 1 V I У 1 v.120 digit = 'O' Г l' | ' 2 ' | '3' | '4' | '5' | '6' | '7' | '8' | '9' . 137 encoded „string Jiteral =encoded character { encoded character).122 ei3Coded_character = octet octet octet octet . 133 octet = hex_digit hex digit . 123 hex_digit = digit | 'a'- ) 'b' | 'c' | ' d ' | 'e' | T .II
ГОСТ Р ИСО 10303-11-2000Разработчик синтаксического анализатора языка EXPRESS, в соответствии с приложениемЕ, должен также определить максимальное число октетов (которое должно быть кратно четырем)кодированного строкового литерала, которое может распознаваться данной реализацией.П р и м е р ы11 — Допустимые простые строковые литералыРебенку нужна новая пара обуви!'Читается как: ...Ребенку нужна новая пара обуви!‘ Ed' 's Computer Store'Читается как: ...Ed's Computer Store12 — Недопустимые простые строковые литералыEd's Computer Store'Всегда должно быть четное число апострофов. 1 E d "s ComputerStore'Выходит за границы физической строки13 — Допустимые кодированные строковые литералы4100000041*Читается Л«ООООООС5*Читается А«0000795Е00006238» Это японские иероглифы в нотации Кобе14 - Недопустимые кодированные строковые литералы«000041* Октеты должны быть сгруппированы по четыре«00000041 ООООООС5*Между «» разрешены только шестнадцатеричные символы.7. 5. 5Л о г и ч е с к и й л и т е р а лЛогический литерал представляет собой значение логических или булевых типов данных иявляется одной из встроенных констант TRUE, FALSE или UNKNOWN.П р и м е ч а н и е — UNKNOWN не совместим с булевым типом данных.Синтаксис:242 logical_literal = FALS | TRUE | UNKNOWN . 8 Типы данныхВ настоящем разделе предстаазены типы данных как часть языка. Каждый атрибут, локаль­ная переменная или формальный параметр имеет связанный с ними тип данных.Типы данных подразделяются на простые, сборные (агрегатные), поименованные, создан­ные и обобщенные. Также типы данных подразделяются в соответствии с их использованием наосновные, параметрические и исходные. Взаимоотношения между двумя этими классификациямиописаны в 8.6.Операции, которые могут быть выполнены над значениями этих типов данных, определеныв разделе 12.8.1 Простые типы данныхПростые типы данных определяют области элементарных единиц данных в EXPRESS. Тоесть они не могут быть далее декомпозированы на элементы, которые распознает EXPRESS.Простыми типами данных являются: NUMBER (ЧИСЛОВОЙ). REAL (ДЕЙСТВИТЕЛЬНЫЙ),INTEGER ( ЦЕЛОЧИСЛЕННЫЙ) , STRING(СТРОКОВЫЙ),BOOLEAN(БУЛЕВСКИЙ).LOGICAL ( ЛОГИЧЕСКИЙ) И BINARY ( ДВОИЧНЫЙ).8.1.1 Ч и с л о в о й т и п д а н н ы х Областью значений числового ( NUMBER) типа данных являются все числовые значения вязыке. Числовой тип данных должен использоваться, когда не имеет значения более определен­ное числовое представление. 12
ГОСТ Р ИСО 10303-11-2000Синтаксис:248 numhcrjype = NUMBER ._______________________________________________________________П р и м е р 15 — Так как мы можем не знать контекста размера (size), мы не знаем, какимтипом данных его представить, например размер толпы на футболе представляет собой целоечисло, тогда как площадь области подачи — действительное.size : NUMBER ;П р и м е ч а н и е — В последующих редакциях настоящего стандарта может быть проведена дальней­шая специализация числового типа данных, например комплексные числа.8.1.2 Д е й с т в и т е л ь н ы й т и п д а н н ы хОбластью значений действительного (REAL) типа данных являются все рациональные, ир­рациональные и действительные научные числа. Данный тип яаляется конкретизацией числовоготипа данных.Синтаксис:265 геаМуре = REAL | *(' precision, spec ')' I - 255 piecision_spec = numeric_expression .Рациональные и иррациональные числа имеют бесконечное представление и точность. На­учные числа представляют физические единицы, которые известны лишь с определенной точно­ стью. Объект precislon_spec устанавливается в границах значащих цифр.Литерал действительного числа представляется мантиссой и необязательным показателемэкспоненты. Число цифр, составляющих мантиссу, не считая нулей, стоящих впереди первойзначащей цифры до десятичной точки, является числом значащих цифр. Известная точность зна­чения является числом первых цифр, которые необходимы для конкретного приложения.Правила и ограничения:a)Объект precision_spec задает минимальное число требуемых цифр представления дейст­вительного числа. Это выражение должно иметь целое положительное значение.b)Когда представление не определено, точность действительного числа не ограничена.8.1.3 Ц е л о ч и с л е н н ы й т и п д а н н ы хОбластью значений целочисленного (INTEGER) типа данных являются осе целые числа.Данный тип является конкретизацией действительного типа данных.Синтаксис:227 integer_type = INTEGER .П р и м е р 16 — В данном примере целочисленный тип данных используется для представ­ления атрибута, названного nodes. Областью значений данного атрибута являются все целые чис­ла без дальнейших ограничений.ENTITY foo:nodes : INTEGER;END ENTITY;8. 1. 4Л о г и ч е с к и й т и п д а н н ы хОбластью значений логического (LOGICAL) типа данных являются три литерала: TRUE,FALSE и UNKNOWN. ________________________________________________________________________Синтаксис:243 logical..type = LOGICAL .________________________________________________________________Для значений логического типа данных установлен следующий порядок: FALSE << UNKNOWN < TRUE. Логический тип данных совместим с булевским типом данных, за ис­ключением того, что булевской переменной не может быть присвоено значение UNKNOWN.8.1.5 Б у л е в с к и й т и п д а н н ы хОбластью значений булевского (BOOLEAN) типа данных являются два литерала: TRUE иFALSE. Булевский тип данных является конкретизацией логического типа данных.Синтаксис:173 boolean_type = BOOLEAN .
ГОСТ I* ИСО 10303-11-2000Для значений булевского типа данных установлен тот же порядок, что и для значений логи­ческого типа данных: FALSE < TRUE.П р и м е р 17 — В этом примере, атрибут, названный planar, представлен булевским типомданных. Значением для planar, связанным с экземпляром surface, может быть TRUE или FALSE.ENTITY surface;planar: BOOLEAN;E N D , ENTITY;8.1.6 С т р о к о в ы й т и п д а н н ы хОбластью значений строкового типа данных являются последовательности символов. Символа­ми, допустимыми в строковых значениях, являются символы из ИСО/МЭК 10646-1, расположенныев позициях 08—0D, и графические символы, лежащие в диапазонах 20—7Е и АО— I0FFFE.Синтаксис:293 string type = STRING | width_spec | .318 w idtlfspec =width ')* | FIXED | .317 width = numeric_expression .Строковый тип данных может иметь как фиксированную, так и переменную ширину (числосимволов). Если специально не установлено, что имеется фиксированная ширина (используя за­резервированное слово FIXED в определении), то строка имеет переменную ширину.Областью значений строкового типа данных с фиксированной шириной является набор всехпоследовательностей символов с шириной, точно указанной в определении типа.Областью значений строкового типа данных с переменной шириной является набор всехпоследовательностей символов с шириной не большей максимальной ширины, указанной в оп­ ределении.Если ширина не указана, то областью значений будет набор всех последовательностей сим­волов без ограничений по ширине этих последовательностей.Подстрочные и отдельные символы могут быть адресованы, используя подстрочные индек­сы. как описано в 12.5. Имеет значение регистр букв (верхний или нижний) в пределах строки.Правила и ограничения Выражение ширины должно иметь целое положительное значение.П р и м е р ы18 - Следующее выражение определяет строку переменной дайны, значения которой неимеют определенной максимальной длины.stringI : STRING;19 — Следующее выражение определяет строку, имеющую длину максимум десять симво­лов, значения которой могут измениться по фактической длине от нуля до десяти символов.string2 : STR1NGG0);20 — Следующее выражение определяет строку, имеющую длину точно десять символов,значения которой должны содержать десять символов.string3 : STRING! 10) FIXED:8.1.7 Д в о и ч н ы й т и п д а н н ы хОбластью значений двоичного (BINARY) типа данных являются последовательности битов,а каждый бит представляется 0 или 1.Синтаксис:172 binary type = BINARY | width spec | .318 w id th jp ec = '( ' width ')' | FIXED | .317 width = niimeric_expression ,______________________________________________________________Двоичный тип данных может иметь как фиксированную, так и переменную ширину (числобитов). Если специально не определено, что ширина фиксирована (используя зарезервированноеслово FIXED в определении), то двоичный тип данных имеет переменную ширину.Областью значений двоичного типа данных с фиксированной шириной является набор всехпоследовательностей битов с шириной, точно установленной в определении типа.14
ГОСТ Р ИСО 10303-11-2000Областью значений двоичного типа данных с переменной шириной является набор всех по­следовательностей битов с шириной, меньшей или равной максимальной ширине, указанной вопределении типа. Если ширина не определена, то областью значений является набор всех по­ следовательностей битов, без ограничения по ширине этих последовательностей.Подстроки и отдельные биты могут быть адресованы, используя подстрочные индексы, какописано в 12.3.Правила и ограничения Выражение ширины должно иметь целое положительное значение.П р и м е р 21 — Следующее выражение может быть использовано для представления ин­формации о шрифте символа.ENTITY character;representation : ARRAY |I:2<)| OF BINARY (8) FIXED;END_ENTITY;8.2 Агрегатные (сборные) типы данных Областями значений сборных (агрегатных) типов данных являются множества значений за­данного основного типа данных (см. 8.6.1). Эти значения основного типа данных называютсяэлементами сборного (агрегатного) множества. В EXPRESS устаноатено определение четырех ви­дов сборных типов данных: ARRAY (МАССИВ). LIST (СПИСОК), BAG (МУЛЬТИМНОЖЕСТ­ВО) и SET (НАБОР). Каждый вид сборного ш ла данных приписывает различные свойства длясвоих значений.Тип ARRAY яатяется упорядоченным множеством фиксированного размера. Оно проиндек­сировано последовательностью целых чисел.П р и м е р 22 — Матрица преобразований (в геометрии) может быть определена как массивмассивов (чисел).Тип LIST является последовательностью элементов, к которым можно обращаться согласноих позиции. Число элементов в списке может изменяться и быть ограничено исходя из определе­ния типа данных.П р и м е р 23 — В виде списка могут быть представлены операции плана процесса. Опера­ции упорядочены и могут быть добавлены или удалены из плана процесса.Тип BAG является неупорядоченным множеством, в котором разрешены повторяющиесяэлементы. Число элементов в мультимножестве может изменяться и быть ограничено исходя изопределения типа данных.П р и м е р 24 — Множество крепежных деталей, используемых при сборке, может бытьпредставлено как мультимножество. В состав его элементов может входить некоторое число оди­ наковых болтов, но неважно, который из них используется в конкретном отверстии.Тип SET яатяется неупорядоченным множеством элементов, в котором нет двух элементов,являющихся эквивалентными экземплярами. Число элементов в наборе может изменяться и бытьограничено исходя из определения типа данных.П ри м е р 25 — В качестве набора может быть представлено население всего мира.П р и м е ч а н и е — Сборки (агрегаты) в языке EXPRESS являются одномерными. Объекты, обычнорассматриваемые как многомерные (например, маге магические матрицы), могут быть представлены сбор­ным типом данных, чей основной тип является в свою очередь сборным типом данных. Таким образом,сборные типы данных могут быть вложенными до произвольной глубины, позволяя представлять любыеразмерности.П р и м е р 26 — Можно представить LIST [1:3] OF ARRAY |5:10| OF INTEGER, который вдействительности имеет размерность, равную двух!.8.2.1 Т и п д а н н ы х A R R A YОбластью значений типа данных ARRAY является индексирование фиксированного размерамножества подобных элементов. Нижние и верхние границы, значения которых выражаются це­лыми числами, определяют диапазон значений индекса и, таким образом, размер каждого мно­жества массива. Определение типа данных ARRAY может факультативно устанавливать, что зна­ чения массива не могут содержать повторяющихся элементов. Также может быть установлено,что значения массива не обязательно содержат элементы в каждой проиндексированной позиции.15
ГОСТ Р ИСО 10303-11-2000Синтаксис:165 arrayjype = ARRAY bound_spec OF [ OPTIONAL | | UNI QUE | b asejype . 176 bound_spec = 'Г bound Ib o u n d j T •174 b o u n d j = numeric_expression . 175 bound_2 = numeric_expression . 171 basejype = aggregationjypes | sim plejypes | nam edjypes .Допустим, что m является нижней границей, а л — верхней, тогда в массиве имеется точноп - т + I элементов. Эти элементы проиндексированы от т до п включительно (см. 12.6.1).П р и м е ч а н и е I — Гранины могут быть положительными, отрицательными или нулевыми, но нсмогут быть неопределенными (?) (см. 14.2).Правила и ограниченияa) Оба выражения в спецификации границы, b o u n d j и bound_2. должны выражаться цело­численными значениями. Ни одно из них не должно иметь неопределенного (?) значения.b) Выражение b o u n d j задает нижнюю границу массива. Оно должно иметь наименьшийиндекс, при котором имеется значение массива для этого типа данных.c) Выражение bound_2 задает верхнюю границу массива. Оно должно иметь наибольшийиндекс, при котором имеется значение массива для этого типа данных.d) Выражение b o u n d j должно быть меньшим или равным bound_2. e) Если указано ключевое слово OPTIONAL, то значение массива этого типа данных можетиметь неопределенное (?) значение в одной или нескольких проиндексированных позициях.0 Если ключевое слою OPTIONAL не указано, значение массива этого типа данных недолжно содержать неопределенных (?) значений ни в одной проиндексированной позиции.g) Если указано ключевое слово UNIQUE, то каждый элемент значения массива этого типаданных должен отличаться (то есть не быть эквивалентным экземпляром) от каждого другогоэлемента в том же самом значении массива.П р и м е ч а н и е 2 — Оба ключевых слова OPTIONAL и UNIQUE могут использоваться в одном и томже определении типа данных ARRAY. Это нс исключает многократного появления неопределенных (?) зна­ чений в отдельных элементах массива. Эго происходит потому, что сравнен не двух неопределенных (?) зна­ чений дает результат UNKNOWN, поэтому условие уникальности нс нарушается.П р и м е р 27 — Данный пример показывает, как объя&зяется многомерный ARRAY.sectors : ARRAY | 1 : 10 | OF—первое измерениеARRAY | И : 14 1 O F—второе измерениеUNI QUE something:Мерный массив содержит 10 элементов типа ARRAY |11:14| OF UNIQUE something. Всего 40 элементов типа данных something в атрибуте, названном sectors. Внутри каждогоARRAY 111:14] не могут появляться повторяющиеся элементы, однако тот же экземплярsomething может появляться в двух различных значениях ARRAY 111:14] внутри единственногозначения для атрибута названного sectors.8.2.2 Т и п д а н н ы х L I S T Областью значений типа данных LIST являются последовательности подобных элементов.Необязательные нижние и верхние границы, значения которых выражаются целыми числами,определяют минимальное и максимальное число элементов, которые могут содержаться во мно­ жестве. определенном типом данных LIST. В определении типа данных LIST может быть факуль­ тативно установлено, что значение списка не может содержать повторяющихся элементов.Синтаксис:237 list j v p e = LIST | bound_spec 1 OF | UNI QUE | basejype .176 bound_spec = *|* b o u n d jb o u n d j.174 b o u n d j = numeric_expression . 175 b o u n d j = numeric_expression .171 b asejype = aggregation jy p e s | simple jy p e s | named Jypes.Правила и ограниченияа)Выражению b o u n d j должно быть присвоено целочисленное значение, большее или рав­ное нулю. Оно задает нижнюю границу, определяющую минимальное число элементов, которое16
ГОСТ Р ИСО 10303-11-2000может входить в значение списка этого типа данных. Выражение bound_l не должно иметь неоп­ ределенного (?) значения.b) Выражению bound_2 должно быть присвоено целочисленное значение, большее или рап­ное bound_l, или неопределенное (?) значение. Оно задает верхнюю границу, определяющуюмаксимальное число элементов, которое может входить в значение списка этого типа данных.Если данное значение является неопределенным (?), то число элементов в значении спискаэтого типа данных не ограничено сверху.c) Если выражение bound_spec опущено, то пределы — |0:?|.d) Если указано ключевое слово UNI QUE, каждый элемент в значении списка этого типаданных должен отличаться (то есть не являться эквивалентным экземпляром) от любого другогоэлемента в том же самом значении списка.П р и м е р 28 — Данный пример определяет список массивов. Список может содержать отнуля до десяти массивов. Каждый массив из десяти целых чисел должен отличаться от всех дру­ гих массивов в конкретном списке.com plexjist : L1ST|0:!0| OF UNI QUE ARRAY!I:10| OF INTEGER;8.2.3 Т и п д а н н ы х B A G Областью значений типа данных BAG являются неупорядоченные множества подобныхэлементов. Необязательные нижние и верхние границы, которые выражаются целочисленнымизначениями, определяют минимальное и максимальное число элементов, которые могут содер­жаться в множестве, определяемом типом данных BAG.Синтаксис;170 bag. type = BAG | bound „spec | OF base_type . 176 bound_spec = '[' b ou n d jbound 2 4Г .174 bound_l = numeric_expression .175 bound_2 = numeric_expression . 171 base_type = aggregation_types | simple_types | named_types .Правила и ограниченияa) Выражению hound_l должно быть присвоено целочисленное значение, большее или рап­ное нулю. Оно задает нижнюю границу, определяющую минимальное число элементов, котороеможет входить в значение мультимножества этого типа данных. Выражение bound_I не должноиметь неопределенного (?) значения.b) Выражению bound_2 должно быть присвоено целочисленное значение, большее или равноеbound_I. или неопределенное (?) значение. Оно задает верхнюю границу, определяющую макси­мальное число элеме1ггов, которое может входить в значение мультимножества этого типа данных.Если данное значение является неопределенным (?), то число элементов в значении муль­тимножества этого типа данных не ограничено сверху1.c) Если выражение bound_spec пропущено, то пределы — |0:?|.П ри м е р 29 — Данный пример определяет атрибут как мультимножество точки (где точка —поименованный тип данных, описанный в другом месте).a_bag_of_points : BAG OF point;Значение атрибута, названного a_bag_of_points, может содержать ноль или более точек. Тотже экземпляр точки может появиться более одного раза в значении a_bag_of_points.Если требуется, чтобы значение содержало по крайней мере один элемент, го в специфика­ции может быть проставлена нижняя граница:a_bag..of_points : BAG |1:?| OF point:Значение атрибута, названного a_bag_of_points, теперь должно содержать, по крайней мере,одну точку.8.2.4 Т и п д а н н ы х S E T Областью значений типа данных SET япляются неупорядоченные множества подобныхэлементов. Тип данных SET является конкретизацией типа данных BAG. Необязательные ниж­ние и верхние границы, выраженные целочисленными значениями, определяют минимальное имаксимальное число элеметгов. которые могут содержаться во множестве, определенном типомданных SET. Множество, определенное типом данных SET, не должно содержать повторяющихсяэкземпляров.17
ГОСТ Р ИСО 10303-11-2000 Синтаксис:285 set_type = SET | bound_spec | OF base_type .176 bound_spec =bound_lbound_2 T .174 bound_l = numeric_expression . 175 bound_2 = numeric_expression . 171 base_type = aggregation_types | simple_lypes | named_types .Правила и ограниченияa) Выражению bound_l должно быть присвоено целочисленное значение, большее или рав­ное нулю. Оно залает нижнюю границу, определяющую минимальное число элементов, котороеможет входить в значение набора этого типа данных. Выражение bound_l не должно иметь неоп­ределенного (?) значения.b) Выражению bound_2 должно быть присвоено целочисленное значение, большее или рав­ное bound_l, или неопределенное (?) значение. Оно задает верхнюю границу, определяющуюмаксимальное число элементов, которое может входить в значение набора этого типа данных.Если данное значение является неопределенным (?), то число элементов в значении набораэтого типа данных не ограничено сверху.c) Если выражение bound_spec пропущено, то пределы — |0:?|.d) Каждый элемент при появлении в типе данных set должен отличаться (то есть, не яв­ляться эквивалентным экземпляром) от любого другого элемента в том же самом значении на­бора.П р и м е р 30 — Этот пример определяет атрибут как набор точек (где точка — поименован­ный тип данных, описанный в другом месте).a_set_of points : SET OF point;Атрибут, названный a_set_ofjoin ts, может содержать ноль или более точек. Требуется, что­бы каждый экземпляр точки (в значении набора) отличатся от каждой другой точки в наборе.Если требуется, чтобы значение содержало не более 15 точек, в спецификации должна бытьустановлена верхняя граница:a_set_of points : SET |0:15| OF point;Значение атрибута а_ set_of j o i n t s теперь должно содержать не более 15 точек.8.2.5 У н и к а л ь н о с т ь з н а ч е н и я в с о в о к у п н о с т я х ( а г р е г а т а х )Уникальность между элементами совокупности (агрегата) основана на сравнении экземпля­ра (см. 12.2.2). Совокупность (агрегат) может быть ограничена уникальными значениями своихэлементов при помощи использования функции VALUE_UNIQUE (см. 15.29).П р и м е р 31 — Набор, ограниченный значением уникальности.TYPE value unique set = SET OF a;WHEREwrl : value unique(SELF);E N D J T P E ;П р и м е ч а й и с — Определяемая модельщиком уникальность значения может быть установлена черезпару функций, называемых, например, my equal и myjnique. как показано в следующем псевдокоде.FUNCTION myjequal (* Returns TRUE if vl equals' v2 •)END_ FUNCTION;FUNCTION my_unique(c: AGGREGATE OF GEMRIC) : LOGICAL;(* Returns FALSE if two elements o f c have the same 'value' Else returnsUNKNOWN if any element comparison is UNKNOWN Otherwise returns TRUE *)LOCALresult: LOGICAL;unknownp : BOOLEAN := FALSE;END_ LOCAL; IF (SIZEOF(c) = 0) THENRETURN(TRUE); END IF;18
ГОСТ Р ИСО 10303-11-2000REPEAT i := LOINDEX(c) ТО (HIINDEX(c) - 1);REPEAT j := (i+1) TO H llND EX(c);resul t:= mv_equal(c |i| , c|j|);IF (result = TRUE) THENRETURN(FALSE); END IF;IF (result = UNKNOWN) THENUnknownp := TRUE; E N D JF ;END REPEAT;END„REPEAT; IF unknownp THENRETURN( UN KNOWN);ELSERETURN(TRUE);END IF; END_FU NOTION;Функция my_equal должна иметь ряд свойств, позволяющих формировать классы эквива­лентности. В следующем примере S — набор рассматриваемых объектов, a my_equal (I, j), где i и jпринадлежат S, возвращает одно из значений |FALSE, UNKNOWN, TRUE).a) my_equal(l, 1) имеет значение TRUE для всех i в S (так как неопределенность (?) не при­надлежит S, то не требуется, чтобы my_equal (?,?) имело значений TRUE);b) my_equal(i, j) = my_equal(j, i) для всех i, j в Л'; c) (my_equal(i, j) = TRUE) AND для всех i, j. k в S.8.3 Поименованные типы данныхПоименованными типами данных являются типы, которые могут быть объявлены в фор­мальной спецификации. Существуют два вида поименованных типов данных: объекта и опреде­ленный. В настоящем разделе описаны ссылки на поименованные типы данных; объявление этихтипов данных описано в разделе 9.8.3.1 Т и п д а н н ы х о б ъ е к т а Типы данных объекта устанавливаются в соответствии с объявлениями ENTITY (см. 9.2).Тип данных объекта устанавливается пользователем путем присвоения идентификатора объекту.На тип данных объекта ссылаются по его идентификатору.Синтаксис:147 entity_ref = entity id .Правила и ограничения Выражение entity_ref должно быть ссылкой на объект, видимый в активной области (см.раздел 10).П р и м е р 32 — В данном примере тип данных объекта point использован для представленияего атрибута.ENTITY point;х, v, z : REAL;END^ENTITY;ENTITY line;pO. pi : point;END_ENTITY;Объект line имеет два атрибута, названных р0 и pi. Типом данных каждого из этих атрибу­тов является point.8.3.2 О п р е д е л е н н ы й т и п д а н н ы хОпределенные типы данных назначаются объявлениями TYPE (см. 9.1). Определенный типданных устанавливается пользователем путем присвоения идентификатора типу. На определен­ный тип данных ссылаются по его идентификатору.Синтаксис;154 tvpe_ref = tv p ejd .19
ГОСТ Р ИСО 10303-11-2000Правила и ограничения Выражение type_ref должно быть именем определенного типа данных, видимого в активнойобласти (см. раздел 10).П р и м е р 33 — Следующая спецификация является определенным типом данных, исполь­зуемым для указания единиц измерения, связанных с атрибутом.TYPE volume = REAL;EN D TYPE; ENTITY PART;bulk : volume;END.ENTITY;Атрибут, названный bulk, предстаазяется действительным числом, но использование опре­деленного типа данных volume помогает разъяснить смысл и контекст действительного числа; на­пример, оно определяет volume в отличие от другого объекта, иредстаазяемого типом REAL.8.4 Созданные типы данных Существуют два вида созданных типов данных в EXPRESS: ENUMERATION (перечисляе­мые) типы данных перечня и SELECT (выбираемые) типы данных выбора. Эти типы данныхимеют подобные синтаксические структуры и используются для обеспечения исходных представ­лений определенных типов данных (см. 9.1).П р и м е ч а н и е — Созданные типы данных в EXPRESS могут быть использованы только как пред­ставления для определенных типов данных.8.4.1 П е р е ч и с л я е м ы й т и п д а н н ы х Областью значений типа данных ENUMERATION (перечисляемого) яазяется упорядочен­ный набор имен. Имена представляют собой значения перечисляемого типа данных. Эти именаобозначаются как enumerationjd, и на них ссылаются как на перечисляемые элементы.Синтаксис:201 enumerationjype = ENUMERATION OF '(' enumeration_id {enumerationjd } ')' .Два различных типа данных ENUMERATION могут содержать тот же самый enumerationjd.В этом случае любая ссылка на enumerationjd (например, в выражении) должна быть переопре­делена в соответствии с идентификатором типа данных для обеспечения однозначности ссылки.Ссылка затем появляется как typejd.enumerationjd.П р и м е ч а н и е — Значение typejd всегда доступно, потому что EXPRESS допускает тип данныхENUMERATION только как исходное представление определенного типа данных.Правила и ограниченияa)В целях сравнения, упорядочение значений перечисляемого типа должно быть опреде­лено их относительной позицией в списке enumerationjd. первый встречающийся элемент дол­жен быть меньше, чем второй; второй — меньше, чем третий, и тл.b)Сравнение между значениями различных типов данных ENUMERATION не определено.c)Перечисляемый тип должен быть использован только как исходный тип определенноготипа данных.П р и м е р 34 — В данном примере типы данных ENUMERATION использованы для того,чтобы показать, как движутся различные виды транспортных средств. TYPE car_can_move = ENUMERATION OF(left, right, backward, forward):END_TYPE;TYPE p!ane_can_move = ENUMERATION OF(left, right, backward, forward, up, down);END_TYPE;Элемент перечисления left имеет два независимых определения, они задаются каждым ти­пом. являющимся компонентом. Между двумя этими определениями идентификатора left не име­ется никакой взаимосвязи. Ссылка на left или right сама по себе яазяется неоднозначной. Чтобыразрешить эту неоднозначность, ссылка на любое из этих значений должна быть квалифицирова­ на именем типа, например, car_can_move.left.20
ГОСТ Р ИСО 10303-11-20008.4.2 В ы б и р а е м ы й т и п д а н н ы х Областью значений типа данных SELECT является объединение областей значений поиме­нованных типов данных в соответствующем списке выбора. Тип данных SELECT является обоб­щением каждого из поименованных типов данных в списке выбора.Синтаксис:284 selectjyp e = SELECT '(' named_types {named_types } ')' .Правила и ограничения: Каждый элемент в списке выбора должен быть типом данных объекта или определеннымтипом данных.Тип данных SELECT должен использоваться только как исходный тип определенного типаданных.П р и м е ч а н и е — Значение тина данных SELECT может быть значением более чем одного из по­именованных типов данных, определенных в списке выбора для данною выбираемою типа данных. Эта си­туация возникает только тогда, когда соответствующие поименованные типы данных яазяются частью об­щего графа наследования (9.2.3).П р и м е р 35 — Если а и b являются подтипами с и они связаны выражением AN DOR. исуществует тип. определенный SELECT (а, Ь); то можно получитъ значение типа данныхSELECT, которое может быть равным а и b одновременно.П р и м е р 36 — В данном контексте должен быть сделан выбор среди нескольких типовпредметов.TYPEattachment_method = S£LECT(permanent attachment, temporary .attachment);END.TYPE;TYPE permanent_attachment = SELECT(glue, weld);END_TYPE;TYPE temporary attachment = SELECT(nail. screw);END.TYPE;ENTITY nail;bodyjength : REAL;head area: REAL;EN D . ENTI TY;ENTITY screw;body_length : REAL;pitch: REAL;END_ENTITY:ENTITY glue;composition : material_composition;solvent: material_composition;END_ENTITY:ENTITY weld;composition : material_composition;END_ ENTITY;ENTITY wall_mounting;mounting : product;on; wall;using: attachment method;END_ENTITY:Объект walI_mounting включает изделие в границы, используя постоянный или временныйметод присоединения, оба из которых подразделяются далее. Значение wall_mounting будет иметьатрибут using, который является значением одного nail (гвоздя), screw (винта), glue (клея) илиweld (сварного шва).21
ГОСТ I* ИСО 10303-11-2000К.5 Обобщенные типы данныхСинтаксис:211 generalized_types = aggregatejype | general_aggregation_types [ generic_type ._____________Обобщенные типы данных используются для установления обобщения некоторых другихтипов данных и могут быть использованы в конкретных и очень специфических контекстах. ТипGENERIC яиляется обобщением всех типов данных. Агрегатный тип данных AGGREGATE яатя-ется обобщением всех сборных (агрегатных) типов данных. Общие сборные (агрегатные) типыданных являются обобщениями сборных (агрегатных) типов, которые ослабляют некоторые огра­ничения, обычно налагаемые на сборные (агрегатные) типы данных. Все эти типы данных опре­делены в 9.5.3.8.6 Классификация использования типов данныхВ языке EXPRESS типы данных используются тремя различными способами: основные ти­пы данных используются в качестве представления атрибутов и сборных (агрегатных) элементов;параметрические типы — как представления <]юрмальных параметров для функций и процедур; аисходные типы — как представления определенных типов данных. Некоторые классы типов дан­ ных м о т быть использованы любым из этих способов, в то время как другие могут быть ис­ пользованы только в определенном контексте. Эти рахзичня показаны в таблице 7.Т а б л и ц а 7 — Использование типов данныха) Основные типы данных — представление атри-Типаb сбута или элементов совокупности.Простые (simple) типы данныхСборные (aggregation) типы данныхЬ) Параметрические тины данных — прсдставлс-Поименованные (named) типы данныхние формального параметра, локальной перс-Созданные (constructed) типы данныхменной или функционального результатаОбобщенные (generalized) типы данныхс) Исходные типы данных — представление опре­деленного типа (см. 9.1).8.6.1 О с н о в н ы е т и п ы д а н н ы х Основные типы данных используются в качестве представления атрибутов или как основ­ные типы сборных (агрегатных) типов данных.Основными типами данных являются простые, сборные (агрегатные) и поименованные ти­пы данных.Синтаксис:171 base_type = aggregation, types | sim plejypes | nam edjypes . 8.6.2 П а р а м е т р и ч е с к и е т и п ы д а н н ы хПараметрические типы данных используются в качестве представления формальных пара­метров для алгоритмов (функций и процедур). Параметрические типы данных также могут такжеиспользованы для представления возвратных типов функций и локальных переменных, объяв­ленных в алгоритмах.Параметрическими типами данных являются простые, поименованные и обобщенные типыданных.Синтаксис:253 parameterjype = generalized.types | nam edjypes | simple_types .8.6.3 И с х о д н ы е т и п ы д а н н ы хИсходные (underlying) типы данных используются в качестве представления определенныхтипов данных.Исходными типами данных являются простые, сборные (агрегатные), созданные и опреде­ленные типы данных.Синтаксис:309 underlying_type = constructed types | aggregation „types | siniple_types |type_ref. 22
ГОСТ Р ИСО 10303-11-2000 9 ОбъявленияВ настоящем разделе определены различные объявления, доступные в языке EXPRESS.EXPRESS-объянленне создает новый EXPRESS-элемент и связывает с ним соответствующийидентификатор. На EXPRESS-элемент можно ссылаться в другом месте путем описания связан­ ного с ним имени (см. раздел 10).Принципиальные возможности языка EXPRESS установлены в следующих объявлениях:- типа; - объекта; - схемы; - константы; - функции; - процедуры; - правила. Объявления могут быть или явными или неявными. В настоящем разделе полностью описа­ны явные объявления. Неявные объявления описаны в настоящем и последующих разделах,включая их элементы и условия, при которых они устанавливаются.9.1 Объявление типа Объявление типа создает определенный тип данных (см. Н.3.2) и объявляет идентификатордля ссылки на этот тип. Конкретно typ ejd объявляется как имя определенного типа данных.Представлением этого типа данных является underlyingjype. Область значения определенноготипа данных совпадает с областью значений underlying^)ре. далее ограниченного where_clau.se(если оно есть). Определенный тип данных является конкретизацией исходного типа и, следова­тельно. совместим с исходным типом.П р и м е ч а н и е 1 — Октавные определенные липы данных могул быть связаны с тем же самымпредставлением. Имена могут помочь читателю в понимании назначения (или контекста) примененияu«deriying_ty рс Синтаксис:304 type_decl = TYPE ty p e jdunderlying, type| where_clause | END_TYPE.309 underlyingjype = constructed_tvpes | aggregationjypes | simple_types |type_ref.П р и м е р 37 — Следующее объявление указывает определенный тип данных, названныйperson_name. с исходным представлением типа STRING. Определенный тип person_name далеедоступен для использования в качестве представления атрибутов, локальных переменных и фор­мальных параметров. Это придает ему большее количество значений, чем простое использованиетипа STRING.TYPE person name = STRING;END..TYPE;Правила о б л а е т значений (оператор WHERE) Правила области значений устанавливают ограничения, которые лимитируют область значе­ний определенного типа данных. Область значений определенного типа данных является обла­стью значений их исходного представления, ограниченного правилом(ами) области значений.Правила области значений следуют за ключевым словом WHERE.Синтаксис:315 \vhere_clause = WHERE domain_rule{ domain_mle} .Каждому domain_rule может быть задана метка правила. Ссылки на метки правил не описа­ны в настоящем стандарте.П р и м е ча н и е 2 — В случае их задания, метки правил могут быть использованы в реализациях, на­пример для документации, сообщений об ошибких и обязательных спецификаций. Для этого желательноиспользование разметки правил.Правила и ограниченияа) Каждому правилу области значений должно присваиваться логическое (TRUE. FALSEили UNKNOWN) или неопределенное (?) значение.23
ГОСТ I* ИСО 10303-11-2000b) Ключевое слово SELF (см. 14.5) должно появляться по меньшей мере один раз в каждомправиле области значений. Правило области значений должно выражаться конкретным значени­ем в области значений исходного типа путем замены обнаруженной в правиле лексемы SELF со­ ответствующим значением.c) Правило области значений будет выполнено, если выражению будет присвоено значениеTRUE, и будет нарушено, если выражению будет присвоено значение FALSE, и не будет ни вы­полненным ни нарушенным, если выражению будет присвоено неопределенное (?) значение илизначение UNKNOWN.d) Область значений определенного типа данных состоит из всех значений области значе­ний исходного типа, которые не нарушают ни одно из правил области.e) Метки правила области значений должны быть уникальны внутри заданного объявленияTYPE.П р и м е р 38 — Может быть создан определенный тип данных, который ограничивает ис­ходный целочисленный тип только положительными целыми числами.TYPE positive = INTEGER; WHEREnotnegative ; SELF > 0;END.TYPE;Любой атрибут, локальная переменная или формальный параметр, которые объявлены какпринадлежащие к положительному типу, могут иметь только положительные целочисленныезначения.9.2 Объявление объекта Объявление ENTITY создает тип данных объекта и объявляет идентификатор для ссылки нанего.Каждый атрибут представляет свойство объекта и может быть связан со значением каждогоэкземпляра объекта. Тип данных атрибута устанавливает область его возможных значений.Каждое ограничение представляет одно из следующих свойств объекта:-ограничения на число, вид и организацию значений атрибутов. Они определяются в объ­явлениях атрибута;- требуемые отношения между значениями атрибута или ограничениями на допустимые зна­чения атрибутов для данного экземпляра. Они представлены в настоящем разделе и на них ссы­лаются как на правила области значений;-требуемые отношения между значениями атрибутов для всех экземпляров типа данныхобъекта. Они появляются в:отдельном разделе, где на них ссылаются как на уникальные ограничения,другом разделе, где на них ссылаются как на основные ограничения,глобальных правилах (см. 9.6);- требуемые отношения между экземплярами нескольких типов объекта. Они не появляютсяв объявлении объекта непосредственно, а проявляются как глобальные правила (см. 9.6).Синтаксис:196 entity_decl = entity_head entity J>ody END_ENTITY *;* .197 entityJtead = ENTITY entity J d | subsuper j.194 entity_body = { explicit_attr) | derive_clause | | inverse_clause || unique „clause | | where„clause | .Правила и ограничения:a) Каждый идентификатор атрибута и метка, указанная в объявлении объекта, должны бытьуникальными внутри объявления.b) Подтип не должен объявлять атрибут, имеющий тот же самый идентификатор в качествеатрибута одного из супертипов, за исключением того, когда подтип переобъянляет атрибут, унас­ледованный из одного из его супертипов (см. 9.2.3.4).9.2.1 А т р и б у т ы Атрибуты типа данных объекта предстаатяют важные черты, свойства или характеристикиобъекта. Объяатение атрибута устанавливает отношение между типом данных объекта и типомданных, вызванным атрибутом.24
ГОСТ Р ИСО 10303-11-2000Имя атрибута иредстаатяет роль, играемую связанным с ним значением, и контексте объек­та. в котором оно появляется.Существуют три вида атрибутов: - явный — атрибут, чье значение должно быть обеспечено реализацией для создания экзем­пляра объекта;- вычисляемый — атрибут с вычисляемым значением; - инверсный — атрибут, чье значение состоит из экземпляров объекта, которые используютобъект в конкретной роли.Каждый атрибут устанавливает отношения между экземпляром объяазенного типа данныхобъекта и некоторым другим экземпляром или экземплярами. Атрибут, представляемый несбор­ным (неагрегатным) типом данных устанавливает простое отношение с этим типом данных. Ат­ рибут, представляемый сборным (агрегатным) типом данных, устанавливает как коллективныеотношения для объединения значений, гак и раздельные отношения с элементами этих сборныхзначений. Кроме того, каждый атрибут устанаативает неявное инверсионное отношение междуосновным и объяазенным типом данных объекта.П р и м е ч а н и е — Дальнейшее обсуждение этих отношений см. в приложении G.9.2.1.1 Явный атрибутЯвный атрибут представляет свойство, значение которого должно быть обеспечено реализа­цией для создания экземпляра. Каждый явный атрибут определяет отдельное свойство. Объявле­ ние явного атрибута создает один или несколько явных атрибутов, имеющих указанную областьзначений, присвоенную каждому из них его идентификатором.Синтаксис:203 explicit.attr = attribute_decl { Y attribute.decl )| OPTIONAL |b asejype.167 attribute^ decl = attributejd | qualified.attribute .171 base.type = aggregation „types | simple.types | named.types .П р и м е ч а н и е 1 — Синтаксис для qualifkd_attributc предусматривает переопределение атрибута, ко­торое описано в 9.2.3.4.Правила и ограниченияa) Если явный атрибут не объявлен как OPTIONAL, каждый экземпляр типа данных объек­та должен иметь значение для этого атрибута.b) Ключевое слово OPTIONAL указывает на то. что в данном экземпляре объекта атрибутне обязан иметь значение. Если атрибут не имеет значения, то считается, что его значение будетнеопределенным (?).Ключевое слово OPTIONAL указывает на то. что атрибут всегда имеет смысл для экземпля­ров этого типа объекта, но для некоторых экземпляров может не быть такого значения, котороеиграло бы роль, определенную атрибутом. OPTIONAL не указывает па то, что атрибут не имеетзначения для некоторых экземпляров типа данных объекта.П р и м е ч а н и я 2 Случай, когда атрибут нс имеет значения для некоторых экземпляров, правильно моделируется пу­тем определения подтипа (см. 9.2.3).3 Необходимо обратить внимание на ссылки к необязательным атрибутам, особенно в правилах, таккак они могут нс иметь никакого значения. Встроенная функция EXISTS может быть использована для оп­ределения существования значения или встроенная функция NVL может быть использована для обеспече­ния вычислении значения но умолчанию. Если ни одна из них нс используется, могут быть получены не­ожиданные результаты.Г1 ри м е р 39 — Следующие объявления эквивалентны:ENTITY point;х. у, z : REAL;END ENTITY:ENTITY point;x : REAL:v : REAL:z : REAL;END ENTITY;25
ГОСТ I* ИСО 10303-11-20009.2.1.2 Вычисляемый атрибутВычисляемый атрибут представляет собой такое свойство, значение которого вычисляетсяпутем присвоения численного значения выражению. Вычисляемые атрибуты объяатяются послеключевого слова DERIVE. Объявление состоит из идентификатора атрибута, типа его представ­ления и выражения, используемого для вычисления значения атрибута.Синтаксис:190 derived_attr = attribute_decl *:* basejypeexpression *;* .167 attribute_dcel = anributejd | qualified_attribute . 171 base_type = aggregation., types | simple j y p e s | named.,types .П р и м е ч а н и е — Синтаксис для qualificd atlributc предусматривает переопределение атрибута, кото­рое описано в 9.2.3.4.Выражение может ссылаться на любой атрибут, константу (включая SELF) или идентифика­тор функции, который находится в области применения.Правила и ограниченияa) Выражение должно быть совместимо по присваиванию (см. 13.3) с типом данных атрибута. b) Ятя конкретного экземпляра объекта значение вычисляемого атрибута определяется при­своением значения выражению путем замены каждого обнаруженного SELF на текущий экземп­ляр. а каждой ссылки на атрибут — на соответствующее значение атрибута.П р и м е р 40 — В данном примере, круг (circle) определяется центром (centre), осью (axis) ирадиусом (radius). В дополнение к этим явным атрибутам необходимо учесть важные свойства,такие как плоша,ть (area) и периметр (perimeter). Это выполняется путем определения их как вы­ числяемых атрибутов, задающих значения в виде выражений.ENTITY circle;centre: point;radius: REAL;axis: vector;DERIVEarea: REAL := Pl*radius*-2;perimeter : REAL := 2.0-Pl-radias:END ENTITY:9.2.1.3 Инверсный атрибутЕсли другой объект устанавливает отношение с данным объектом посредством явного атри­бута, инверсный атрибут может быть использован, чтобы описать это отношение в контекстеданного объекта. Этот инверсный атрибут может также быть использован для дальнейшего огра­ничения отношения.Инверсные атрибуты объявляются после ключевого слова INVERSE. Каждый инверсный ат­рибут должен быть определен отдельно.Основные ограничения инверсного отношения устанавливаются спецификацией границыинверсного атрибута таким же обра зом, как для явных атрибутов.П р и м е ч а н и е I — Подробная информация об отношении между явными и инверсными атрибута­ми приведена в приложении G.Инверсный атрибут представляется типом данных объекта или типами BAG и SET, яатяю-шимися основным типом типа данных объекта. На тип данных объекта ссылаются как на ссы­лочный объект.Объявление инверсного атрибута также называет явный атрибут ссылочного объекта. Ятяконкретного экземпляра типа данных данного объекта значение инверсного атрибута состоит изэкземпляра или экземпляров типов данных ссылочного объекта, которые используют данный эк­ земпляр в определенной роли.Каждое из трех возможных предстаатений типов для инверсии налагает некоторые ограни­чения на отношение между двумя объектами.Тип данных BAG. Указание границ, при его наличии, определяет минимальное и макси­мальное число экземпляров ссылочного объекта, которое может использовать экземпляр данногообъекта. Так как мультимножество может содержать отдельный экземпляр несколько раз, то не­ сколько экземпляров могут ссылаться на данный экземпляр, а конкретный экземпляр можетссылаться на данный экземпляр более одного раза.26
ГОСТ Р ИСО 10303-11-2000П р и м е ч а н и я2 Если ишкртированный атрибут представлен нсуникальиым сборным (агрегатным) типом данных, тоесть списком или массивом, для которых не установлено ключевое слово UNIQUE, или мультимножеством,конкретный экземпляр данного объекта может быть использован конкретным экземпляром ссылочного объ­екта несколько раз.3 Если инвертированный атрибут представлен уникальным сборным (агрегатным) типом данных, напримерсписком или набором, которые определены ключевым словом UNIQUE, или набором, конкретный экземплярданного объекта может быть использован только алии раз конкрелным экземпляром ссылочного объекта.Факультативно инверсный атрибут выражается определением нижней границы равным ну­лю. показывающим, что на заданный экземпляр данного объекта не обязан ссылаться ни одинэкземпляр ссылочного объекта.Тип данных SET. Как и для BAG, но с дополнительным ограничением, что ссылочные эк­земпляры должны быть уникальными. Это ограничение также означает, что конкретный ссылоч­ ный экземпляр может использовать данный экземпляр в инвертированной роли только одни раз.11 ри м еча н не 4 — Если инвертированный атрибут представлен уникальным сборным (агрегатным)типом данных, например списком или массивом, которые определены ключевым словом UNIQUE, или на­бором, инверсия не добавляет новых ограничений относительно уникальности.Тип данных объекта. Инверсный атрибут точно указывает, что имеется один экземпляр типаданных ссылочного объекта, который использует данный экземпляр в конкретной роли. В этомслучае мощность связи инверсного отношения 1:1.Синтаксис:234 inverse_attr = attributc_decl| ( SET | BAG ) | bound.spec | OF | entity_refFOR a t t r i b u t e _ r e f .167 attribute _decl = attributeJd [ qualified^ attribute . 176 bound_spec = T bound_lbound_2 ’ |' •174 bound. 1 = numeric.expression .175 bound_2 = numeric.expression .Правила и ограниченияa)Объект, определяющий объявление прямого отношения с данным объектом, должен де­лать это так же, как и явный атрибут.b)Тип данных явного атрибута в объекте, определяющем объявление прямого отношения,должен быть объявлен данным объектом через один из его супертипов или сборным (агрегатным)типом данных, используя данный объект или один из его супертипов как основной тип.П р и м е р 41 — Предполагается, что мы имеем следующее объявление для дверного блока(door assembly):ENTITY door;handle : knob; hinges : SET |1:?| OF hinge;END.ENT1TY;Затем мы можем пожелать ограничить объявление кнопок (knob) так. чтобы кнопки моглиприсутствовать только, если они использованы в роли handle в одном из экземпляров двери.ENTITY knob;INVERSEopens : door FOR handle;END_ENTITY:С другой стороны, мы можем просто пожелать определить, чтобы кнопка использовалась водной или не в одной двери (например, она либо уже на двери или еще только должна быть кней присоединена).ENTITY knob;INVERSEopens : SET [0:l| OF door FOR handle;END ENTITY;27
ГОСТ Р ИСО 10303-11-20009.2.2 Л о к а л ь н ы е п р а в и л аЛокальные правила утверждаются для области значений экземпляров объекта и таким образомдействуют для всех экземпляров типа данных этого объекта. Существуют два вида локальных пра­вил. Правила уникальности контролируют уникальность значений атрибутов среди всех экземпля­ ров типа данных заданного объекта. Правила области значений описывают другие ограничения пазначения атрибутов каждого экземпляра типа данных заданного объекта или между ними.Каждому из локальных правил может быть присвоена метка правила. Ссылки на метки пра­вил в настоящем стандарте не определены.П р и м е ч а н и е — Метки правил, при их наличии, мшуг быть использованы для обозначения правилв реализациях, например в документации, сообщениях об ошибках и технических заданиях. Присвоениеметок правилам предполагается использовать именно для этой пели.9.2.2.1 Правило уникальностиВ правиле уникальности может быть определено ограничение уникальности для отдельныхатрибутов или комбинаций атрибутов. Правила уникальности следуют за ключевым словомUNIQUE и определяют или одиночное имя атрибута, или список имен атрибута. Правило, кото­рое определяет имя одиночного атрибута, называемое простым правилом уникальности, устанав­ливает. что никакие два экземпляра типа данных объекта в области значений не должны исполь­зовать тот же самый экземпляр для поименованного атрибута. Правило, которое определяет д мили несколько имен атрибутов, называемое совместным правилом уникальности, определяет, чтоникакие два экземпляра типа данных объекта не должны иметь ту же самую комбинацию экзем­пляров для поименованных атрибутов.П р и м е ч а н п е — Проверяется эквивалентность экземпляров, а нс равенство значений (см. 12.2.2).Синтаксис:310 tmique_clau.se = UNIQUE unique_rule{ unique_rule} .311 unique rule = | labelJ refercnced_attribute { Y referenced_attribute } .266 referenced_attribuie = attribuie_ref| qualilled_attribute .Правила и ограничения Когда явный атрибут, который отмечен как OPTIONAL (см. 9.2.1.1), появляется в правилеуникальности, и если при этом атрибут не имеет значения для конкретного экземпляра объекта,правило уникальности ни нарушено, ни утверждено и, следовательно, экземпляр объекта являет­ся элементом области значений.П р и м е р ы42 — Если объект имел три атрибута, называемые а. b и с, мы могли бы получить:ENTITY е;a, b. с : INTEGER;UNIQUEurl : а;ur2 : b;игЗ : с;END_ ENTITY;Это означает, что два экземпляра объявляемого типа данных объекта не могут иметь одно итоже значение для а. b или с.43 — Объект person_name может выглядеть следующим образом:ENTITY person„name;last: STRING;first: STRING;middle: STRING;nickname: STRING;ENDJENTITY;и может быть использован как:ENTITY employee;28
ГОСТ Р ИСО 10303-11-2000badge -.NUMBER;name : person_name;UNIQUEurl : badge, name;ENDJENTITY;В этом примере два экземпляра объекта person_name могли бы иметь тот же самый наборзначений для четырех атрибутов. В случае служащего (employee), однако, имеется требование,чтобы признак (badge) и имя (паше) вместе были уникальными. Таким образом, два экземпляраemployee могут иметь то же самое значение или badge, или name. Однако никакие дна экземпляраemployee не могут иметь одинаковых экземпляров badge и name вместе, так как эта комбинацияэкземпляров должна быть уникальна (см. 9.6 для метода уникальности значения описываемогоатрибута).9.2.2.2 Правша области значений (оператор WHERE)Правила области значений ограничивают значения отдельных атрибутов или комбинацийатрибутов для каждого экземпляра объекта. Все правила области значений следуют за ключевымсловом WHERE.Синтаксис: 315 \vhere_clause = WHERE domainjrule{ domain_rule *;* J .Правила и ограниченияa)Каждому выражению правила области значений должно присваиваться логическое(TRUE, FALSE или UNKNOWN) или неопределенное (?) значение.b)Каждое выражение правила области значений должно включать ссылку на SELF илиатрибуты, объявленные внутри объекта или любого из его супертипов.c)Пояатение ключевого слова SELF должно означать ссылку на экземпляр объявляемогообъекта.d)Правило области значений будет верным, когда выражению присвоено значение TRUE,будет нарушенным, когда выражению присвоено значение FALSE, и будет ни верным, ни нару­шенным. если выражению присвоено неопределенное (?) значение или значение UNKNOWN.e) Для того чтобы экземпляр объекта был верным (в области значений) не должно бытьнарушено ни одного правила.П р и м е р 44 — Дзя объекта unit_vector требуется, чтобы длина вектора была точно равнаединице, ^го ограничение может быть определено следующим образом:ENTITY unit_vecior;a. b, с : REAL;WHERElength.. 1 : a**2 + b**2 + c**2 = 1.0:END_ENTITY;Необязательные атрибуты в правилах области значений Правило области значений, которое содержит необязательный атрибут, должно трактоватьсяследующим образом.Правила и ограниченияa)Когда атрибут имеет значение, правилу области значений должно быть присвоено зна­чение как любому другому правилу области значений.b )Когда атрибут не имеет значения, неопределенное (?) значение используется как значе­ние атрибута при определении выражения правила области значений. Значения выражений, со­держащих неопределенное (?) значение, принимаются в соответствии с разделом 12.Г1 ри м е р 45 — Рассмотрим вариант примера 44.ENTITY unit_vector:a. b : REAL;с: OPTIONAL REAL;WHERE29
ГОСТ Р ИСО 10303-11-2000length.. 1 : а**2 + Ь**2 + с**2 = 1.0;END_ENT1TY:Целью правила области значений является обеспечение того, чтобы объект unit_vector былединичным. Однако когда с имеет неопределенное (?) значение, правилу области значений всегдаприсваивается значение UNKNOWN, независимо от значений а и Ь.Стандартная функция NVL ( см. 15.18) может быть использована для обеспечения приемле­мого значения, когда необязательный атрибут имеет неопределенное (?) значение. Когда необяза­тельный атрибут имеет значение, функция NVL возвращает данное значение; в противоположномслучае она возвращает заменяющее значение.ENTITY unit_vector;a. b : REAL;с; OPTIONAL REAL;WHERElength_l : a**2 + b**2 + NVL(c, 0.0)**2 = 1.0;END_ENT1TY;9.2.3 П о д т и п ы и с у п е р т и п ы Язык EXPRESS допускает определение объектов как подтипов других объектов, где подтипобъекта является конкретизацией его супертипа. Тем самым устанавливается наследование (на­пример. подтип/супертнп) отношения между объектами, в которых подтип наследует свойства(например, атрибуты и ограничения) соответствующего супертипа. Последовательные отношенияподтип/супертип устанавливают граф наследования, в котором каждый экземпляр подтипа явля­ется экземпляром его супертнпа(ов).Граф наследования, установленный отношениями подтип/супертип, должен быть ацикличе­ским.Объявление объекта, которое полностью определяет все важные свойства данного объекта,объявляет простой тип данных объекта. Объявление объекта, которое устанавливает наследуемыеотношения с супертипами, объявляет сложный тип данных объекта. Сложный тип данных объек­ та внутри граф;» наследования также использует характеристики соответствующего супертипа(ов).Сложный тип данных объекта может иметь дополнительные характеристики, не содержащиесявнутри супертипа(ов).Следующие факты относятся к отношениям подтип/супертип. Эти факты ссылаются награф подтип/супертип. Граф подтип/супертнп является многомерным направленным ацикличе­ским графом, в котором узлы представляют типы объекта, а связи представляют отношения под-типа/супертнпа. Следующие за SUBTYPE OF связи ведут к супертипам, тогда как следующие заSUPERTYPE OF связи ведут к подтипам. Синтаксис:294 subsuper = | supertype_constraint | | subtype _declaration | . 297 supertype_consiraint = absiract_supenype_declaration | supertype_rule .156 abstract j5upertype_declaration = ABSTRACT SUPERTYPE |subtype_constraint 1.295 subtype_constraint = OF '(* supenype_expression ')* . 298 supertype_expression = supertype_factor { AN DOR supertype_factor } . 299 supertype_factor = supertvpejerni { AND supertype_temi } . 301 supertype_temi = entity_ref | one_of | '(' supertype_expression ' ) ’ . 250 one_of = ONEOF ' ( ’ supertype_expression | *,* supertype_exprcssion. } *)' .300 supertype_nile = SUPERTYPE subtvpe_constraint . Правила и ограниченияa)Раздел супертипа (при его наличии) должен предшествовать разделу подтипа (при егоналичии).b)Подтип может иметь более одного супертипа.c)Супертип может иметь более одного подтипа.d)Супертип может сам быть подтипом одного или нескольких других типов объекта. Тоесть ветви в графе подтип/супертип могут пересекать несколько узлов.e)Отношение подтип/супертип должно быть транзитивным. То есть, если Л является под­типом В, а В является подтипом С. то А является подтипом С. Объекты, которые являются су-30
ГОСТ Р ИСО 10303-11-2000пертипами конкретного типа объекта, должны быть объектами, для которых возможно пересече­ ние связей, начиная с типа объекта и перечисленых после SUBTYPE OF.0Подтип не должен быть супертипом любого типа в списке всех его супертипов, то естьграф подтип/супертнп является ациклическим.9.2.3.1 Определение подтиповОбъект является подтипом, если он содержит объявление SUBTYPE. Объявление подтипадолжно определять весь (все) непосредственныи(е) супертип(ы) объекта.Синтаксис:296 subtype_declaration = SUBTYPE OF ' ( ’ entity_ref | Y entity_ref }.9.2.3.2 On/>ede.ienue супертиповОбъект может проявиться как супертип посредством явного или неявного определения.Объект явно определяется как супертип, если в нем содержится объявление ABSTRACTSUPERTYPE и неявно, если он назван в объявлении подтипа по крайней мере одного другогообъекта.Синтаксис:297 supertype^constraint = abstract juipeitype_declaration | supcrtype_ru!e .156 abstract_supertype_declaration = ABSTRACT SUPERTYPE | subtype_constraint | .295 subtype_constraint = OF ' ( ’ supenype_expression ')' . 298 supertype_expression = supertype_factor | ANIX)R supertype_factor } . 299 supenype_factor = .supertype jerrn { AND supertype^term ) .3 0 1 supertype_term = entity_ref | o n e o f | ' ( ’ supertype_expression ')' .250 o n e_ o f= ONEOF ' ( ’ supertype_expression { Y supertype_expression } ')* . 300 supertype _rule = SUPERTYPE subtype_constraint . Правила и ограниченияВсе подтипы, упоминаемые в выражении супертипа, должны содержать объяатение подти­па, которое определяет данный объект как супертип.П р и м е р 46 — Нечетные числа являются подтипом целых чисел, следовательно, целыечисла являются супертипом нечетных чисел.ENTITY integer number;v a l.: INTEGER:END^ENTITY:ENTITY odd_numberSUBTYPE OF (integer number);WHEREnot even : ODD(val);END_ENTITY;9.2.3.3 Наследование атрибутаИдентификаторы атрибута в супертипе видимы внутри области применения подтипа (см.раздел I0). Таким образом, подтип наследует все атрибуты данного супертипа. Это позволяетподтипам определять ограничения или свои собственные атрибуты с использованием унаследо­ ванного атрибута. Если подтип имеет несколько супертипов, то подтип наследует все атрибуты изсоответствующих супертипов. Это называется составных! наследованием. Правила и ограниченияОбъект не должен объявлять атрибут с таким же именем, как у атрибута, унаследованного отодного из супертипов, если он не переобъяапяст унаследованный атрибут (см. 9.2.3.4).Когда подтип наследует атрибуты из двух супертипов, являющихся непересекаюшнмися,возможно, что в них есть различные атрибуты, имеющие одинаковый идентификатор атрибута.Неоднозначность в наименовании должна быть разрешена путем прибавления к идентификаторуимени супертипа объекта, из которого унаследован каждый из атрибутов.П р и м е р 47 — В данном примере показано, как объект е12 наследует два атрибута, на­званные attr, а для того, чтобы определить, какой из двух атрибутов будет ограниченным, к егоимени прибавляется префикс.31
ГОСТ Г ИСО 10303-11-2000ENTITY el;a ttr: REAL;EN IDENTITY;ENTITY e2;attr: BINARY;END_ENTITY;ENTITY el2SUBTYPE OF (el,e2);WHEREpositive : SELF\el.attr > 0.0;— attr как объявлено в elEND_ENT1TY:Подтип может наследовать гот же самый атрибут из различных супертипов, которые в своюочередь унаследовали его из одного супертипа. Это называется повторным наследованием. В этомслучае подтип наследует атрибут только один раз, то есть имеется только одно значение этогоатрибута в экземпляре этого типа данных объекта.9.2.3.4 Чераобъявление атрибутаАтрибут, объявленный в супертипе, может быть пере объявлен в подтипе. Атрибут остается всупертипе, но разрешенная область значений для этого атрибута задается переобъяаленнем. за­данным в подтипе. Первоначальное объявление может быть изменено тремя основными спосо­бами:-тип данных атрибута может быть изменен для конкретизации первоначального типа дан­ных (см. 9.2.6);П р и м е р 4Х — Атрибут типа данных NUMBER может быть изменен на тип данных IN­TEGER или REAL;- необязательный атрибут в супертипе в подтипе может быть заменен обязательным; - явный атрибут в супертипе в подтипе может быть заменен определенным атрибутом.Синтаксис:262 qualified_attribute = SELF group._qualifier attribute..qualifier . 219 group_qualifier = *\* entity_ref.169 attribute ..qualifier = V attribute.ref,_______________________________________________________Правила и ограниченияa)Атрибут, пере объявленный в подтипе, должен быть конкретизацией атрибута с тем жеименем в супертипе.b)Имя переобъявленного атрибута должно быть задано с использованием синтаксисаqualificd_attribute.c)Если атрибут супертипа переобъявлен в двух не взаимно исключающих подтипах, экземп­ляр. содержащий оба подтипа, будет иметь единственное значение для этого атрибута, которое яв­ ляется допустимым для обоих переобъявленнй. Реализация синтаксического анализатора языкаEXPRESS, которая претендует на соответстоие уровню 4. должна быть протестирована на наличиепротиворечий в переобъяпленнях подтипов, которые могут сосуществовать в одном экземпляре.П р и м е р ы49— В некоторых геометрических системах используют координаты с плавающей точкой, вто время как в других работают в целочисленном координатном пространстве.ENTITY point;х ; NUMBER;у : NUMBER;END_ENTITY;ENTITY integer point32
ГОСТ Р ИСО 10303-11-2000SUBTYPE OF (point);SELF\point.x : INTEGER:SELF\point.y : INTEGER:END_ENTHY:50 — Этот пример показывает изменение элементов в сборном (агрегатном) типе данных вцелях указания их уникальности, уменьшения числа элементов в сборном типе данных и заменынеобязательного атрибута обязательным.ENTITY super:things: LIST |3:?| OF thing;items: BAG [0:?| OF widget:may be: OPTIONAL stuff;END.ENTITY;ENTITY subSUBTYPE OF (super) ; SELF\super.things: LIST |3:?| OF UNIQUE thing;SELF\super.itenis: SET (1:10| OF widget;SELF\super.may_be : stuff;END_ENTITY:51 — В следующем примере круг определен центром, осью и радиусом. Вариант круга опре­делен центром и двумя точками, через которые он проходит. Эти три точки предстаатяют дан­ные. которыми определен этот тип круга. В дополнение к этим данным необходимо описать идругие важные черты — радиус и ось. Это выполняется переобъяалением их как вычисляемыхатрибутов путем задания значений их выражениям.FUNCTION distanced I, р2 : p o in t): REAL;(* Найти кратчайшее расстояние между двумя точками •)END_ FUNCTION;FUNCTION normal(pl, p2. p3 : point) : vector;(’ Вычислить нормаль к плоскости, заданной тремя точками на плоскости *)END_FUNCTION;ENTITY circle;centre: point;radius: REAL;axis: vector;DERIVEarea: REAL := Pl*radius»*2;END_ENTITY:ENTITY circle by_pointsSUBTYPE OF (circle);p2 : point;p3 : point;DERIVESELF\circle.radius: REAL := distance(centre, p2);SELF\circle.axis: vector := nomiaI(centre, p2, p3);WHEREnot coincident: (centre <> p2) AND(p2 <> p3) AND(p3 <> centre):is_circle: distance(centre, p3) =distance^centre, p2):END_ENTITY;В подтипе три определяющие точки (centre, р2. и рЗ) являются явными атрибутами, в товремя как radius (радиус), axis (ось) и area (площадь) являются вычисляемыми атрибутами. Зна-
ГОСТ Р ИСО 10303-11-2000чемия этих вычисляемых атрибутов вычисляются с помошыо выражения следующего за операто-ром присвоения. Значения radius и axis получаются посредством вызова функции; значение areaвычисляется в строке.9.2.3.5 IIрае т о маыедоеанияКаждое локальное или глобальное правило, применимое к супертипу, применимо и к егоподтнпу(ам). Таким образом, подтип наследует все правила своего(их) супертипа(ов). Если под­тип имеет несколько супертипов, то подтип должен наследовать все правила, ограничивающиесупертипы.Невозможно изменить или удалить ни одно из правил, связаных с подтипом, через правилонаследования, но возможно добавить новые правила, которые еще более ограничивают подтип.Правила и ограниченияЭкземпляр объекта должен быть ограничен всеми ограничениями, установленными для ти­пов данных этого объекта. Если ограничения, установленные в двух (или более) типах данныхобъекта, противоречат друг другу, тогда не существует допустимого экземпляра, содержащего этитипы данных объекта. Реализация синтаксического анализатора языка EXPRESS, которая пре­ тендует на соответствие уровню 4, должна быть протестирована на наличие конфликтующих ог­раничений в типах данных объекта, которые могут сосуществовать в одном экземпляре.П р и м е р 52 — В следующем примере a graduate (дипломант) является a person (лично­стью), которая и учит, и учится. Дипломант наследует и атрибуты, и ограничения из супертипов|teacher (преподаватель) и student (студент)) вместе с атрибутами и ограничениями из их общегосупертипа (person). Дипломанту (graduate), в отличие от пре подавателя (teacher), не позволенопреподавать па курсах для дипломантов.SCHEMAS;ENTITY person:ss_no : INTEGER:born : date;DERIVEage : INTEGER := years since(born);UNIQUEun 1 : ss no;END_ENTITY;ENTITY teacherSUBTYPE OF (person);teaches : SET ( I;?) OF course;WHEREold : age >= 21;EN IDENTITY;ENTITY studentSUBTYPE OF (person);takes : SET | l:?j OF course;WHEREvoung : age >= 5;END_ENT1TY:ENTITY graduateSUBTYPE OF (student, teacher);WHERElimited : NOT (GRAD LEVEL IN teaches);END_ ENTITY;TYPE course = ENUMERATION OF (.... GRAD_LEVEL, ...);34
ГОСТ Р ИСО 10303-11-2000END.TYPE;END_SCHEMA; -- конец схемы S11 р и м е ч а н и с — Если подтип наследует взаимно противоречащие ограничения из супергнпов, то нссуществует соответствующего экземпляра этого подтипа, поскольку любой экземпляр нарушает одно из ог­раничений.9.2.4 О г р а н и ч е н и я п о д т и п а / с у п е р т и п аЭкземпляр типа данных объекта, являющийся подтипом, является экземпляром каждого изего супертипов. Экземпляр типа данных объекта, явно или неявно объявленный как супертип(см. 9.2.3.2), также может быть экземпляром одного или нескольких его подтипов (см. G.2).Синтаксис:294 subsuper = | supertype_constraint | | subtype _declaration | . 297 supertype.constraint = abstract_supertype_declaration | supertype_rule .156 abstract jsupeftype declaration = ABSTRACT SUPERTYPE | subtype constraint | .295 subtype_constraint = OF '(' supertype_expression ' ) ’ . 298 supertype_expression = supertype_factor { AN DOR supertypejactor | . 299 supertype_factor = supertype. temi { AND supenype_lerm } . 301 supertype_term = entity_rcf | on e_of| f supertype_expression ')' . 250 o n e jo f = ONEOF *(’ supertype_expression { Y supertype_expression } ')' .300 supertype_rule = SUPERTYPE subtype_constraint .Имеется возможность для установления ограничений, по которым могут был, реализованыграфы полтипов/супертинов. Эти ограничения задаются в супертипе посредством ограниченияSUPERTYPEВ приложении В описан формальный пояход к определению возможных комбинаций под-типов/супертнпов, экземпляров сущностей с учетом всех ограничений, которые описаны ниже.9.2.4.1 Абстрактные супертипыЯзык EXPRESS позволяет объявлять супертнпы. которые не предназначаются ятя непосред­ственного создания экземпляров. С этой целью в ограничение суп ер л та, определяющее типданных объекта, должна быть включена фраза ABSTRACT SUPERTYPE. Абстрактный супертнпне должен быть ограничен созданием экземпляра, связанного только с одним из подтипов.П р и м е ч а н и е — Эго означает, что схема, содержащая абстрактный супертнп, не имеющий каких-либо полтиной, является неполной и нс может быть использована для создания экземпляров без объявленияполтипов в ссылочной схеме.П р и м е р 53 — В транспортной модели транспортное средство (vehicle) может быть пред­ставлено абстрактным супертипом, поскольку все экземпляры этого типа данных объекта должныбыл, представлены его подтипами (например, наземное, водное транспортное средство и тд.).Тип данных объекта язя транспортного средства не должен образовывать независимых экземпля­ров объекта.ENTITY vehicleABSTRACT SUPERTYPE;END_ENTITY:ENTITY land basedSUBTYPE OF (vehicle);END_ENT1TY:ENTITY water basedSUBTYPE OF (vehicle);END_ENT1TY:9.2.4.2 ONEOFОграничение ONEOF устанавливает, что элементы списка ONEOF являются взаимоисклю­чающими. Ни для одного из элементов не может быть создан экземпляр с другим элементом из3S
ГОСТ Р ИСО 10303-11-2000данного списка. Каждый элемент должен быть выражением супертипа, которое относится кединственному подтипу типа данных объекта.___________________________________________________Синтаксис:250 one_of = ONEOF '(' supertype_expression { *,* supertype_expression } ')' . 298 supertype „expression = supertype „factor {AN DOR supertvpe_factor } . 299 supenype_factor = supertype, term { A ND supertype_temi} .301 supertype_term = entity_ref | one_of | '(' supertype_expression *)’ .Ограничение ONEOF может комбинироваться с другими ограничениями супертипа, что по­зволяет описывать сложные ограничения.П р и м е ч а н и е — На естественном языке фраза ONEOF(a, b, с) читается как: «экземпляр объектадолжен состоять из одного и только одного из типом данных объекта — а, Ь. с.П р и м е р 54 — Экземпляр супертипа может быть установлен посредством определения эк­земпляра только одного из его подтипов. Данное ограничение объявляется с использованием ог­ раничения ONEOF. Существуют различные виды домашних животных (pet), но ни одно из кон­ кретных домашних животных не может одновременно принадлежать к двум и более видам.ENTITY petABSTRACT SUPERTYPE OF (ONEOF(cat,rabbit, dog....) );name : pet_name;E NONENTITY;ENTITY catSUBTYPE OF (pet);END_ENTITY;ENTITY rabbitSUBTYPE OF (pet);END_ ENTITY;ENTITY dogSUBTYPE OF (pet);END_ENTITY;9.2.4.3 AN DORЕсли подтипы не являются взаимоисключающими, это означает, что экземпляр супертипаможет быть одновременно экземпляром более чем одного из его подтипов, отношение междуподтипами должно быть определено ограничением AN DOR.П р и м е ч а н и е — На естественном языке фраза b ANDOR с читается как: «экземпляр должен содер­жать типы b н/кли с».П р и м е р 55 - Личность (person) может быть одновременно и сотрудником (employee), истудентом (student) или только одним из них.ENTITY personSUPERTYPE OF (employee ANDOR student);END_ENTITY:ENTITY employeeSUBTYPE OF (person);END_ ENTITY:36
ГОСТ Р ИСО 10303-11-2000ENTITY studentSUBTYPE OF (person);END_ENTITY;9.2.4.4 ANDЕсли экземпляры супертипа классифицируются в несколько групп взаимоисключающихподтипов (то есть несколько группировок ON EOF), указывающих, что для полной классифика­ ции супертипа используется несколько признаков, отношение между группами должно быть оп­ ределено с использованием ограничения AND. Ограничение A N D используется только .тля соот­ ветствующих группировок, определенных другими ограничениями подтип/супертип.П р и м е ч а н и е — На естественном яиакс фраза b AND с читается как: «экземпляр должен одновре­менно состоять из типов Ь и с».П р и м е р 56 — Личность (person) может быть классифицирована как лицо мужского (male)или женского (female) пола, или как гражданин данного (citizen) или иностранного (alien) госу­дарства.ENTITY personSUPERTYPE OF (ONEOF(male, female) ANDONEOF(citizen, alien));ENDJENTITY;ENTITY maleSUBTYPE OF (person);ENDJENTITY;ENTITY femaleSUBTYPE OF (person);END_ENTITY:ENTITY citizenSUBTYPE OF (person);ENDjENTITY:ENTITY alienSUBTYPE OF (person);ENDjENTITY:9.2.4.5 Приоритет операторов супертиповПрисвоение значений выражениям супертипов производится слева направо, высший при­оритет имеют операторы, выполняемые первыми. В таблице X представлены правила приоритет­ности для операторов выражений супертипов. Операторы в одной строке имеют равный приори­тет. а строки упорядочиваются по мере понижения приоритета.Т а б л и ц а 8 — Приоритет оператора выражении супертипа П р и о р и т е т О п е р а т о р ы 1 ( ) O N E O F 2 A N D 3 A N D O RП р и м е р 57 — Следующие два выражения неэквивалентны:ENTITY хSUPERTYPE OF (a ANDOR b AND c);END_ENTITY;37
ГОСТ Р ИСО 10303-11-2000ENTITY хSUPERTYPE OF ((a AN DOR b) A N D c);END .ENTITY:9.2.4.6 Ограничения между подтипами no умолчаниюЕсли п объявлении объекта не упомянуто никакого ограничения супертипа, подтипы (приих наличии) должны использоваться одновременно, то есть как если бы все подтипы были быупомянуты в конструкция AN DOR.В случае ограничения супертипа, которое установлено для подмножества подтипов данногообъекта, ограничение должно быть установлено для этих подтипов по умолчанию, а для другихподтипов — через AN DOR.П р и м е р 58 — Модель из примера 55 эквивалентна данной модели, в которой использу­ются конструкции по умолчанию.ENTITY personEN IDENTITY:EN TITY employeeSUBTYPE OF (person);END_ ENTITY;ENTITY studentSUBTYPE OF (person);END_ENTITY:9.2.5 Н е я в н ы е о б ъ я в л е н и яКогда объявляется объект, одновременно с этим неявным образом объявляется конструктор(constructor). Идентификатор конструктора такой же как и идентификатор объекта и видимостьобъявления конструктора такая же, как и объявления объекта.Конструктор после своего вызова должен возвращать в точку вызова частное значениесложного объекта для данного типа данных объекта. Каждый атрибут этого частного значениясложного объекта задается фактическим параметром, передаваемым в вызов конструктора, еслифактический параметр является экземпляром объекта, а данный экземпляр объекта играет роль,описываемую атрибутом в частном значении сложного объекта. Конструктору должны переда­ваться только те атрибуты, которые явно определены в объявлении конкретного объекта.Синтаксис:195 entity_constructor = cntity_ref '(' | expression { V expression ) | ')' .Когда создается экземпляр сложного объекта (экземпляр объекта, встречающийся в графеподтип/супертип), конструкторы для каждого компонента объектов должны комбинироваться спомощью оператора 11 (см. 12.10).Правила и ограниченияa)Конструктор должен иметь один формальный параметр для каждого явного атрибута,объявленного в соответствующем типе данных объекта. Этим не охватываются атрибуты, насле­дуемые от супертипов и переобъявляемые в этом типе данных объекта.b)Порядок формальных параметров должен соответствовать порядку объявления явныхатрибутов в объекте.c)Параметрический тип данных для каждого формального параметра должен быть иден­тичен типу данных соответствующего атрибута.d)Если объект не имеет явных атрибутов, конструктору передается пустой список пара­метров (то есть круглые скобки должны присутствовать всегда).П р и м е ма нне — Это отличается от явно объявленных функций.e)Необязательным (OPTIONAL) атрибутам при неявном вызове конструктора могут при­сваиваться неопределенные (?) значения. Это означает, что явное значение таким атрибутам неприсвоено.38
ГОСТ Р ИСО 10303-11-20000Если в экземпляре сложного объекта имеется подтип, содержащий вычисляемые атри­буты. переобъявленные из явных атрибутов в супертипе, конструктору супертипа должны бытьзаданы значения для этих переопределенных атрибутов. Эти значения игнорируются в вычисляе­ мом значении.П р и м е р 59 — Допустим следующее объявление объекта:ENTITY point;х. у, z : REAL;END_ENTITY:неявно объявленный конструктор этого объекта может быть таким:FUNCTION point(x,y.z : REAL) :point;конструктор может использоваться для присвоения значений экземпляру этого типа данных объ­екта:CONSTANTorigin : point := point(0.0, 0.0, 0.0);END_CONSTANT;9.2.6 К о н к р е т и з а ц и я ( с п е ц и а л и з а ц и я )Конкретизация (специализация) является наиболее ограниченной формой исходного объяв­ления. Следующие случаи являются определенными конкретизациями:- объект-подтип является конкретизацией любого из его супертипов; -типы INTEGER и REAL являются двумя конкретизациями типа NUMBER: - тип INTEGER является конкретизацией типа REAL; - тип BOOLEAN является конкретизацией типа LOGICAL; - выражение LIST OK UNIQUE item является конкретизацией выражения LIST OF item: - выражение ARRAY OF UNIQUE item является конкретизацией выражения ARRAY OF item: - выражение ARRAY OF item является конкретизацией выражения ARRAY OF OPTIONALitem:- выражение SET OF item является конкретизацией выражения BAG OF item; -допустим, что сокращение AGG обозначает один из типов: ARRAY, BAG, LIST или SET,тогда выражение AGG OF item является конкретизацией выражения AGG OF original при усло­вии, что item является конкретизацией original;-допустим, что сокращение AGG обозначает один из типов: BAG, LIST или SET, тогда вы­ражение AGG |Ь : (| является конкретизацией выражения AGG [I : и| при условии, что b й 1 и/:» b <, и и / й t й и\-допустим, что сокращение BSR обозначает один из типов данных: BINARY. STRING илиREAL, тогда выражение BSR (length) является конкретизацией BSR;-выражение BSR (short) является конкретизацией BSR (long) при условии, что short мень­ше, чем long:-ти п BINARY, использующий в определении ключевое слово FIXED, является конкретиза­цией типа BINARY переменной длины;- тип STRING, использующий в определении ключевое слово FIXED, является конкретиза­цией типа STRING переменной длины;-определенный тип данных является конкретизацией исходного типа данных, используемо­го для объявления определенного типа данных.9.3 СхемаОбъявление SCHEMA определяет общую область действия для множества взаимосвязанныхобъявлений объектов и других типов данных.П р и м е р 60 — Геометрия (Geometry) может быть именем схемы, содержащей объявленияточек, кривых, поверхностей и других, связанных с ними, типов данных.Объявления могут появляться в объявлении схемы в произвольном порядке. Объявления, сделанные в одной схеме, могут стать видимыми в области действия другойсхемы посредством определения интерфейса, описанного в разделе II.39
ГОСТ I* ИСО 10303-11-2000Синтаксис:2X1 schema j le c l = SCHEMA schema,id *;* schema_body END_SCHEMA Y .280 schema_body = { interface_specification | | constant j le c l |{ declaration | rule j le c l } .228 interface_specification = referencejdause | usejdause .189 declaration = entity_decl | function decl | procedure_decl | type_decl. 9.4 КонстантаОбъявление константы используется для объявления поименованных констант. Областьюдействия идентификатора константы должна быть функция, процедура, правило или схема, в ко­торых встречается объявление константы. Поименованная константа, появляющаяся в объявле­ нии CONSTANT, должна иметь явную начальную загрузку (инициализацию), значение которойпоявляется в результате вычисления выражения. Поименованная константа может появляться вобъявлении другой поименованной константы. Синтаксис:185 constant_decl = CONSTANT constant_bodv { constant body } END_CONSTANT.184 constant body = constant J d Y base „typeexpression Y .171 base_type = aggregationjypes | sim plejypes | named_types . Правила и ограниченияa)Значение константы не должно изменяться после начальной загрузки.b)Любое пояаление поименованной константы вне пределов объяалення константы рав-иозначно пояалению начального значения конста1ггы.c)Выражение должно возвращать значение установленного основного типа.П р и м е р 61 — Следующие объявления констант яаляются правильными:CONSTANTthousand: NUMBER := 1000:million : NUMBER := thousand**2;origin: point:= point(0.0, 0.0, 0.0);EN D_CONSTANT; 9.5 Алгоритмы/Алгоритм является последовательностью операторов, выполнение которых приводит к неко­торому требуемому конечному состоянию. Существуют два вида алгоритмов, которые могут бытьопределены как функции и процедуры.Формальные параметры определяют исходные данные для алгоритма. В момент вызова ал­горитма фактические параметры обеспечивают фактические значения или экземпляры. Фактиче­ские параметры должны быть согласованы с формальными параметрами по типу, порядку и ко­личеству (числу).При необходимости локальных объяалений в алгоритме, они задаются непосредственно зазаголовком алгоритма. Такими объявлениями могут быть типы, локальные переменные, другиеалгоритмы и т.д.За локальными объявлениями следует тело алгоритма.9.5.1 Ф у н к ц и я Функиня является алгоритмом, который обрабатывает параметры и выдает единственное ре­зультирующее значение устаиоалеиного типа данных. При вызове функции (см. 12.8) в выраже­ нии вычисляется результирующее значение в точке вызова.Функция должна прерываться (завершаться) при выполнении оператора RETURN. Значе­ние выражения, связанное с оператором RETURN, определяется результатом, полученным привызове функции. Синтаксис:208 function,decl = function_head | algorithm_hcad | stmt 1 stmt ) END_FUNCTION.209 function_head = FUNCTION functionjd | T formal_parameter{ V formal parameter 1 *)' | Y parameterjype.206 formal^ parameter * parameterjd { *,* parameter J d } Y parameterjype . 253 parameterjype = generalizedjypes | nam edjypes | sim plejypes .163 algorithm,head = { declaration} | constant_dec! | | local decl | .189 declaration = entity j l e c l | function_decl | procedure.decl | type_decl.40
ГОСТ Р ИСО 10303-11-2000Правила и ограниченияa)В теле функции должен быть определен оператор RETURN для каждой из возможныхветвей проиесса обработки, выбираемых при обращении к данной функции.b)Каждый оператор RETURN в пределах функции должен определять выражение, по ко­торому вычисляется значение, возвращаемое в точку вызова.c)Выражение, определяемое в каждом из операторов RETURN, должно быть совместимопо присваиваемому значению с обьявленным возвращаемым типом функции.d) Функции не имеют побочных эффектов. Поскольку формальные параметры функции немогут быть определены как VAR, изменения этих параметров внутри функции не отражаются вточке вызова функции.e)Функция может изменять локальные переменные или параметры, которые обьявленыво внешней области действия, то есть если данная функция объявлена в заголовке(RULE).9.5.2 П р о ц е д у р аПроцедура является алгоритмом, который принимает параметры из точки вызова и обраба­тывает их некоторым образом для получения требуемого конечного состояния. Изменения пара­метров внутри процедуры отражаются в точке вызова только в том случае, если перед определе­нием формального параметра стоит ключевое слово VAR (изменяемый).Синтаксис:258 procedurc_decl = procedure_head | algorithmjiead | { stmt ) END .PROCEDURE.259 procedure_head = PROCEDURE procedure_id | ' ( ’ | VAR ) formal_parameter{| VAR | formal_parameter } ' ) ’ | Y .206 formal„parameter = parameter_id { Y parameter_id }parameter_type .253 parameter „type = generalized_types | named_types | simple_types .163 algorithm „head = { declaration } | constantdecl | | IocaI_decl | .189 declaration = entity_decl | function_decl | procedure_decl j type_decl .Правила и ограничения Процедуры могут изменять локальные переменные или параметры, которые обьявлены вовнешней области действия, то есть если данная процедура обьявлена в заголовке (algorithm_head)какой-либо функции (FUNCTION), процедуры (PROCEDURE) или правила ( RULE ).9.5.3 П а р а м е т р ыФункция или процедура могут иметь форм&тьные параметры. Каждый формальный пара­метр устанавливает имя и тип параметра. Имя яатяется идентификатором, который должен бытьуникальным в области действия функции или процедуры. Формальный параметр процедуры так­ же может быть обьяатен как VAR (изменяемый), чем устанаачивается. что если такой параметризменяется внутри процедуры, то изменение распространится и на точку вызова процедуры. Па­ раметры, не объяатенные как VAR. также могут быть изменены, но такое изменение не будетвидимым после передачи упраазения в точку вызов;! процедуры.Синтаксис:206 formal parameter = parameterjd { Y parameterjd 1parameterjype .253 parameterjype = generalized_types | named_types | simple_types .П р и м е р 62 — Следующие обьяатения показывают, как могут быть обьяатены формаль­ные параметры.FUNCTION dist(pl. р2 : point) : REAL;PROCEDURE midpt(pl. p2 : point; VAR result : point);Для обобщения типов данных, используемых для предстаатения формальных параметровфункций и процедур, применяются обобщенные типы данных (AGGREGATE и GENERIC) .Обобщенные сборные (агрегатные) типы данных также могут быть использованы для обобщенияисходных типов данных, допустимых для конкретных сборных (агрегатных) типов данных.41
ГОСТ I* ИСО 10303-11-20009.5.3.1 Агрегатный (сборный) тип данныхТип данных AGGREGATE является обобщением всех сборных (агрегатных) типов данныхКогда вызывается процедура или функция, формальный параметр которой определен каксборный (агрегатный) тип данных, переданный процедуре или функции фактический параметрдолжен быть одного из типов: ARRAY, BAG, LIST или SET. Тогда выполняемые действия долж­ны зависеть от типа данных фактического параметра.Для обеспечения того, чтобы два или более переданных параметра имели одинаковый типданных или чтобы возвращаемый тип данных был таким же. как у одного из переданных пара­метров. независимо от переданных фактических типов данных (см. 9.5.3.3), могут быть использо­ ваны метки типов.Синтаксис:161 aggregate j y p e = AGGREGATE |typejabel | OF parameter j y p e .306 typejabel = type labelJd | type J a b el_ r ef. 253 parameterjvpe * generalized j y p e s | named jy p e s | sim plejypes .Правила и ограниченияa)Тип данных AGGREGATE должен использоваться только как тип формального пара­метра функции или процедуры, или в соответствии с правилом (Ь).b)Тип данных AGGREGATE может также использоваться в качестве типа результатафункции или типа локальной переменной внутри функции или процедуры. Для такою примене­ния требуются ссылки на метки типов и необходимо ссылаться на метки типов, объявленныеформальными параметрами (см. 9.5.3.3).П р и м е р 63 — Данная функция написана для приема агрегата чисел. Функция должнавозвращать тот же тип, что и у переданного агрегата, содержащий масштабированные числа.FUNCTION scale(input:AGGREGATE : intvpe OF NUMBER:scalar : NUMBER) : AGGREGATE : intype OF NUMBER;LOCALresult : AGGREGATE : intype OF NUMBER:END_LOCAL;REPEAT i := LOINDEX(input) TO HllNDEX(input);result|i| := scalar ♦ input |i|;END.REPEAT:RETURN(result);E N D_FU N CTION;9.5.3.2 Обобщенный тип данныхТип данных GENERI C является обобщением исех других типов данных.Когда вызывается процедура или функция с обобщенным параметром, переданный факти­ческий параметр может не иметь тип данных GENERIC. Выполняемые операции зависят от типаданных фактического параметра.Для обеспечения того, чтобы два или более переданных параметра имели одинаковый типданных или чтобы возвращаемый тип данных был таким же, как у одного из переданных пара­метров. независимо от переданных фактических типов данных (см. 9.5.3.3), могут быть использо­ ваны метки типов.Синтаксис:218 genericjype = GENERI C |typejabel | .306 typejabel = ty p e ja b e ljd | typeJabel_ref.Правила и ограниченияa)Тип данных GENERI C должен использоваться только как тип формального параметрафункции или процедуры, или в соответствии с правилом (Ь).b )Тип данных GENERIC может также использоваться в качестве типа результата функцииили типа локальной переменной внутри функции или процедуры. Для такого применения требу­ ются ссылки на метки типов и необходимо ссылаться на метки типов, объявленные формальны­ми параметрами (см. 9.5.3.3).42
ГОСТ Р ИСО 10303-11-2000П р и м е р 64 — В этом примере показана обобщенная функция, которая складывает числаили вектораFUNCTION add(a,b:GENERlC:intype):GENER!C:intvpe;LOCALn r : NUMBER; — целое или действительноеvr : vector,END_ LOCAL;IF ( NUMBER* IN TYPEOF(a)) A ND ( NUMBER IN 7YPEOF(b)) THENnr ;= a+b;RETURN (nr);ELSEIF ( THIS SCHEMA.VECTOR* IN TYPEQF(a)) AND(*THJS_SCHEMA. VECTOR* IN TYPEOF(b)) THENvr := vector( a.i + b.i,a.j + b.j,a.k + b.k):RETURN(vr);END IF;E N D JF ; RETURN (?); — если мы получаем неправильные исходные данные, тогда возвращается неоп­ределенное значениеEND_ FUNCTION;9.5.3.3 Метки типовМетки типов должны использоваться для установления отношения между типом данныхфактического параметра п точке вызова с типами данных других фактических параметров, ло­кальных переменных или возвращаемого типа функции. Метки типов объявляются для типовданных AGGREGATE и GENERIC внутри объявления формального параметра функции илипроцедуры и на них могут быть даны ссылки типами данных AGGREGATE или GENERI C вобъявлении формального параметра, локальной переменной или возвращаемого типа функции.Синтаксис:306 type_Iabel = type_label_id | type_label_ref.Правила и ограниченияa)Первое появление метки типа в объявлении формального параметра объявляет меткуданного типа, все последующие появления метки данного типа являются ссылками на первуюметку.b)Параметры, переданные функции или процедуре, использующей ссылку на метку типа,должны быть совместимы с типом данных переданного параметра, в котором объявтена меткатипа.c)Типы данных локальных переменных и возвращаемых типов функций, которые ссыла­ются через метку типа на тип данных параметра, должны быть идентичными типу данных пара­метра, в котором объявлена метка типа.П р и м е р 65 - В этом примере показано, как метки типов могут использоваться при опре­делении функции и проверке совместимости результирующего типа вызываемой функции.ENTITY а;E*ND_ ENTITY;ENTITY b SUBTYPE OF (a);END_ENTITY:ENTITY c SUBTYPE OF (b);END_EN'I'ITY;43
ГОСТ I* ИСО 10303-11-2000FUNCTION test ( p i : GENERICx; p2 : GENERIC:x):GENERIC:x; л л л... —объявлениессылкассылкаEND_ FUNCTION;LOCALv_a : a := a(...); v_b : b := a(...)j |b(...); — 11 оператор, описанный в 12.11 v_c : C : = a(...)| |b(...)| |c(...); v_x : b;E N D . LOCAL;v_x := test(v_b. v_a); -- неверный v_a не совместим с типом b. v_x := test(v„a, v_b); — неверное присваивание, функция вернет тип а.В разделе 15 приведены другие примеры использования меток типов.9.5.3.4 Общие агрегатные (сборные) типы данныхОбщие сборные (агрегатные) типы данных образуют часть класса типов, называемых обоб­щенными типами данных. Они представляют собой конкретный сборный (агрегатный) тип дан­ ных (ARRAY, BAG, LIST и SET) с ослабленными ограничениями, которые обычно налагаютсяпри определении этот сборного (агрегатного) типа данных (то есть general_llst_type являетсяобобщением list_type).Синтаксис:212 general _aggregation_types = general.array_tvpe | general_bag type |general list type | general set type .213 general_array_type = ARRAY | bound_.spec | OF | OPTIONAL | ] UNI QUE |parameter_type .176 bound_spec =bound_lbound._2 *|* .174 bound_l = numeric. expres.sion . 175 bound_2 = numeric_expression .253 parameter „type = generalized_types | named_types | simple_types . 214 general. b agjype = BAG | bound, spec | OF parameter type . 215 general_list_type = LIST | bound_spec | OF | UNI QUE | parameter_type . 217 general_set_type = SET | bound_spec | OF parameter_type .Когда общие сборные (агрегатные) типы данных используются как тип данных формальногопараметра, допускаются следующие фактические параметры функций и процедур:- массивы, безотносительно к диапазону значений индексов. Это означает, что в определе­нии формального параметра для массива не определено bound_spec.П р и м е ч а н и с — Ятя того чтобы определить действительные границы массива, в алгоритме должныиспользоваться функции I1IINDEX и LOINDEX;-агрегации, у которых исходными типами могут быть GENERIC, AGGREGATE или общийсборный (агрегатный) тип данных.П р и м е р 66 — В этом примере показано, как SET может быть записан в объявлении фор­мального параметра; это не может быть описано в объявлении атрибута, поскольку исходный типдля SET не может включать GENERIC.FUNCTION dimensions(input:SET |2:3J OF GEN ERIC):INTEGER:9.5.4 Л о к а л ь н ы е п е р е м е н н ы еПеременные, локальные по отношению к данному алгоритму, обьяазяются после ключевогослова LOCAL. Локальная переменная видима только в области действия алгоритма, в которомона объявлена. Локальным переменным могут быть присвоены значения, и эти переменные мо­гут присутствовать в выражениях.44
ГОСТ Р ИСО 10303-11-2000 Синтаксис:239 localjdecl = LOCAL local„variable { local,variable ) END,LOCAL.240 local_variable = variable, id {variable J d }parameter,type| *:=’ expression ).253 parameterjype = generalized_types | named_types | simple_types .Инициализация (начальная загрузка) локальных переменных В момент вызова алгоритма псе локальные переменные имеют неопределенное (?) значениедо тех пор. пока явно не залам инициализатор. Если инициализатор залам, то локальной пере­менной при вызове алгоритма присваивается начальное значение.П рн м е р 67 — Переменной r_result присвоено начальное значение 0.0LOCALг result : REAL := 0.0; i result: INTEGER;E N D , LOCAL;EXISTS(r_result) - TRUE EXISTS(i_result) — FALSE подразумевается, что присвоенных значений нет9.6 ПравилоПравила позволяют определить ограничения, накладываемые внутри области действия схе­мы на один или более типов данных объекта. Локальные правила (то есть правила уникальностиограничений и области значений в объявлении объекта) объявляют ограничения, налагаемые от­дельно на каждый экземпляр типа данных объекта. Объявление RULE позволяет определить ог­раничения. налагаемые совокупно на всю область значений типа данных объекта или на экземп­ляры нескольких типов данных объекта. Одним из применений RULE яатяется согласованноеограничение значений атрибутов, присутствующих в различных объектах.При объявлении правила ему присваивается имя и определяется, к каким объектам оно от­носится.Синтаксис:277 rule_decl = rule, head 1 algorithm „head | { stmt } \vhere_clause END_RULE.278 iule_head = RULE ru lejd FOR '( ' entity_ref {entity_ref} ')'163 algorithm_head = { declaration } | constant_decl | | Iocal_dec! | .189 declaration = entity_decl | function_dcc! | procedure_decl | type_decl.Тело правила состоит из локальных объявлений, исполняемых операторов и правил облас­тей значений. Окончательная формулировка правила показывает, должно ли быть удовлетвореноили нет некоторое глобальное ограничение. Правило оценивается посредством исполнения опе­ раторов с последующей оценкой каждого из правил областей значений. Если правило нарушенодля набора экземпляров типов данных объекта, переданных в качестве параметров, то экземпля­ры не соответствуют EXPRESS-схеме.Правила и ограниченияa)Каждое правило области значений должно определяться логическим (LOGICAL) илинеопределенным (?) значением.b)Выражение верно, когда ему присвоено значение TRUE; выражение неверно, когда емуприсвоено значение FALSE: и оно ни верно, ни неверно, когда ему присвоено неопределенное (?)значение или значение UNKNOWN.c)Правило области значений не должно быть нарушено для верного набора экземпляровобъектов типов данных объекта, определенных в заголовке правила.П р и м е р 68 — Следующее правило требует, чтобы в первом и седьмом октантах находи­лось равное количество точек.RULE point match FOR (point); LOCALfirstjo ct, seventh_oct: SET OF POINT := ||; -- пустой набор точек (see 12.9)45
ГОСТ I* ИСО 10303-11-2000END_ LOCALfirst.oct := QUERY(temp <• point | (temp.x > 0) AND(temp.у > 0) AND(temp.z > 0) ) ;seventh_oct := QUERY(temp <* point | (temp.x < 0) AND(temp.y < 0) AND(temp.z < 0) );WHERESlZEOF(first_oct) = SIZEOF(seventh oct) ;END_RULE;П р и м е р 69 — Правило может быть использовано для установления общего значения,уникального для атрибутов объекта.ENTITY Ь;а! : с;а2 : d;аЗ : f;UNI QUEurl : al. a2;EN D. ENTITY:Общее ограничение уникальности в Ь применяется к экземплярам с и d. Следующее прави­ло еще более ограничивает основное значение общей уникальности.RULE yu FOR (b);ENTITY temp;a l : c;a2 : d;END ENTITY;LOCALs : SET OF temp := ||;END LOCAL; REPEAT i := I TO SIZEOF(b);s := s + tem p(b|i).al, b|i|.a2);END REPEAT;WHEREwrl : VALUE UNIQUE(s);EN D . RULE;Неявное объявление Внутри RULE каждая совокупность неявно объявляется как локальная переменная, содер­жащая набор всех экземпляров поименованного объекта в области значений, то есть набор эк­ земпляров объекта, подчиняющихся данному правилу.Синтаксис:254 population = en tity_ief.Правила и ограниченияСсылки на конкретную совокупность < population) могут быть даны только в глобальном пра­виле, которое содержит ссылку на соответствующий тип данных объекта в заголовке правила.П р и м е р 70 — Рассмотрим следующее объявление:RULE coincident FOR (point);неявное объяатение выглядело бы:LOCALpoi nt : SET OF point:END_ LOCAL;46
ГОСТ Р ИСО 10303-11-2000 10 Область действия и видимостьEXPRESS-объя олеине образует идентификатор, который может быть использован для ссыл­ки на объявленный элемент из других частей данной схемы (или из других схем). Некоторыеконструкции EXPRESS неявно объявляют элементы языка EXPRESS, присваивая им идентифи­ каторы. В тех областях, из которых можно ссылаться на идентификатор объявленного элемента,считают объявленный элемент видимым в этой области. Ссылки на элемент могут появлятьсятолько там, где видимым является его идентификатор. Правила видимости приведены в 10.2.Подробная информация о ссылках на элементы с использованием их идентификаторов приведенав 12.7.Некоторые элементы EXPRESS образуют фрагмент (блок) текста, называемый областьюдействия элемента. 'Эта область действия ограничивает видимость идентификаторов, объявленныхвнутри нее. Области действия могут быть вложенными, то есть элемент языка, образующий о б ­ласть действия, может входить в область действия другого элемента. Существуют ограничения,при которых элементы могут появляться в области действия конкретного элемента языкаEXPRESS. Эти ограничения, как правило, определяются синтаксисом EXPRESS (см. приложение А).Для каждого из элементов, указанных в таблице 9, в последующих подразделах установленыграницы образованной области действия, при ее наличии, и видимость объявленного идентифи­катора как в общих терминах, так и с конкретными деталями.Т а б л и ц а 9 — Области действия и идентификаторы определенных элементовЭлементОбласть действииИлсмтификигарalias statementattributeconstantenumerationentityfunctionparameterprocedurequery expression• >>repeat statement*1). 2)rule,3»rule labelschematypetype labelvariable>> Идентификатором является неявно объявленная переменная в области действия объявления.2> Переменная объяатястся неявно только тогда, когда установлен инкрементный контроль.J) Неявное объявление переменной проводится для всех объектов, которые ограничены правн-лом.10.1 Правила областей действияНиже приведены общие правила, применяемые ко всем формам областей действия, сущест­вующим в языке EXPRESS; список элементов языка, образующих области действия, приведен втаблице 9.Правила и ограниченияa)Все объявления должны присутствовать в пределах области действия.b)В пределах единственной области действия идентификатор может быть объявлен илиявно импортирован (см. раздел 11) только один раз. Идентификатор объекта или типа, явно им­портированный в данную схему более одного раза разными способами, с использованием одногои того же исходного объявления, учитывается только один раз.47
ГОСТ Г ИСО 10303-11-2000с)Области действия должны быть вложены корректно, то есть перекрытие областей дейст­вия не допускается. (Это определено синтаксисом языка).В настоящем стандарте максимально допустимая глубина вложения областей действия неустановлена, но разработчики синтаксических анализаторов языка EXPRESS могут установитьмаксимальную глубину вложения областей действия.10.2 Правила видимостиНиже приведены правила видимости идентификаторов. Список элементов языка EXPRESS,объявляющих идентификаторы, приведен в таблице 9. Правила видимости идентификаторов по­именованных типов данных несколько отличаются от правил для других идентификаторов; этиотличия описаны в 10.2.2.10.2.1 О б щ и е п р а в и л а в и д и м о с т иСледующие общие правила применимы ко всем идентификаторам, кроме идентификаторовпоименованных типов данных, на которые правило (d) не распространяется.Правила и ограниченияa)Идентификатор виден в той области действия, в которой он объявлен. Эта область дей­ствия называется локальной областью действия идентификатора.b)Если идентификатор видим в данной области действия, он также видим во всех облас­тях действия, определенных внутри данной области в соответствии с правилом (d).c)Идентификатор не видим в любой области действия вне его локальной области дейст­вия в соответствии с правилом (0-d)Когда идентификатор /, видимый в области действия /’. переобъянлен в некоторойвнутренней области действия Q, вложенной в Р. в области действия ^ и в любых областях дейст­ вия, объяатенных в (Л будет виден только идентификатор /, объявленный в области действия Q.Идентификатор /, объявленный в области действия Р, является видимым в области действия Р ив любых внутренних областях действия, которые не переобъявляют /.e)Считается, что встроенные константы, функции, процедуры и типы языка EXPRESSобъяалены в виртуальной универсальной области действия. Все схемы являются вложенными вэту область действия. Идентификаторы, относящиеся к встроенным константам, функциям, про­ цедурам, типам языка EXPRESS и схемам, видимы во всех областях действия, определенных вязыке EXPRESS.0Идентификаторы перечисляемых элементов, объявленные в области действия опреде­ленного типа данных, видимы в следующей внешней области действия, за исключением случая,когда следующая внешняя область действия содержит объявление того же идентификатора длянекоторого другого элемента.П р и м е ч а н и е — Если следующая внешняя область действия содержит объявление того же иденти­фикатора, перечисляемые элементы остаются доступными, но к ним добавляется идентификатор опреде­ленного типа данных (см. 12.7.2).g)Объявления из одной схемы могут быть видимыми для элементов другой схемы черезопределение (спецификацию) интерфейса (см. раздел 11).П р и м е р 71 — В следующей схеме показаны примеры идентификаторов и ссылок на них всоответствии с выше приведенными правилами.SCHEMA example;CONSTANTb ; INTEGER ;= I ;c : BOOLEAN ;= TRUE ;E N D_CO N STANT;TYPE enum = ENUMERATION OF ( e. f, g );END_TYPE;ENTITY entity I;a : INTEGER;WHEREwrl: a > 0 ; — выполняется правило (a) ; а видим в локальной области действияwr2: а <> b ; — выполняется правило (b) : b видим из внешней области действияEND_ENT1TY;48
ГОСТ Р ИСО 10303-11-2000ENTITY entity2;с : REAL; — выполняется правило (с) : здесь константа с невидимаEND_ENTITY;ENTITY d:aitrl : INTEGER;aitr2 : enum;WHEREd : ODD(attrl); — выполняется правило ( d ) : функция ODD видима вездеw r : attr2 <> e; — выполняется правило (e) ; e видим вне области действия.— определенной типом enumEND_ENT1TY;END SCHEMA;10.2.2П р а в и л ав и д и м о с т ии д е н т и ф и к а т о р о вп о и м е н о в а н н ы х т и п о вд а н и ы хИдентификаторы поименованных типов данных подчиняются тем же правилам видимости,что и прочие идентификаторы, за одним исключением. Этим исключением является правило ви­димости (d). Идентификатор I объекта или определенного типа данных, объявленный в областидействия Р, остается видимым во внутренней области действия Q. даже если он переопределяетсяв области действия Q, тем самым обеспечивается, что:a)область действия Q определяется объявлением объекта, а идентификатор / объяатяетсякак атрибут в данной области, илиb)область действия Q определяется объявлением функции, процедуры или правила, аидентификатор / объяатяется как формальный параметр или переменная в данной о б л а е т .Г! ри м е р 72 — В объекте entity 1 d относится как к типу данных объекта, так и к атрибуту.SCHEMA example;ENTITY d;attrl ; REAL:END_ENTITY;ENTITY entity 1;d : d; — d в данной области действия яатяется и объектом и атрибутомEND_ENTITY;END SCHEMA;10.3 Явные правила для элементовВ этом разделе дается более подробное описание того, как общие правила областей дейст­вия и видимости применяются к различным элементам языка EXPRESS.10.3.1 О п е р а т о р п е р е и м е н о в а н и я (alias statement)Определение оператора ALIAS (переименования) см. в 13.2.Видимость. Идентификатор, неявно объявленный в операторе переименования, является ви­димым в области действия, определенной оператором переименования.Область действия. Оператор переименования определяет новую область действия. Эта о б ­ласть действия простирается от ключевого слова ALIAS до ключевого слова END ALIAS, котороезавершает данный оператор переименования.Объявления. Следующие элементы языка EXPRESS могут объявляться идентификаторами вобласти действия оператора переименования:- оператор переименования; - выражение запроса; - оператор цикла.10.3.2 А т р и б у т (attribute)Видимость. Идентификатор атрибута яатяется видимым в области действия объекта, в кото­рой он объявлен, и в областях действия всех подтипов данного объекта.10.3.3 К о н с т а н т а (constant)Видимость. Идентификатор константы яатяется видимым в области действия функции,процедуры, правила или схемы, в которой он объяатен.49
ГОСТ I* ИСО 10303-11-200010.3.4 Э л е м е н т п е р е ч и с л е н и я (enumeration item)Видимость. Идентификатор элемента перечисления является видимым в области действияфункции, процедуры, правила или схемы, в которой объявлен его тип. Это является исключениемиз правила видимости 10.2.1 Г. Идентификатор не должен объявляться с любым другим предназна­чением в данной области действия, за исключением объявления другого перечисляемого типа дан­ных в той же области действия. Если один и тот же идентификатор объявлен двумя перечисляемы­ ми типами данных как элемент перечисления, то при ссылке на элемент перечисления следует д о­бавлять идентификатор типа данных для устранения неоднозначности ссылки (см. 8.4.1).10.3.5 О б ъ е к т (entity)Видимость. Идентификатор объекта является видимым в области действия функции, проце­дуры, правила или схемы, в которой объявлен его тип. Идентификатор объекта остается видимымпри условиях, определенных 10.2.2, во внутренних областях действия, в которых переобъявленданный идентификатор.Область действия. Объявление объекта определяет новую область действия. Данная областьдействия простирается от ключевого слова ENTITY до ключевого слова E N D , ENTITY, котороезавершает данное объявление объекта. Атрибуты, объявленные в супертипе объекта, являютсявидимыми в объекте подтипа за счет наследования.П р и м е ч а н и е — Область действия объекта подтипа не считается вложенной в область действиясупертипа.Объявления. Следующие элементы языка EXPRESS могут объявляться идентификаторами вобласти действия объявления объекта:-атрибуты (явные, вычисляемые и инверсные); - метка правила (правил уникальности и областей значений); - выражение запроса (внутри вычисляемых атрибутов и правил областей значений).П ри м е р 73 — Идентификаторы атрибута batt в двух объектах не конфликтуют, посколькуони объявлены в разных областях действия.ENTITY entity 1;aait : INTEGER;batt : INTEGER;END.ENT1TY;ENTITY entity2;a: entity I;batt : INTEGER;END_ENTITY;П р и м е р 74 — Следующая спецификация недопустима, поскольку идентификатор атрибутаaatt в области действия объекта illegal одновременно и наследуется, и объявляется (см. 9.2.3.3).Метки правила lab в двух объектах не конфликтуют, поскольку они объявлены в разных областяхдействия; верный экземпляр объекта illegal, игнорируя ошибку с атрибутом aatt, подчиняетсяобоим правилам областей значений.ENTITY may_be_ok;quantity : REAL;aatt: REAL;WHERElab : quantity > = 0.0;END_ENTITY;ENTITY illegalSUBTYPE OF (may be ok);aatt ; INTEGER;batt : INTEGER;WHERElab : batt < 0;END.ENT1TY:50
ГОСТ Р ИСО 10303-11-200010.3.6 Ф у н к ц и я (function)Видимость. Идентификатор функции является видимым в области действия функции, про­цедуры. правила или схемы, в которой он объявлен.Область действия. Объявление функции определяет новую область действия. Эта областьдействия простирается от ключевого слова FUNCTION до ключевого слова END_FUNCTION,завершающего объявление данной функции.Объявления. Следующие элементы языка EXPRESS могут объявляться идентификаторами вобласти действия объявления функции:- оператор переименования; - константа; - объект; - перечисление; - функция; - параметр; - процедура; - выражение запроса;- оператор возврата;- тип; - метка типа; - переменная.П р и м е р 75 — Следующие определения неверны, поскольку идентификатор формальногопараметра рапн используется одновременно и как идентификатор локальной переменной.FUNCTION illegaKparm : REAL) : LOGICAL; LOCALparm : STRING;END_ LOCAL;END_ FUNCTION;10.3.7 П а р а м е т р (parameter)Видимость. Идентификатор формального параметра является видимым в области действияфункции или процедуры, в которой он объявлен.10.3.8 П р о ц е д у р а (procedure)Видимость. Идентификатор процедуры является видимым в области действия функции,процедуры, правила или схемы, в которой он объявлен.Область действия. Объявление процедуры определяет новую область действия. Эта областьдействияпростираетсяотключевогословаPROCEDUREдоключевогословаENDEPROCEDURE, завершающего объявление процедуры.Объявления. Следующие элементы языка EXPRESS могут объявляться идентификаторами во б л а е т действия объявления процедуры:- оператор переименования; - константа; - объект; - перечисление; - функция; - параметр; - процедура; - выражение запроса; - оператор возврата; - тип; - метка типа; - переменная.10.3.9 В ы р а ж е н и е з а п р о с а (query expression)Определение выражения QUERY (запрос) см. в 12.6.7.Видимость. Идентификатор, неявно объявленный в выражении запроса, является видимым вобласти действия, определенной выражением запроса.51
ГОСТ I* ИСО 10303-11-2000Область действия. Выражение запроса определяет новую область действия. Эта область дей­ствия простирается от открывающей круглой скобки '<* после ключевого слова QUERY до за­крывающей круглой скобкизавершающей данное выражение запроса.Объявления. Следующие элементы языка EXPRESS могут объявляться идентификаторами вобласти действия выражения запроса:- выражение запроса.10.3.10 О п е р а т о р ц и к л а (repeat statement)Определение оператора REPEAT см. в 13.9.Видимость. Идентификатор, неявно объявленный в операторе цикла, управляющем прира­щением. является видимым в области действия данного оператора цикла.Область действия. Оператор цикла определяет новую область действия. Эта область дейст­вия простирается от ключевого слова REPEAT до ключевого слова END_REPEAT, завершающегооператор цикла.Объявления. Следующие элементы языка EXPRESS могут объявляться идентификаторами вобласти действия оператора цикла:- оператор переименования; - выражение запроса; - оператор цикла.10.3.11 П р а в и л о (rule)Видимость. Идентификатор правила является видимым в области действия схемы, в которойон правила объявил.П р и м е ч а н и е — Идентификатор правила может быть использован только для реализации. В языкеEXPRESS отсутствуют механизмы ссылки на идентификатор правила.Область действия. Объявление правила определяет новую область действия. Эта областьдействия простирается от ключевого слова RULE до ключевого слона END_RULE. завершающе­го объявление правила.Объявления. Следующие элементы языка EXPRESS могут быть объявлены идентификатора­ми в области действия объявления правила:- оператор переименования; - константа; - объект; - перечисление; - функция; - параметр; - процедура; - выражение запроса; - оператор возврата; - метка правила; - тип; - метка типа; - переменная.П р и м е р 76 — Следующее определение неверно, так как идентификатор point относится кобъекту, на который распространяется правило, неявно объявлен как переменная внутри правилаи в то же время явно объявлен как локальная переменная.RULE illegal FOR (point); LOCALpoint : STRING;E N D , LOCAL;END_RULE;10.3.12 М е т к а п р а в и л а (rule label)Видимость. Метка правила является видимой в области действия объекта, правила или типа,в которой она объявлена.П р и м е ч а н и е — Метка правила используется только в реализации. В языке EXPRESS отсутствуютмеханизмы ссылки на метку правила.52
ГОСТ Р ИСО 10303-11-200010.3.13 С х е м a (schema)Видимость. Идентификатор схемы является видимым для всех других схем.П р и м е ч а н и е — В соответствующей реализации может применяться механизм обобщения областейдействия, который позволяет трактовать группу схем как область действия.Область действия. Объявление схемы определяет новую область действия. Эта область дей ­ствия простирается от ключевого слова SCHEMA до ключевого слова END_SCHEMA, завер­шающе го объявление данной схемы.Объявления. Следующие элементы языка EXPRESS могут объявляться идентификаторами вобласти действия объявления схемы:- константа; - объект; - перечисление; -функция; - процедура; - правило; - тип.П р и м е р 77 — Следующая схема неверна по двум причинам. Во-первых, идентификаторadef импортирован в схему с помощью оператора USE, но одновременно был объявлен как имятипа. Во-вторых, имя fdef используется как идентификатор в двух объявлениях (одно для объекта,а другое для функции).SCHEMA incorrect;USE FROM anotlier_schema (adef);FUNCTION fdef(parm : NUMBER) ; INTEGER;END_FUNCTION;TYPE adef = STRING;END_TYPE;ENTITY fdef;E*ND_ENTITY;END_SCHEMA;10.3.14 Т и п (type)Видимость. Идентификатор типа является видимым в области действия функции, процеду­ры. правила или схемы, в которой он объявлен. Идентификатор типа остается видимым при ус­ловиях. определенных в 10.2.2. во внутренней области действия, которая переобъяаляет данныйидентификатор.Область действия. Объявление типа определяет новую область действия. Эта область дейст­вия простирается от ключевого слова TYPE до ключевого слова END_TYPE, завершающего объ­явление типа.Объявления. Следующие элементы языка EXPRESS могут объявляться идентификаторами вобласти действия объявления типа:- перечисление; - метка правила (правило области значений); - выражение запроса (внутри правила области значений).10.3.15 М е т к а т и п а (type label)Видимость. Метка типа является видимой в области действия функции или процедуры, вкоторой она объявлена. Метка типа неявно объявляется при первом ее появлении в области дей­ствия, которая должна присутствовать в определении (спецификации) формального параметра.На объявленную таким образом метку типа можно ссылаться либо в определении формальногопараметра, либо в локальных объявлениях функции или процедуры. Если метка типа объявлена вфункции, на метку типа могут делаться ссылки в спецификации возвращаемого типа функции.10.3.16 П е р е м е н н а я (variable)Видимость. Идентификатор переменной является видимым в области действия функции,процедуры или правила, в которой она объявлена.53
ГОСТ Г ИСО 10303-11-2000 11 Спецификация интерфейсаВ этом разделе описаны конструкции, позволяющие элементам, объявленным п одной схе­ме, стать видимыми в другой схеме. Существуют два вида спецификации интерфейса: USE (при­менить) и REFERENCE (сослаться), которые обеспечивают видимость элементов. СпецификацияIJSE позволяет элементам, объявленным в одной схеме, иметь независимые экземпляры в схеме,определяющей конструкцию USE.Экземпляр объекта считается независимым, если он не играет роль, предписываемую атрибу­том другого экземпляра объекта, то есть функция ROLESOF (см. 15.20) для независимого экземп­ляра объекта будет возвращать пустой набор. Тип данных объекта, который был объявлен локальнов схеме или с использованием USE в данной схеме, может быть применен для независимого созда­ ния экземпляров или играть роль, предписываемую атрибутом объекта в данной схеме.Объекты, которые явно импортированы с помощью спецификации REFERENCE или им­портированы в схему неявно, должны создаваться только экземпляры, играющие роль, описан­ ную атрибутом реализации объекта в схеме.Синтаксис: 228 interface_specification = refen?nce_clause | use_clause .Внешним объявлением является любое объявление (например, объекта), которое появляетсяво внешней схеме (любой схеме, отличной от данной схемы).Другое различие между двумя видами интерфейса состоит в том, что спецификация USEприменяется только к поименованным типам данных (типам данных объекта и определеннымтипам данных), в то время как спецификация REFERENCE применяется ко всем объявлениям,за исключением правил и схем.Внешний элемент языка EXPRESS может быть в данной схеме затаи новым именем. Наэлемент языка EXPRESS в данной схеме следует ссылаться по новому имени, заданному послеключевого слона AS.11.1 Спецификация интерфейса USEТип данных объекта или определенный тип данных, объявленный во внешней схеме, стано­вится видимым посредством использования спецификации USE. Спецификация USE задает имявнешней схемы и факультативно объявленные в ней имена типов данных объекта или опреде­ленных типов данных. Если в спецификации USE не определен named_types, все поименованныетипы данных, объявленные или используемые внешней схемой, трактуются как объявленные ло­кально в данной схеме.Синтаксис:313 use_clau.se = USE FROM schema_ref | '(' named jyp e_or_ re name{ Y named_type_or_rename ) ')' | Y -246 named _type_or_rename = nam edtypes | AS ( en tiiy jd | type J d ) | .11.2 Спецификация интерфейса REFERENCEСпецификация REFERENCE дает возможность сделать видимыми в данной схеме следую­щие элементы языка EXPRESS, объявленные во внешней схеме:- константа; - объект; - функция; - процедура; - тип.Спецификация REFERENCE задает имя внешней схемы и, факультативно, имена элементовязыка EXPRESS, объявленные в ней. Если имена не установлены, то все элементы языкаEXPRESS, объявленные или используемые внешней схемой, являются видимыми в текущей схеме.Синтаксис:267 relerence_clause = REFERENCE FROM schema_ref | ’(* resource_or_rename{ Y resource_or_rename ) ')' I Y •274 resource_or_rename = resource._ref | AS rename J d | .275 resource_ref = constant_ref | entity_ref | function_ref ] procedure_ref |type_ref.270 rename J d = constant J d | en tityjd | functionjd | procedure J d | type J d .54
ГОСТ Р ИСО 10303-11-2000Внешние объявления в спецификации REFERENCE не рассматриваются как локальныеобъявления, а поэтому для них не могут быть созданы независимые экземпляры, по могут бытьсозданы экземпляры, играющие роль, описанную атрибутом объекта в данной (текущей) схеме.11.3 Взаимодействие USE и REFERENCEЕсли тип данных объекта или определенный тип данных одновременно импортированы вданную схему с использованием USE и REFERENCE, спецификация USE имеет приоритет.П р и м е р 78 — ОператорыUSE FROM si ( аI);REFERENCE FROM si (al);al трактуется как локальное объявление.Когда поименованный тип данных импортирован USE, этот поименованный тип данныхможет быть импортирован из данной схемы другой схемой с USE или REFERENCE (то есть воз­можен последовательный импорт из схемы в схему с помощью спецификации USE).П р и м е р 79 — Даны следующие два объявления схем:SCHEMA si;ENTITY e l; END ENTITY;END_SCHEMA;SCHEMA s2;USE FROM si (el AS e2); END_SCHEMA:следующие спецификации эквивалентны.SCH E MA s3;SC H E MA s3;USE FROM si (el AS e2);USE FROM s2 (e2);END_SCHEMA;.END_SCHEMA;Поскольку элементы языка EXPRESS, импортированные посредством REFERENCE, нерассматриваются как элементы, имеющие локальное объявление, их дальнейший импорт невоз­можен.11.4 Неявные интерфейсыВнешние объявления могут ссылаться на идентификаторы, которые не являются видимымив данной схеме. Эти элементы языка EXPRESS, на которые ссылаются неявно, необходимы дляпонимания данной (текущей) схемы, но они не видимы для элементов языка EXPRESS, объяв­ленных в данной схеме. Каждый импортированный неявно элемент также может ссылаться надругие элементы языка EXPRESS, которые не яаляются видимыми в данной схеме; эти элементыязыка EXPRESS также необходимы дтя полного понимания данной (текущей) схемы.П ри м е р 80 — Неявно импортированные элементы и последующие неявные интерфейсы.SCHEMA si;TYPE 11 = REAL:END_TYPE;ENTITY e l;a : tl;END_ENTLIY;ENTITY e2;al : e l;END_ENTITY;END_SCHEMA:SCHEMA s2;REFERENCE FROM si (e2);55
ГОСТ I* ИСО 10303-11-2000ENTITY еЗ;аЗ : е2;END_ENT1TY;END_SCHEMA:Объект е2 используется как тип данных атрибута аЗ. Поскольку в определении е2 использу­ется e l , объект e l неявно импортируется схемой s2. Однако поскольку c l не был явно импорти­рован в схему s2. e l не может упоминаться в схеме s2. Также, в определении e l используется t l,следовательно, 11 также неявно импортирован в схему s2.В последующих пунктах слово «импортирован* будет использоваться в смысле неявного им­портирования или импортирования посредством USE или REFERENCE.11.4.1 И н т е р ф е й с ы к о н с т а н тПри импорте констант неявно импортируются:-любые определенные типы данных, используемые в объявлении импортируемой константы;-любые типы данных объекта, используемые в объяатении импортируемой константы;-любые константы, используемые в объявлении импортируемой константы; -любые функции, используемые в объяатении импортируемой константы.11.4.2 И н т е р ф е й с ы о п р е д е л е н н ы х т и п о в д а н н ы хПри импорте определенного типа данных неявно импортируются:-любые определенные типы данных, используемые в объяатении импортируемого типа, заисключением случая, когда импортируемым типом яагяегся тип SELECT; в результате импортаэтого типа ни один из выбираемых элементов не будет импортирован неявно:-любые константы или функции, используемые в объяатении импортируемого определен­ного типа данных;-любые константы или функции, используемые в правилах областей значений импортируе­мого определенного типа данных;-любые определенные типы данных, предегаатенные типом данных SELECT, чей списокпыбора содержит импортируемый определенный тип данных.П ри м е р 81 — Неявный импорт определенного типа данных через тип данных SELECT.SCHEMA si;TYPE sell = SELECT (el.tl);END.TYPE;TYPE tl = INTEGER;END.TYPE;ENTITY el;END_ENTITY;END_SCHEMA;SCHEMA s2;REFERENCE FROM si (tl): END.SCHEMA:Схема s2 содержит явную ссылку на t l , а тип sell предстаатен типом SELECT, содержащимtl; sell яатяется неявной ссылкой.11.4.3 И н т е р ф е й с ы т и п о в д а н н ы х о б ъ е к т о вПри импорте типа данных объекта неявно импортируются:- все типы данных объекта, которые яатяются супертипами импортируемого типа данныхобъекта;П р и м е ч а н и е — Подтипы импортируемого тина данных объекта неявно импортированы не будут,даже если они входят в выражение SUPERTYPE OF:-все правила, ссылающиеся на импортируемый тип данных объекта и не на один или не­сколько других типов данных объекта, все из которых явно или неявно импортиртированы вданную схему;56
ГОСТ Р ИСО 10303-11-2000-любые константы, определенные типы данных, типы данных объекта или функции, ис­пользуемые в объявлении атрибутов импортируемого типа данных объекта;-любые константы, определенные типы данных, типы данных объекта или функции, ис­пользуемые в правилах области значений импортируемого типа данных объекта;-любые определенные типы данных, представленные типом данных SELECT, имеющие всписке выбора импортируемый тип данных объекта.Графы подтип/супертип м о т быть усечены в результате следования только связямSUBTYPE OF при комплектовании неявных интерфейсов импортируемою типа данных объекта.Алгоритм, используемый для вычисления допустимых реализаций усеченного графа под­тип/супертип, приведен в приложении С.11.4.4 И н т е р ф е й с ы ф у н к ц и йПри импорте функций неявно импортируются:-любые определенные типы данных или типы данных объекта, используемые в объявлениипараметров для импортируемой функции;-любые определенные типы данных или типы данных объекта, используемые в определениивозвращаемою значения для импортируемой функции;-любые определенные типы данных или типы данных объекта, используемые в объявлениилокальных переменных внутри импортируемой функции;- любые константы, функции или процедуры, используемые внутри импортируемой функции.11.4.5 И н т е р ф е й с ы п р о ц е д у рПри импорте процедуры неявно импортируются:-любые определенные типы данных или типы данных объекта, используемые в объявлениипараметров для импортируемой процедуры;-любые определенные типы данных или типы данных объекта, используемые в объявлениилокдтьных переменных внутри импортируемой процедуры;- все константы, функции или процедуры, используемые внутри импортируемой процедуры.11.4.6 И н т е р ф е й с ы п р а в и лПри импорте правила неявно импортируются:-любые определенные типы данных или типы данных объекта, используемые в объявлениилокдтьных переменных внутри импортируемого правила:- все константы, функции или процедуры, используемые внутри импортируемого правила. 12 ВыражениеВыражение является комбинацией операторов, операндов и вызовов функций, которые вы­числяются для получения значения.Синтаксис:204 expression = simple_expression | rel_op extended simple expression | . 269 rel op extended = reI_op | IN | LIKE . 268 rel_op = ' < ’ | '> ' | ' < = ’ | ' > = ’ | ’ <>* |||.287 simple_expression = term { add_like_.op term } . 303 term = factor { mu!tiplication_like_op factor | . 206 factor = simple_factor |simple_factor | .288 simple_factor = aegregatejnitializer | entity_constructor |enumerationjeference | interval | query _expression |( | unary _op | ( '(* expression ')* | primary ) ) .308 unary_op =|| NOT .256 primary = literal | ( qualifiable_ factor ( qualifier J ) . 244 multipiication_like_op « V Г /* | D1V | MOD | AND | *| Г -158 add_like_op =\| OR | XOR ._______________________________________________________Некоторые операторы требуют одного операнда, другие операторы требуют двух операндов.Операторы, требующие только одного операнда, должны располагаться перед операндом. Опера­ торы, требующие двух операндов, должны располагаться между этими операндами. В настоящемразделе определены операторы и установлены типы данных операндов, которые могут использо­ ваться каждым из операторов.57
ГОСТ I* ИСО 10303-11-2000Существует семь классов операторов:a)Арифметические операторы принимают числовые операнды и выдают числовые резуль­таты. Тип данных результирующего значения арифметического оператора зависит от оператора итипов данных операндов (см. 12.1).b)Операторы отношений получают различные типы данных и выдают результаты типаLOGICAL (имеющие значения TRUE. FALSE или UNKNOWN) .c) Двоичные (BINARY) операторы получают двоичные (BINARY) операнды и выдают ре­зультаты типа BINARY.d) Логические (LOGICAL) операторы получают логические (LOGICAL) операнды и выда­ют результаты типа LOGICAL.e)Строковые ( STRING) операторы получают строковые (STRING) операнды и выдаютрезультаты типа STRING.0Сборные (агрегатные) операторы комбинируют различными способами агрегатные зна­чения с другими агрегатными значениями или отдельными элементами и выдают результатысборного (агрегатного) типа.g)Операторы ссылок на компоненты и операторы индексирования извлекают компонентыиз экземпляров объектов и из агрегатных значений.Вычисление выражений осуществляется в соответствии с приоритетом операторов, входя­щих в выражение.Выражение, заключенное в круглые скобки, вычисляется первым и рассматривается какединый операнд.Вычисление осуществляется слева направо, при этом операторы с более высоким приорите­том вычисляются первыми. В таблице 10 установлены приоритеты для всех операторов языкаEXPRESS. Операторы в одной строке имеют равный приоритет, а строки упорядочены поуменьшению приоритета. Т а б л и ц а 10 — Приоритет операторов П р и о р и т е т О п и с а н и е О п е р а т о р ы 1Ссылки на компонентИ - ' 2Унарные операторы- NOT 3Возведение в степень 4У множснис/дсленис / D I V MOD AND || 5Сложение/вычитание+ OR XOR 6Отношение>:<>: IN LIKEП р и м е ч а н и е — 11 является оператором построения сложного объекта.Если операнд расположен между операторами, имеющими разный приоритет, то операндотносится к тому оператору, который имеет более высокий приоритет. Если операнд расположенмежду операторами, имеющими одинаковый приоритет, то операнд относится к тому оператору,который расположен слева от операнда.П р и м е р 82 — Выражение -10**2 вычисляется как (-10)»*2. и результат будет равен ИИ).Выражение 10/20*30 вычисляется как (10/20)*30, и результат будет равен 15.0.12.1 Арифметические операторыАрифметические операторы, требующие одного операнда, являются тождествами (+ ) и от­рицаниями (-). Операнд должен иметь числовой тип ( NUMBER. INTEGER или REAL). Для опе­ ратора (+ ) результат равен операнду, для оператора (—) результат противоположен операнду. Ко­ гда операнд имеет неопределенное (?) значение, результат также будет иметь неопределенное (?)значение, независимо от того, какой оператор использован.Арифметическими операторами, требующими двух операндов, являются сложение (+), вы­читание (-), умножение (•), деление ( /), возведение в степень (••), целочисленное деление (D1V)и остаток от целочисленного деления (MOD). Операнды должны иметь числовой тип ( NUMBER.INTEGER или REAL).Операторы сложения, вычитания, умножения, деления и возведения в степень выполняютматематические операции с теми же именами. За исключением деления, они выдают иелочис-58
ГОСТ Р ИСО 10303-11-2000ленный результат, если оба операнда имеют тип данных INTEGER и результат типа REAL в ос­тальных случаях (если при этом ни один из опера)1дов не имеет неопределенного (?) значения).Деление (/) действительного типа дает результат действительного типа (если при этом ни один изоперандов не имеет неопределеного (?) значения).Остаток от целочисленного деления (MOD) и целочисленное деление ( L>lV) дают целочис­ленный результат (если при этом ни один из операндов не имеет неопределенного (?) значения);если какой-либо операнд имеет тип данных REAL, то перед выполнением оператора его значениепреобразуется в значение типа INTEGER, то есть дробная часть теряется. Для любых целочис­ленных значений а и Ь всегда выполняется равенство (a DIV b)*b + (a MOD Ь) = а. Абсолютноезначение a MOD b всегда должно быть меньше, чем абсолютное значение Ь. а знак a MOD bдолжен быть таким же, как знак Ь.Если хотя бы один из операндов арифметического оператора имеет неопределенное (?) зна­чение, то результат оператора должен иметь неопределенное (?) значение.Округление действительных чиселКогда требуется округление, оно осуществляется с точностью />. используя следующий алго­ритм (точность р задается явно для типа REAL или принимается точность, установленная дляреализации в соответствии с приложением Е):a) преобразовать число в экспоненциальную форму без предшествующих нулей; b) текущий указатель цифры к устанавливается на р позиций правее десятичной точки; c) если действительное значение положительно, выполняются следующие действия:-если цифра в позиции к лежит в диапазоне 5..9, добавить I к цифре в позиции к— / , цифрав позиции к и все последующие цифры игнорируются. Перейти к шагу е;- если цифра в позиции к лежит в диапазоне 0..4. цифра в позиции к и все последующиецифры игнорируются. Перейти к шагу h;d) если действительное значение отрицательно, выполняются следующие действия:-если цифра в позиции к лежит в диапазоне 6..9, добавить 1 к цифре в позиции к—1. цифрав позиции к и все последующие цифры игнорируются. Перейти к шагу е;- если цифра в позиции к лежит в диапазоне 0..5, цифра в позиции А и все последующиецифры игнорируются. Перейти к шагу h;e) установить значение указателя А в к—1;0 если цифра в позиции к лежит в диапазоне 0..9, перейти к шагу Л:g) если цифра в позиции к имеет значение 10, добавить 1 к цифре в позиции к —1 и устано­вить цифру в позиции к в 0. Перейти к шагу е;h) число теперь округлено.П р и м е ч а н и е — В результате действия такою механизма округления 0.5 округляется до 1. а - 0 ,5 —до 0.П р и м е р S3 — Данный пример показывает влияние установки количества значащих цифрв дробной части действительного числа, то есть его точность.LOCALdistance: REAL(6);х 1, v 1, z 1: REAL;x2, v2, z2: REAL; END LOCAL;x l := 0. ; y l := 0.; z l := 0.;x2 := 10.; y2 := I L; z2 := 12.;distance := SQRT((x2-xl)»*2 + (y2-yl)**2 + (z2-zl)**2);Вычисленное значение distance равно 1.9104973... e+ I, но. поскольку для этой переменнойзадана точность только шесть значащих цифр, значение distance будет равно 1.91050е+1. 12.2 Операторы отношенийК операторам отношений относятся следующие операторы: сравнения значений, сравненияэкземпляров, принадлежности (IN ) и сравнения строк (LIKE). Результатом выполнения операто-59
ГОСТ I* ИСО 10303-11-2000ра отношения является значение типа LOGICAL (TRUE. FALSE или UNKNOWN). Если хотя быодин из операндов имеет неопределенное (?) значение, то выражению присваивается значениеUNKNOWN.12.2.1 О п е р а т о р ы с р а в н е н и я з н а ч е н и йК операторам сравнения значений относятся:- равно <=); - не равно (<>); -больше чем (>): - меньше чем (<); - больше или равно (>=); - меньше или равно (<=). Эти операторы могут применяться к числовым, логическим, строковым, двоичным операндами к операндам, являющимся элементами перечисления. Помимо этого операторы = и <> могутприменяться к сборным (агрегатным) типам данных и к типам данных объекта. Два сравниваемыхоперанда оператора сравнения значений должны иметь совместимые типы данных (см. 12.11).Для двух заданных величин а и Ь. независимо от их типа, выражение а О Ь эквивалентноNOT (а = Ь) для всех типов данных. Также для величин а и Ь, не являющихся ни сборными (аг­ регатными) типами данных, ни типами данных объекта, дополнительно:a)одно из следующих утверждений имеет значение TRUE: а < b. а = Ь или а > Ь:b) а <= Ь эквивалентно (а < b) OR (а = Ь); c)а > = b эквивалентно (а > b) OR (а = 1>).12.2.1.1 Сравнение числовых величинОператоры сравнения значений, при их применении к числовым операндам, должны соот­ветствовать математическому упорядочению действительных чисел.II р и м е ча н и с — При сравнении двух действительных чисел их точность нс учитывается.П р и м е р Х4 — Дано:а : REAL(3) := 1.23 b : REAL(5) := 1.2300;выражение а = Ь имеет значение TRUE (истина).12.2.1.2 Сравнение двоичных величинДля сравнения двух двоичных величин, сравнивают биты в соответствующих позициях каж­дой величины, начиная с первой пары соответствующих битов (в самой левой позиции), затем, вследующей позиции и т л . до тех пор, пока не будет встречена пара битов, значения которых всравниваемых величинах различаются. Когда встречена пара несовпадающих битов, меньшейсчитается та величина, у которой в соответствующей позиции находится бит с нулевым значени­ем. После этого никакого дополнительного сравнения не требуется. Если несовпадающей парыбитов не встречено, меньшей считается более короткая величина (длина определяется с помощьюфункции BLENGTH). Если у сравниваемых величин равны длины и не встречено ни одной парынесовпадающих битов, сравниваемые величины равны.12.2.1.3 Сравнение логических величииПри сравнении двух значений типа LOGICAL (или BOOLEAN) необходимо соблюдать сле­дующий порядок:FALSE < UNKNOWN < TRUE.12.2.1.4 Сравнение строковых значенийДля сравнения двух строковых значений сравнивают символы в соответствующих позицияхкаждого значения, начиная с первой пары соответствующих символов (в самой левой позиции),затем в следующей позиции и т.д. до тех пор, пока не будет встречена пара символов, значениякоторых в сравниваемых величинах различаются или пока не будут проверены все пары симво­лов. Когда встречена пара несовпадающих символов, меньшей считается та символьная строка, укоторой в соответствующей позиции находится символ с меньшим значением кода (как опреде­лено значениями октетов для символов по ИСО/МЭК 10646-1). После этого никакого дополни­тельного сравнения не требуется. Если несовпадающей пары символов не встречено, меньшейсчитается более короткая символьная строка (длина определяется с помощью функции 60
ГОСТ Р ИСО 10303-11-2000LENGTH). Если у сравниваемых символьных строк длины равны и не встречено ни одной парынесовпадающих символов, то два сравниваемых строковых значения считаются равными.12.2.1.5 Сравнение хгементов перечисленияСравнение значений элементов перечисления основывано на том, в какой последовательно­сти элементы перечислены в объявлении перечисляемого типа данных. См. правило (а) в 8.4.1.12.2.1.6 Сравнение агрегатных значенийОператорами сравнения значений, установленными дтя агрегатных значений, яааяются:равно (= ) и не равно (< > ). Два агрегатных значения могут быть сравнимы только в том случае,если их типы данных совместимы (см. 12.11).Все агрегатные сравнения должны проверять число элементов в каждом операнде: если S1ZEOF (а) <> SIZEOF (Ь), то агрегаты не равны. При агрегатных сравнениях сравнивают эле­менты агрегатного значения, используя сравнения значений. Если любое сравнение элементовпринимает значение FALSE, то агрегатное сравнение принимает значение FALSE. Если одно илинесколько сравнений элементов для конкретного агрегатного сравнения принимает значениеUNKNOWN, а исе остальные сравнения принимают значения TRUE, го агрегатное сравнениепринимает значение UNKNOWN. Во всех других случаях агрегатное сравнение принимает значе­ ние TRUE.Определение равенства сравниваемых агрегатов зависит от их агрегатных типов данных:-два массива а и Ь равны тогда и только тогда, когда каждый элемент массива а равен позначению элементу массива Ь, расположенному в той же позиции, то есть a|i) = b |i| (см. 12.6.1);- два списка а и b равны тогда и только тогда, когда каждый элемент списка а равен по зна­чению элементу списка Ь. расположенному в той же позиции;-два мультимножества (BAG) или набора (SET) равны тогда и только тогда, когда каждыйэлемент VALUE_1N а появляется в VALUE_IN Ь равное число раз. а каждый элемент VALUE_IN Ь поя паяется в VALUE_IN а равное число раз.П р и м е ч а н и е — Мультимножество может быть равно по значению набору, даже если мультимно­жество содержит повторяющиеся элементы. Это возможно потому, что проверка основывается на определе­нии количества равных по значению элементов.12.2.1.7 Сравнение значений объектовДва экземпляра объектов равны при сравнении значений, если равны значения их соответ­ствующих атрибутов. Поскольку экземпляры объектов могут иметь атрибуты, представленные ти­пами данных объекта, возможно наличие экземпляров со ссылками на самих себя, в этом случаеэкземпляры объектов равны при сравнении значений, если все атрибуты, представленные про­стыми типами данных, имеют одинаковые значения и те же атрибуты в обоих экземплярах объ­ ектов являются ссылающимися па сам экземпляр.Более точно, предположим, что сравниваются два экземпляра 1 и г. Если I г. то I = г. Ес­ли это не так. то введем следующие описания:- определим упорядочение на совокупности рассматриваемых экземпляров. На практике этасовокупность конечна, поэтому такое упорядочивание выполнимо;-для целей данного рассуждения определим оператор индексирования агрегатов, которыйучитывает данное упорядочение таким образом, что для любого агрегата agg и дтя любых индек­сов I н j условие i < j эквивалентно условию agg|i| < agg|j|;- определим последовательность ссылок как одну или более ссылок атрибутов или индексов.Применим последовательность ссылок s к экземпляру 1, записав s(i). Тогда s(i) может быть вы­числена. если ни одна из ссылок, за исключением последней, не принимает неопределенного (?)значения.Тогда значение выражения I = г определяется исходя из следующих условий:a)Если TYPEOF(I) О TYPEOF(r). то I = г имеет значение FALSE.b)Если существует такая последовательность ссылок s, что вычислим строго один s(l) нs(r), то 1 = г имеет значение FALSE.c)Если существует такая последовательность ссылок s, что и s(l) и s(r) выдают значенияпростых типов, и если s(l) О s(r), то 1 = г имеет значение FALSE.d)Если существует такая последовательность ссылок s. что NOT EXlSTS(s(l)) или NOT EXlSTS(s(r)), то I = г имеет значение UNKNOWN.e)Иначе I = г имеет значение TRUE. 61
ГОСТ !* ИСО 10303-11-2000П р и м е р 85 — Следующий алгоритм яиляется одной из реализаций вышеописанного тестасравнения значений. Этот алгоритм приводится только в качестве иллюстрации и не являетсяобязательной частью какой-либо реализации.Допустим, что I и г являются переменными типа GENERIC в данном алгоритме.a)Инициализируем I как левый экземпляр объекта, а г как правый экземпляр объекта.b)Если I и г — один и тот же экземпляр, то есть I :=: г, выражение имеет значение TRUE.c)Инициализируем пустой список plist, который будет содержать упорядоченные парыидентификаторов экземпляров объектов.П р и м е ч а н и е I — Представление идентификаторов экземпляра зависит от особенностей рсализа-ции.d) Сравним I и г. исполъзуя глубокий алгоритм равенства, описанный ниже. e)Выражение будет иметь значение, возвращаемое глубоким алгоритмом равенства.Глубокий алгоритм равенстваa)Если I, г или обе переменные имеют неопределенное (?) значение, то алгоритм возвра­щает значение UNKNOWN.b)Если TYPEOF(l) О TYPEOF(r), то алгоритм возвращает значение FALSE.c)Если I и г не являются экземплярами объектов, то алгоритм возвращает значение 1 = г,исполъзуя соответствующий тест на равенство.d)Если I и г являются одним и тем же экземпляром объекта, то есть Iг, то алгоритмвозвращает значение TRUE.e)Если пара экземпляров (I, г) присутствует в plist. алгоритм возвращает значение TRUE.0Если пара экземпляров (I, г) не присутствует в plist. выполняют следующие действия:1) Добаатяют к plist пару (I, г).2) Для каждого из атрибутов а. определенных для I и г, сравнивают 1.а и г.а. исполъзуя глу­бокий алгоритм равенства, предположив, что 1 = 1.а и г = г.а.II р и Vi е ча и и с 2 — Эго рекурсивный вызов.3)Если на шаге (11) глубокий алгоритм равенства для какого-либо из атрибутов возвраща­ет значение FALSE, общий результат будет иметь значение FALSE. Иначе, если алгоритм воз­вращает для какого-либо из атрибутов значение UNKNOWN, общий результат будет иметь зна­чение UNKNOWN. Иначе, общий результат будет иметь значение TRUE.П р и м е ч а н и е 3 — Если хотя бы один из результатов сравнения имеет значение F A L S E , общий ре­зультат имеет значение F A L S E . Если все результаты имеют значение T R U E , общий результат имеет значе­ние T R U E . Когда какое-либо сравнение имеет результат U N K N O W N , а все другие результаты имеют значе­ ние T R U E , общий результат имеет значение U N K N O W N .П р и м е р 86 — Локальные переменные Н и 12 имеют тип loop_of_integer и при присвоенииим значений в этом примере переменные не равны.ENTITY loop o f integer,int : INTEGER;n e x t: loop_of_integcr;END ENTITY; ~LOCALil, i2 : loop of_integer;END LOCAL;11 := loop_of_integer(5.1oop_of_integer(3,SELF»; 12 := loop ofJnteger(3,loop_of_integer(5,SELF»;IF il = i2 THEN -- присваивается значение «ложь»Сравнение значений объектов может быть применено для экземпляров объектов и длясгруппированных экземпляров объектов (см. 12.7.4). При сравнении экземпляров объектов срав­ниваются все атрибуты супертипов и подтипов сравниваемых экземпляров. При сравнениисгруппированных экземпляров объектов сравниваются только те атрибуты, которые объявленыатрибутами в объявлении объекта для типа данных объекта, поименованного в квалификаторе62
ГОСТ Р ИСО 10303-11-2000группы (при этом не включаются наследуемые атрибуты, которые переопределены в конкретномтипе данных объекта).12.2.2 О п е р а т о р ы с р а в н е н и я э к з е м п л я р о вОператорами сравнения экземпляров являются: - равенство экземпляров (:=:); - неравенство экземпляров (:<>:). Эти операторы применимы к операндам числового, логического, двоичного, строкового, пе­речисляемого, агрегатного типов данных и к операндам типа данных объекта. Оба операнда воператоре сравнения экземпляра должны быть совместимы по типу данных (см. 12.11).Для двух операндов а и b выражение (а :<>: Ь) эквивалентно выражению NOT (аЬ) длявсех типов данных.Операторы сравнения экземпляров, применяемые к числовым, логическим, строковым,двоичным и перечисляемым типам данных, эквивалентны соответствующим операторам сравне­ния значений. Это означает, что выражение (аЬ) эквивалентно (а = Ь), а выражение (а :<>: Ь)эквивалентно (а О Ь) для этих типов данных.12.2.2.1 Сравнение экземпляров агрегатовОператорами сравнения экземпляров, определенными для агрегатных значений, являютсяоператоры равенства (:=:) и неравенства (:<>:). Два агрегатных значения могут сравниватьсятолько в том случае, если совместимы их типы данных (см. 12.11).Все агрегатные сравнения должны проверять число элементов в каждом из операндов; если SlZEOF(a) О SIZEOF(b), агрегаты не равны. При агрегатном сравнении проводится сравнениеэлементов агрегатного значения с использованием сравнений экземпляров. Если при сравнениилюбого элемента получено значение FALSE, то результат агрегатного сравнения также будетиметь значение FALSE. Если одно или несколько сравнений элементов при конкретном агрегат­ ном сравнении дают результат UNKNOWN, а все прочие сравнения дают результат TRUE, торезультат агрегатного сравнения будет иметь значение UNKNOWN. Во всех других случаях агре­ гатное сравнение принимает значение TRUE.Определение равенства экземпляров агрегатов зависит от типа сравниваемых агрегатных ти­пов данных:-два массива а и b равны тогда и только тогда, когда каждый элемент массива а являетсятем же экземпляром, что и элемент массива Ь. находящийся в той же позиции, то есть a(i]b|i| ( 12.6 . 1);-два списка а и b равны тогда и только тогда, когда каждый элемент списка а является темже экземпляром, что и соответствующий элемент списка Ь:-экземпляры двух мультимножеств (BAG) а и b равны тогда и только тогда, когда каждыйэлемент IN а появляется в IN b ровно столько же раз. а каждый элемент IN b появляется в IN аровно столько же раз;-два набора (SET) а и b равны тогда и только тогда, когда каждый элемент а присутствует вb и каждый элемент b присутствует в а:-экземпляр набора (SET) равен экземпляру мультимножества (BAG) тогда и только тогда,когда каждый элемент набора присутствует в мультимножестве один раз, а в мультимножественет ни одного элемента, который не входил бы в набор.П р и м е р 87 — Сравнение экземпляров двух массивовLOCALal, а 2 : ARRAY 11:10] OF b;END_ LOCAL;IF (al :=: a2) THEN ...12.2.2.2 Сравнение экземпляров объектовОператоры равенства (:=:) и неравенства (:<>:) экземпляра объекта получают два совмес­тимых экземпляра обьектов и вычисляют значение типа LOGICAL.Выражение аb имеет значение TRUE, если а является тем же экземпляром объекта, чтои Ь. то есть имеют один и тот же идентификатор, зависящий от реализации. Выражение имеетзначение FALSE, если экземпляр а отличается от экземпляра Ь. Выражение имеет значениеUNKNOWN, если хотя бы один из операндов имеет неопределенное (?) значение.
ГОСТ Р ИСО 10303-11-2000Помимо прочего, сравнение экземпляров объектов должно проводиться при сравнении двухэкземпляров объектов, таких как сравнения агрегатов, и при проверке правил уникальностиUNIQUE.П р и м е р N8 — Все дети имеют матерей, но некоторые дети имеют также братьев или сес­тер. 'Зто моделируется следующим образом:ENTITY childSUBTYPE OF (person);mother : female; -- мы не рассматриваем более одного поколенияfather: male;END_ENTITY:ENTITY siblingSUBTYPE OF (child);siblings : SET |1:?1 sibling;WHERE— удостоверимся, что данный экземпляр объекта — не является одним из братьев или сестерnot „identical ; S1ZEOF ( QUERY ( i <* siblings ] iSELF ) ) = 0;— удостоверимся, что каждый из братьев или сестер— имеет общего отпа или мать с данным экземпляром объектаsame „parent: SIZEOF ( QUERY ( i <* siblings |( i.mother :=; SELF.mother ) OR( i.father;=: SELF.father ) ) =SIZEOF ( siblings ) );END_ENTITY:12.2.3 О п е р а т о р п р и н а д л е ж н о с т иОператор принадлежности (IN) осуществляет проверку, принадлежит ли данный элемент кнекоторому агрегату и вычисляет значение типа LOGICAL. Правый операнд должен быть значе­ нием агрегатного типа данных, а левый операнд должен быть совместим с основным типом дан­ ного агрегатного значения. Выражение е IN agg вычисляется следующим образом:a)если хотя бы один из операндов имеет неопределенное (?) значение, выражение имеетзначение UNKNOWN;b) если существует элемент agg|i] такой, что е aggfij, выражение имеет значениеTRUE;c)если существует хотя бы один элемент agg|i|, имеющий неопределенное (?) значение,выражение имеет значение UNKNOWN;d)иначе выражение будет иметь значение FALSE.П р и м е ч а н и е — Для того чтобы проверить, существует ли элемент агрегата, имеющий заданноезначение, может быть использована функции VALU£_1N (см. 15.28).Принадлежность к определенной моделирующей системе может быть проверена с помощьюпары функций, называемых, например. my_equal (см. 8.2.5) и my_in, как это показано в ниже­ приведенном псевдокоде;FUNCTION my_in( с: AGG R EG ATE OF GENERICgen; v:GENERIC:gen) : LOGICAL;(4 Если v или с имеет неопределенное (?) значение, возвращается значение UNKNOWN.Иначе, если какой-либо из элементов агрегата с имеет значение v, возвращается значениеTRUE. Иначе, если хотя бы одно из сравнений значения v со значениями элементов агре­ гата дает результат UNKNOWN, возвращается значение UNKNOWN. Иначе возвращаетсязначение FALSE •)LOCALresult: LOGICAL;unknownp : BOOLEAN := FALSE;END LOCAL IF ((NOT EXISTS(v)) OR (NOT EXISTS(c)) THENRETURN( UNKNOWN);64
ГОСТ Р ИСО 10303-11-2000E N D J F : REPEAT i := LOlNDEX(c) ТО HIINDEX(c);result := mv_equal(v, c|i|);IF (result = TRUE) THENRETURN (result):E N D JF ;IF (result = UNKNOWN) THEN unknownp := TRUE;E N D JF ;ENDURE PEAT; IF (unknownp) THENRETURN( UN KNOWN);ELSERETURN! FALSE); END IF;END_FUNCTION;Например, это может быть использовано следующим образом:LOCALv : а; с ; SET OF а;END_ LOCAL;IF m y jn (c , v) THEN ...12.2.4 В ы р а ж е н и я и н т е р в а л о вВыражение интервала проверяет, лежит ли значение внутри заданного интервала. Выраже­ние содержит три операнда, которые должны быть совместимыми (см. 12.11). Типы операндовдолжны быть упорядоченными, то есть простые типы (см. 8.1) и определенные типы данных, ис­ходными типами которых являются или простые, или перечисляемые типы.Синтаксис:229 interval = '{ ’ intervalJow interval_op intervalJtem intervalopintervalJiigh ’ }' .232 interval Jow = simpie_expression .233 interval_op = ’<* | *<=*' .231 interval_item = simple_expression . 230 interval_high = siniple_expression .П р и м е ч а н и е — Выражение интервала:[ intcrvaljow intcrval_op intcrvaljtcm intcrval_op interval_high )семантически эквивалентно следующему выражению: (intcrval_low intervalop interval J te m ) A N D(intervalJtem intcrval_op interval Jiig h )Считаем, что во втором выражении intervaljtem вычисляется только один раз.Выражение интервала вычисляется для типа LOGICAL и принимает значение TRUE, еслиобе операции сравнения дают результат TRUE. Выражение принимает значение FALSE, если хо­ тя бы одна из операций сравнения дает результат FALSE, и значение UNKNOWN, если хотя быодин из операндов имеет неопределенное (?) значение.П р и м е р 89 — Здесь проверяется, имеет ли 1> значение, большее 5.0 и меньшее или ранное 100.0LOCALb : REAL := 20.0;END^. LOCAL;IF < 5.0 < b < = 100.0 } THEN - имеет значение TRUE65
ГОСТ I* ИСО 10303-11-200012.2.5 О п е р а т о р п о д о б и яОператор подобия (LIKE) сравнивает два строковых значения, используя описанный нижеалгоритм сравнения с образцом, формирующий значение типа LOGICAL. Левый операнд являет­ся сравниваемой строкой. Правый операнд является эталонной строкой.Алгоритм сравнения с образцом определяется следующим образом. Каждый символ эталон­ной строки сравнивается с соответствующим снмволо.м(и) сравниваемой строки. Если любая парасравниваемых символов не совпадает, то сравнение яатяется ошибочным и выражениюприсваивается значение FALSE.Некоторые специальные символы в эталонной строке могут совпадать с несколькими сим­волами в сравниваемой строке. Эти символы приведены в таблице 11. Все сравниваемые символыдолжны быть идентичными или совпадать с приведенными в таблице 11, чтобы выражению былоприсвоено значение TRUE. Если любой из операндов имеет неопределенное (?) значение, то вы­ражению присваивается значение UNKNOWN.Когда символ сравниваемой строки должен совпадать с каким-либо специальным символомэталонной строки, то образец должен содержать эталонную управляющую последовательность.Эталонная управляющая последовательность должна содержать управляющий символ (\), за ко­торым следует сопоставляемый специальный символ.П р и м е р 90 — Для сопоставления с символом 0> используется управляющая последова­тельность \@.Следующие примеры показывают, как сравниваются строки.Г1 р и м е р ы91 — Если а := ’\AAAA'; следующие сравнения дают результаты:a LIKE "\\АААА'~ > TRUEa LIKE \A A A A~ > FALSEa LIKE ’\\А?АА'--> TRUEa LIKE '\\!\\ААА'~ > TRUEa LIKE \\& '—> TRUEa LIKE \ $ ’~ > FALSE92 — Если а := T he quick red foxследующее сравнение дает результат:a LIKE •$$$$*~ > TRUE93 — Если а := 'Page 407'; следующее сравнение дает результат:a LIKE V—> TRUEТ а б л и ц а II — Эталонные сравниваемые символыСнмпалЗначение&Сравнение любой буквылСравнение любой заглавной буквы (верхнего регистра)■»Сравнение любого символа&Сравнение остатка строки»Сравнение любой цифрыSСравнение любой подстроки, завершаемой символом пробела или конца строки»Сравнение любого числа символов\Начало эталонной управляющей последовательности1Отрицание символа (используется с другими символами)12.3 Двоичные операторыКроме операторов отношения, определенных в 12.2.1.2, для типа данных BINARY установ­лены: оператор индексирования ( | |) и оператор конкатенации (+).12.3.1 Д в о и ч н о е и н д е к с и р о в а н и е 66
ГОСТ Р ИСО 10303-11-2000Оператор двоичного индексирования требует двух операндов: индексируемого двоичногозначения и спецификации индекса, а выдает двоичное значение длины (index_2 - index_l + 1).Полученное двоичное значение равно последовательности битов от позиции index_l до index_2включительно. Если требуется двоичное значение единичной длины, необходимо указать толькоindex_l. Значение индекса, равное единице, соответствует самому левому биту.Синтаксис:226 index_qualifier = Т index_! |index_2 | Т .224 index_l = index .223 index = nunieric_expression . 225 index 2 = index .Правила и ограниченияa)Значение index_l должно быть положительным целым числом.b)Должно выполняться условие I < index_l < BLENGTH (двоичное значение), иначе бу­дет возвращено неопределенное (?) значение.c)Значение index_2, при его указании, должно быть положительным целым числом.d) Должно выполняться условие index 1 й index_2 й BLENGTH (двоичное значение), иначебудет возвращено неопределенное (?) значение.П р и м е р 94 — Должен быть проверен четвертый бит двоичного числа image.image := % 01010101IF im age|4|-% l THEN ... — имеет значение TRUE I F im a ge|4:4|= *l THEN ... -- эквивалентное выражениеП p и м е р 95 — Должны быть проверены биты с четвертого по десятый двоичного числа image.IF im age|4:l0|= *1011110 THEN ...12.3.2 О п е р а т о р д в о и ч н о й к о н к а т е н а ц и иОператор двоичной конкатенации (+ ) является двоичным оператором, который объединяетвместе два двоичных значения. Оба операнда должны иметь двоичные значения, а выражениюдолжно быть присвоено двоичное значение, содержащее конкатенацию двух операндов, при этомсодержимое первого операнда находится слева.П р и м е р % — Двоичные значения могут быть обьеденепы следующим образом:image := %Ю1000Ю1 + *101001; (• переменная image теперь содержит двоичное значение % 101000101101001 *)12.4 Логические операторыЛогическими операторами являются: NOT (отрицание), A N D (и), OR (или) и XOR (исклю­чающее или). Каждый из операторов выдает результат типа LOGICAL. Операторам AND. OR иXOR требуются два логических операнда, а оператору NOT — один логический операнд.12.4.1 О п е р а т о р NOTОператор NOT требует одного логического операнда (операнд располагается справа от опе­ратора NOT) и формирует результат в виде логического значения, как показано в таблице 12.Т а б л и ц а 12 — Оператор NOT З н а ч е н и е о п е р а н д а З н а ч е н и е р е з у л ь т а т аTRUEFALSEUNKNOW NUNKNOWNFALSETRUE12.4.2 О п е р а т о р ANDОператор AN D требует двух логических операндов и формирует результат в виде логическо­го значения, как показано в таблице 13. Оператор AND является коммутативным. 67
ГОСТ !* ИСО 10303-11-2000Т а б л и ц а 13 — Оператор AND З н а ч е н и е о п е р а ц и я 1 З н а ч е н и е о п е р а н д а 2 З н а ч е н и е р е з у л ь т а т аTRUETRUETRUETRUEUNKNOWNUNKNOW NTRUEFALSEFALSEUNKNOW NTRUEUNKNOWNUNKNOWNUNKNOWNUNKNOWNUNKNOWNFALSEFALSEFALSETRUEFALSEFALSEUNKNOWNFALSEFALSEFALSEFALSE12.4.3 O n е р а т о р ORОператор OR требует двух логических операндов и формирует результат в виде логическогозначения, как показано в таблице 14. Оператор OR является коммутативным.Т а б л и ц а 14 — Оператор OR З н а ч е н и е о п е р а ц и я 1 З н а ч е н и е о п е р а н д а 2 З н а ч е н и е p e i y . t b r a r aTRUETRUETRUETRUEUNKNOWNTRUETRUEFALSETRUEUNKNOWNTRUETRUEUNKNOW'NUNKNOWNUNKNOW'NUNKNOW'NFALSEUNKNOW'NFALSETRUETRUEFALSEUNKNOWNUNKNOW'NFALSEFALSEFALSE12.4.4 О п е р а т о р XORОператор XOR требует двух логических операндов и формирует результат в виде логическо­го значения, как показано в таблице 15. Оператор XOR является коммутативным.Т а б л и ц а 15 — Оператор XOR З н а ч е н и е о п е р а ц и я 1 З н а ч е н и е о п е р а н д а 2 З н а ч е н и е р е з у л ь т а т аTRUETRUEFALSETRUEUNKNOWNUNKNOW'NTRUEFALSETRUEUNKNOWNTRUEUNKNOW'NUNKNOW'NUNKNOWNUNKNOW'NUNKNOW'NFALSEUNKNOW'NFALSETRUETRUEFALSEUNKNOWNUNKNOW'NFALSEFALSEFALSE 12.5 Строковые операторыКроме операторов отношения, определенных в 12.2.1.4 и 12.2.5, для строкового типаSTRING установлены: оператор индексирования ([ ]) и оператор конкатенации (+). 68
ГОСТ Р ИСО 10303-11-200012.5.1 И н д е к с и р о в а н и е с т р о кОператор индексирования строк требует двух операндов: индексируемого строкового значе­ния и спецификация индекса, а выдает строковое значение длины (index_2 - index_l + 1). Полу­ченное строковое значение равно последовательности символов от позиции index_I до index_2включительно. Если требуется строковое значение единичной длины, необходимо указать только index_l. Значение индекса, равное единице, соответствует самому левому символу.Синтаксис:226 index_qualifier = Т index_l |index_2 | *Г •224 index_l = index . 223 index = numeric_expression . 225 index_2 = index ._________________________________________________________________________ Правила и ограниченияa)Значение index_l должно быть положительным целым числом.b )Должно выполняться условие 1 й tndex_l £ LENGTH (строковое значение), иначе будетвозвращено неопределенное (?) значение.c)Значение index_2. при его наличии, должно быть положительным целым числом. d) Должно выполняться условие index 1 й index_2 й LENGTH (строковое значение), иначебудет возвращено неопределенное (?) значение.П р и м е р 97 — Проверка символа, находящегося в седьмой позиции строки nameIF name|71="00125FEl" TH EN ... — представление в соответствии с ИСО/МЭК 10646-1 IF name|7:7J="00l25FEl" THEN ... -- эквивалентное выражениеП рн м е р 9S — Проверка символов, находящихся в позициях с седьмой по десятую строки nameIF name|7:101 ='Some' THEM ...12.5.2 О п е р а т о р к о н к а т е н а ц и и с т р о кОператор конкатенации строк (+ ) является строковым оператором, соединяющим две стро­ки вместе. Оба операнда должны иметь строковые значения, а выражению должно быть присвое­ но строковое значение, содержащее конкатенацию двух операндов, при этом содержимое первогооперанда находится слева.П р и м е р 99 — Две строки м о т быть объединены следующим образом:name := ЛВС* + * * + 'DEF' ;(* name теперь содержит строку ’ABC D E F •) 12.6 Агрегатные операторыАгрегатными операторами являются: оператор индексирования ( | )), оператор пересечения(*), оператор объединения (+ ), оператор разности (-), оператор подмножества (<=), операторнадмножества ( >=) и оператор запроса (QUERY). Эти операторы определены в следующих пунк­тах. Ко всем агрегатным значениям применимы также определенные в 12.2 оператор равенства( - ) , оператор неравенства (<>), оператор равенства экземпляров (:=:), оператор неравенства эк­земпляров (:<>:) и оператор принадлежности IN.П р и м е ч а н и е — Некоторые операции, производимые хал агрегатными значениями, требуют неяв­ного сравнения элементов агрегатных значений, во всех таких случаях используется сравнение экземпляров.12.6.1 И н д е к с и р о в а н и е а г р е г а т о вОператор индексирования агрегатов требует двух операндов: индексируемого агрегатногозначения и спецификации индекса, а выдает единственный элемент из агрегатного значения. Вкачестве типа данных этого элемента выбирается основной тип данных индексируемого агрегат-цого значения.________________________________________________________________________________Синтаксис:226 index_qualifier = Т indexJ | V index_2 | Т . 224 in d ex j = index . 223 index = numeric_expression . 225 index 2 = index .69
ГОСТ Р ИСО 10303-11-2000Правила и ограниченияa)Значение index_2 не должено присутствовать, поскольку из агрегатного значения можетбыть индексирован только один элемент.b)Значение index_l должно быть иелым числомc) Должно выполняться условие: LOINDEX (агрегатное значение ) £ index_I £ HUNDEX(агрегатное значение), иначе будет возвращено неопределенное (?) значение.d)Если типом агрегатного значения является ARRAY или LIST, выражение выдает эле­мент агрегатного значения, находящийся в позиции, указанной index_l.e)Если типом агрегатного значения является BAG или SET, то для каждого index_l в диа­пазоне от LOINDEX (агрегатное значение ) до HI INDEX (агрегатное значение) выражение долж­ но выдавать разные элементы агрегатного значения.0При повторном индексировании того же агрегатного значения с тем же самым значени­ем index_l должен возвращаться тот же элемент только в том случае, если между обращениямиагрегатное значение не было изменено. Если агрегатное значение было изменено для агрегатныхтипов данных BAG или SET, то результат повторного агрегатного индексирования изменененно-го агрегатного значения непредсказуем.П р и м е р 100 — Индексирование для мультимножеств (bags) и наборов (sets) может бытьиспользовано для повторного извлечения всех значений из данного агрегатного значения.a set : SET (1:201 OF INTEGER;result : INTEGER:result := 1;REPEAT FOR index := LOINDEX(a set) TO HHNDEX(a_set);result := result * a_set| index|;END_REPEAT;После выхода из оператора REPEAT переменная result будет содержать произведение всехцелочисленных элементов агрегата a_set.12.6.2 О п е р а т о р п е р е с е ч е н и яОператор пересечения (*) принимает два операнда агрегатного значения и выдает агрегатноезначение. Допустимые типы операндов и соответствующие им типы результата приведены в таб­лице 16. Результирующее агрегатное значение неявно объядтяется как агрегат типа, определенно­го в таблице 16 с границами |0..?J. Основные типы данных операндов должны быть совместимы­ми (см. 12.11). Если пересечение двух операндов не содержит элементов, размер результирующегоагрегатного значения должен быть нулевым.Т а б л и и а 16 — Оператор пересечения — типы операндов и результата П е р в ы й о п е р а н д В т о р о й о п е р а н д Р е з у л ь т а тBag (мультимножество)Bag (мультимножество)Bag (мультимножество)Bag (мультимножество)S e t (набор)S e t (набор)S e t (набор)S e t (набор)S e t (набор)S e t (набор)Bag (мультимножество)S e t (набор)Если одним из операндов является набор (set), то результатом должен быть набор, содержа­щий каждый элемент, появляющийся одновременно в обоих операндах.Если оба операнда являются мультимножествами (bags), и конкретный элемент е появляется водном мультимножестве ш раз, а в другом мультимножестве — а раз (где ш меньше или равно п).то результат должен содержать элемент е m раз.12.6.3 О п е р а т о р о б ъ е д и н е н и яОператор объединения (+ ) принимает два операнда, один из которых должен иметь агрегат­ное значение, и выдает агрегатное значение. Допустимые типы операндов и соответствующий нмтип результата приведены в таблице 17.70
ГОСТ Р ИСО 10303-11-2000Т а б л и ц а 17 — Оператор обьслинсния — топы операндов и результата П ервы й операнд В т о р о й о п е р а н д Р е з у л ь т а тBag (мультимножество)Bag (мультимножество)Bag (мультимножество)Bag (мультимножество)Element (элемент)Bag (мультимножество)Element (элемент)Bag (мультимножество)Bag (мультимножество)Bag (мультимножество)S e t (набор)Bag (мультимножество)Bag (мультимножество)List (список)Bag (мультимножество)S e t (набор)S e t (набор)S e t (набор)S e t (набор)Element (элемент)Set (набор)Element (элемент)Set (набор)S e t (набор)S e t (набор)Bag (мультимножество)S e t (набор)S e t (набор)List (список)S e t (набор)List (список)List (список)List (список)!Element (элемент)List (список)List (список)-List (список)Element (элемент)List (список)5П р и м е ч а н и я1 Первый элемент второго списка следует за последним элементом перво­го списка.2 Новый элемент становится первым в результирующем списке. 3 Новый элемент становится последним в результирующем списке.Операция объединения определяется типом операндов и их порядком следующим образом:Если тип одного из операндов (Е) совместим с основным типом другого операнда (А), опе­ранд Е добавляется к А следующим образом:- если А является значением набора (set), результирующим набором является А, к которомудобавлен Е, если только Е уже не присутствовал в А;-если А является значением списка (list), результирующим списком является А с вставлен­ным в позицию 1 Е, если Е был левым операндом, и в позицию SIZEOF(A+l), если Е был пра­ вым операндом.П р и м е ч а н и е I — Результирующий список может содержать повторяющиеся элементы, даже сечиоперанд списка был объявлен как LIST OF UNIQUE;- если А имеет значение мультимножества (bag), то результирующим мультимножеством яв­ляется А с добавленным к нему Е.Если оба операнда являются совместимыми списками (list), то результирующим спискомявляется левый операнд с добавленным в его конец правым операндом.П ри меча н не 2 — Результирующий список может содержать повторяющиеся элементы, даже сечиоба операнда были объявлены как LIST OF UNIQUE.Если левый операнд имеет значение набора (set), то результирующий набор создается из ле­вого операнда с добавленными к нему теми элементами правого операнда, которые в левом опе­ранде отсутствуют.Если левый операнд имеет значение мультимножества (bag), то результатом является левыйоперанд с добавлением к нему всех элементов правого операнда.12.6.4 O n e р а т о р р а з н о с т иОператор разности (-) принимает два операнда, левый из которых должен быть агрегатнымзначением, и выдает агрегатное значение. Допустимые типы операндов и соответствующий имтип результата приведены в таблице 1S. Результирующее агрегатное значение содержит элементыпервого операнда за исключением соответствующих им элементов второго операнда, то есть каж­дый элемент второго операнда, который входит в первый операнд, исключается из первого опе­ранда. Результирующее агрегатное значение неявно объявляется как агрегат, тип которого опре­деляется в соответствии с таблицей 18 с границами |0..?|. Основные типы операндов должныбыть совместимы (см. 12.11). Тип данных возвращаемого агрегатного значения должен быть та-71
ГОСТ I* ИСО 10303-11-2000ким же, как тип первого операнда. Если оба операнда я&зяются мультимножествами (bags), иконкретный элемент е присутствует m раз в первом операнде и п раз во втором операнде, то ре­зультат должен содержать е ш—о раз, если ш больше п, и не содержать е. если m меньше илиравно п. Если второй операнд содержит элементы, не присутствующие в первом операнде, такиеэлементы будут игнорированы и не войдут в результирующее агрегатное значение.Т а б л и ц а 18 — Оператор разности — типы операндов и результата П е р и ы й о п е р а н дВторой операнд Р е з у л ь т а тBag (мультимножество)Bag (мультимножество)Bag (мультимножество)Bag (мультимножество)S e t (набор)Bag (мультимножество)Bag (мультимножество)Element (элемент)Bag (мультимножество)S e t (набор)S e t (набор)S e t (набор)S e t (набор)Bag (мультимножество)S e t (набор)S e t (набор)Element (элемент)S e t (набор)П р и м е р 101 — Если А является мультимножеством целых чисел |1 , 2, 1, 3,1, то А — 1имеет значение |1 ,2 ,3 |, которое эквивалентно [2,1,31.12.6.5 О п е р а т о р п о д м н о ж е с т в аОператор подмножества (subset) ( <=) принимает два операнда, определенных в таблице 19.и выдает результат типа LOGICAL. Выражение принимает значение TRUE тогда и только тогда,когда любой элемент е. присутствующий п раз в первом операнде, присутствует не менее п раз вовтором операнде. Выражение принимает значение UNKNOWN, когда хотя бы один из операндовимеет неопределенное (?) значение, а иначе принимает значение FALSE.Типы операндов должны быть совместимы (см. 12.11).Т а б л и ц а 19 — Операторы подмножества и надмножества — типы операндов П с р п м й о п е р а н д В т о р о й о п е р а н дBag (мультимножество)Bag (мультимножество)Bag (мультимножество)S e t (набор)S e t (набор)Bag (мультимножество)S e t (набор)S e t (набор)12.6.6 О п е р а т о р н а д м н о ж е с т в аОператор надмножества (superset) (>=) принимает два операнда, определенных в таблице 19,и выдает результат типа LOGICAL. Выражение принимает значение TRUE тогда и только тогда,когда любой элемент е. присутствующий п раз во втором операнде, присутствует не менее о раз впервом операнде. Выражение принимает значение UNKNOWN, когда хотя бы один из операндовимеет неопределенное (?) значение, а иначе принимает значение FALSE.Типы операндов должны быть совместимы (см. 12.11).Выражение b >= а должно быть точно эквивалентным а <= Ь.12.6.7 В ы р а ж е н и е з а п р о с аВыражение запроса QUERY применяет logical_expression отдельно к каждому элементу агре­гатного значения ивыдает агрегатноезначение, содержащее элементы, длякоторых logical_expression получило значение TRUE. Результатом этого является подмножество исходноюагрегатного значения, в котором все элементы данною подмножества удовлетворяют условию,представленному логическим выражением.Синтаксис:264 query_expression = QUERY '(' variablejd '<•' aggicgate^source Tlogical_expression ')' .160 aggiegate_soutce = simple_expression .241 logical_expression = expression .72
ГОСТ Р ИСО 10303-11-2000Правила и ограниченияa)Выражение variablc_id неявным образом объявляется как переменная внутри областидействия выражения запроса.П р и м с ч а н и с - Эта переменная нигде не объявляется и нс существует вне выражения запроса.b)Выражение aggregate_source должно быть агрегатным значением (ARRAY, BAG, LISTили SET).c)Третий операнд (logical_expression) должен быть выражением, выдающим результат типаLOGICAL.Элементы извлекаются поочередно из исходного агрегата и подстаатяются в логическое вы­ражение logical_expressk>n вместо переменной variablejd Затем вычисляется logical_cxpressk>n.Если Iogical_expression принимает значение TRUE, данный элемент добавляется к результату-; вдругих случаях он не добаатяется. Эта действия повторяются для каждого элементы из исходногоагрегата. Результирующее агрегатное значение пополняется в соответствии с конкретным видомагрегатного типа данных:Массив (ARRAY). Результирующий массив имеет тот же основной тип и Гранины, что и ис­ходный массив, но элементы массива объявляются как OPTIONAL. Изначально каждый элементявляется неопределенным (?). Любой элемент исходного массива, для которого logical_expressionвыдает значение TRUE, затем помещается на соответствующую индексную позицию в результи­ рующем массиве. Мультимножество (BAG). Результирующее мультимножество имеет тот же основной тип иверхнюю границу, что и исходное мультимножество. Нижняя граница является нулевой. Изна­чально результирующее мультимножество яазяется пустым. Любой элемент из исходного муль­ тимножества. для которого logical_expression выдает значение TRUE, затем добавляется к резуль-ти руюше м у мультим!тожеству.Список (LIST). Результирующий список имеет тот же основной тип и верхнюю границу, чтои исходный список. Нижняя граница является нулевой. Изначально результирующий список яв­ляется пустым. Любой элемент из исходною списка, .для которого logical_e\prcssion выдает зна­чение TRUE, затем добаатяется в конец резульлгрующего списка. Порядок следования элементовисходного списка сохраняется.Набор (SET). Результирующий набор имеет тот же основной лги гг верхнюю границу, что иисходный набор. Нижняя граница является нулевой. Изначально результирующий набор яатяетсяпустым. Любой элемент из исходного набора, для которого logical_expression выдает значениеTRUE, затем добавляется к результирующему набору.П р и м е р 102 — Предположим, что colour яатяется определенным типом, имеющим в каче­стве исходного типа тип ENUMERATION, который охватывает элементы pink и scarlet. В приме­ ре показано, как извлечь из массива colour те цвета, которые имеют значение pink или scarlet.LOCALcolours ; ARRAY OF colour;reds: ARRAY OF OPTIONAL colour;END_ LOCAL;reds := QUERY ( element <• colours | ( element = pink ) OR( element = scarlet ) );П р и м е р 103 — Это правило использует выражение запроса дтя проверки всех экземпля­ров объекта типа point (точка). Результирующий набор содержит все экземпляры точек, располо­женные в начале координат.RULE two .points at origin FOR (point);WHERESIZEOF(QUERY(temp < - point | temp = point(0.0, 0.0. 0.0))) = 2;END_RULE;В этом примере показано использование трех неявных объявлений. Первым является пере­менная point, которая неявно объявлена в заголовке правила как набор всех экземпляров point.Вторым является переменная temp, в которую при вычислении выражения запроса подставляются73
ГОСТ Р ИСО 10303-11-2000элементы агрегатного значения point. Третьим является конструктор объекта point, который появ­ляется п результате объявления объекта.12.7 СсылкиКогда локально используется элемент, видимый в локальной области действия, ссылка наэлемеш- осуществляется по идентификатору, объявленному для этого элемента.12.7.1 П р о с т ы е с с ы л к иПростая ссылка является просто именем (идентификатором), заданным элементу в даннойобласти действия. Таким способом можно делать ссылки на следующие элементы:- атрибуты внутри объявления объекта*; - константы *; - элементы из перечисляемого типа4; - объекты4*; - функции*; -локальные переменные внутри тела алгоритма*; - параметры внутри тела алгоритма*; - процедуры; - правила; -схемы внутри спецификации интерфейса; - типы.На элементы, помеченные (*), таким же способом можно ссылаться внутри выражения. Наобъекты, помеченные (*4), можно ссылаться как на конструктор (см. 9.2.5) или как на локальнуюпеременную в глобальном правиле (см. 9.6.).П р и м е р 104 — Правильные простые ссылки:line(* тип объекта *)Circle(* тип объекта 4)RED(* элемент перечисления *)z_depth( 4 атрибут 4).12.7.2 С с ы л к и с п р е ф и к с а м иВ случае, когда одинаковое имя элемента перечисления объявлено в нескольких определен­ных типах данных, видимых в одной и той же области действия, (см. раздел 10), имя элементаперечисления должно задаваться с префиксом, являющимся идентификатором определенноготипа данных для этого элемента, для того чтобы однозначно идентифицировать этот элемент.Ссылка с префиксом состоит из имени определенного типа данных, за которым следует точка (.).а за ней следует имя элемента перечисления.П р и м е р 105 — В этом примере показано, как элемент перчисления red может быть уни­кально идентифицирован для использования в переменной stop_signal.TYPE traffic light = ENUMERATION OF (red. amber, green);EMD_TYPE;TYPE rainbow = ENUMERATION OF(ied. orange, yellow, green, blue, indigo, violet);END.TYPE:stop_signal: trafficjight := traificjiglu.red;ink_colour : rainbow := blue;12.7.3 С с ы л к и н а а т р и б у т ыСсылка на атрибут (.) обеспечивает ссылку на единственный атрибут внутри экземпляраобъекта. Выражение, находящееся слева от ссылки на атрибут, должно быть экземпляром объектаили значением компонента сложного объекга. Идентификатору атрибута, на который даетсяссылка, должна предшествовать точка (.).Синтаксис:169 attribute_qualifier = *.* attribute_ref.Ссылка на атрибут, используемая в выражении, возвращает значение конкретного атрибутав экземпляре объекта или в значении компонента сложного объекта. Если конкретный атрибут74
ГОСТ Р ИСО 10303-11-2000не представлен в экземпляре объекта или в значении компонента сложного объекта, то возвраща­ется неопределенное (?) значение.Если ссылка на атрибут встречается в левой части оператора присваивания или в качествемодифицируемого (VAR) параметра процедуры, это приводит к ссылке в экземпляр объекта, вкотором находится соответствующее значение. Если конкретный атрибут не представлен в экзем­ пляре объекта при выполнении оператора присваивания, то результат непредсказуем.П р и м е р 106 — Этот пример демонстрирует использование ссылки на атрибут.ENTITY point;х, v. z. : REAL;END.ENTITY;ENTITY coloured pointSUBTYPE OF (point);colou r: colour; END.ENTITY;PROCEDURE loo; LOCALfirst : point := point!1.0. 2.0, 3.0) | coloured, point (red);second : coloured_point := point(l.0, 2.0, 3.0) t| coloured, point(red);x coord : REAL: END_ LOCAL;x coord := lirst.x; -- значение 1.0IF first.colour = red THEN-- colour является неверной ссылкой, так как он не — является атрибутом объявленного типа firstIF second.colour = red T H E N — TRUE, так как colour является верной ссылкой.12.7.4 Г р у п п о в ы е с с ы л к иГрупповая ссылка (\) обеспечивает ссылку на значение компонента сложного объекта внут­ри экземпляра сложного объекта. Выражение, находящееся слева от групповой ссылки, должнобыть экземпляром сложного объекта. Тип данных объекта значения компонента сложного объек­ та, на который дается ссылка, должен следовать за обратной косой чертой (\).Синтаксис:219 group_qualifier = 'V entity„ref.__________________________________________________________Групповая ссылка, используемая в выражении, возвращает значение компонента сложногообъекта, соответствуйщее поименованному типу данных объекта внутри экземпляра сложногообъекта, на который дается ссылка. Если конкретный тип данных объекта не представлен в эк­земпляре сложного объекта, на который дается ссылка, то возвращается неопределенное (?) зна­чение. Групповая ссылка может быть уточнена за счет последующей ссылки на атрибут. В этомслучае групповая ссылка устанаативает область действия ссылки на атрибут.П р и м е ч а н и е — Это используется тогда, когда тип экземпляра сложного объекта имеет множествоатрибутов с одинаковым именем или когда выбираемый тип данных содержит множество объектов с атрибу­тами, имеющими одинаковое имя. Правила и ограниченияГрупповая ссылка, которая не уточняется ссылкой на атрибут, должна появляться в качествеоперанда или в операторе сравнения значения объекта (= ) или в конструкторе экземпляра слож­ного объекта (И).Г1 ри м е р и107 — В этом примере показано, как групповая ссылка может использоваться для сравнениязначений.ENTITY ElABSTRACT SUPERTYPE;attribl : REAL;75
ГОСТ Р ИСО 10303-11-2000attrib2 : REAL:анпЬЗ : REAL;END „ENTITY:ENTITY E2SUBTYPE OF (El);attribA : INTEGER;attribB : INTEGER;at tribC : INTEGER;END_ENTITY;LOCALa : El;b : E2;END. LOCAL;— построим сложные экземпляры объектов а и Ь,— используя оператор конструирования экземпляра сложного объекта а := Е 1(0.0, 1.0. 2.0) | Е2(1, 2, 3); b := Е 1(0.0. 1.0 ,2.0) | Е2(3, 2, 1);— проверим значения в а и b— через их атрибуты, объявленные в EIа\Е1 = b\E! - TRUEСэто эквивалентно(a.attribl = b.attribl) .AND(a.altrib2 = b.attrib2) AND(a.attrib3 = b.attrib3) •)IOS — Этот пример показывает, как групповая ссылка может исполъзоваться для указаниятипа данных конкретного объекта, рассматриваемого для имени атрибута.ENTITY fool;altr : REAL;END_ENTITY;ENTITY foo2SUBTYPE OF (fool);attr2 : BOOLEAN;END_ENTITY;TYPE l = BINARY (80) FIXED;END_TYPE;TYPE crazy = SELECT(foo2, t);END_TYPE;LOCALv ; crazy;END_ LOCAL;IF 'THIS.F002* IN TYPEOF(v) THEN— этим обеспечивается отсутствие-- непредсказуемых результатов («часовой»)v\fooI.attr := 1.5;— присватает 1.5 attr атрибута v,- так как attr определен в fool, для использования fool имеется групповая ссылкаE N D J F ; 12.8 Обращение к функцииОбращение к функции вызывает функцию. Обращение к функции состоит из идентифика­тора и возможного списка фактических параметров, следующих за идентификатором. Число фак-76
ГОСТ Р ИСО 10303-11-2000тических параметров, их тип и порядок следования, должны соответствовать реквизитам фор­мальных параметров, установленных для данной функции. Выражение обращения к функции по­лучает возвращаемое значение при подстановке фактических параметров вместо формальных па­раметров в объявлении функции.Вызов функции расширяет пространство экземпляров. Любые экземпляры, созданные впроцессе выполнения функции, должны быть уникально обозначены в общей совокупности из­вестных экземпляров. Как правило, созданный экземпляр недоступен вне создающей функции и.в частности, не яатяется частью совокупности экземпляров, доступных для рассмотрения. Ис­ ключением является случай, когда экземпляр есть результат исполнения функции или доступенпри обращении к ней. В этом случае экземпляр остается доступным в точке обращения. Если эк­ земпляр, появившийся таким образом (то есть как значение вычисляемого атрибута или констан­ты), возвращается на уровень схемы, он становится частью всей исследуемой совокупности.Синтаксис:207 funciion call = ( built Jn Jun ction | function_ref) | actual_parameterjist | .157 actual_parameterjist = '(* parameter { Y parameter ) *)* .251 parameter = expression .Правила и ограничения Передаваемые фактические параметры должны быть совместимы по присвоению с фор­мальными параметрами.П р и м е р 109 — Пример использования обращения к функции.ENTITY point;х, v, z : number;END_ENTITY:FUNCTION midpoint_of_line (I: line):point;END_ FUNCTION;IF midpoint_of_line(L506).x = 9.0 THEN ...— оператор ссылки на атрибут применяется-- непосредственно к результату функцииE N D J F ;12.9 Инициализатор агрегатовИнициализатор агрегатов используется для установления значения массива, мультимножест­ва, списка или набора. В квадратных скобках заключены ноль или несколько выражений, при­сваивающих значения типу данных, совместимому с основным типом данных агрегата. Когда вы­ражение имеет два или более значения, эти значения разделяются запятыми. При инициализацииразреженного массива для обозначения пропущенных элементов используется неопределенное (?)значение. Выражение инициализатора агрегата присваивает агрегату значение, содержащее зна­ чения конкретных элементов. Число инициализированных элементов должно соответствоватьлюбым границам, заданным для агрегатного типа данных.Когда используется инициализатор агрегатов, не содержащий ни одного элемента, он созда­ет пустое мультимножество, список или набор (эта конструкция не может был. использована дляинициализации пустых массивов).Синтаксис:159 aggregateJnitializer = 'Г I element { *,* element } | *|* .193 element = expression |repetition | .273 repetition = numeric_e.xpression .П р и м е р 110 — Задано объявление:а : SET OF INTEGER; значения могут быть присвоены следующим образом:а := | I, 3, 6. 9*8, -12 | ; — 9*8 яатяется выражением = 72.77
ГОСТ I* ИСО 10303-11-2000Когда ряд последовательных значений является совпадающим, может быть использованоповторение. Оно представляется двумя выражениями, разделенными символом двоеточия (:). Вы­ ражение слева от двоеточия является повторяемым значением. Выражение справа от двоеточия,повторитель, указывает, сколько раз должно быть повторено повторяемое значение. Выражениесправа от двоеточия вычисляется один раз, перед инициализацией, и должно иметь неотрица­ тельное целочисленное значение.П р и м е р 111 — Задано следующее объявление:а : BAG OF BOOLEAN ;Следующие два оператора эквивалентны:а : = | TRUE : 5 J;а : = | TRUE. TRUE, TRUE, TRUE. TRUE |;12.10 Оператор конструнроваыия экземпляра сложного объекгаОператор конструирования экземпляра сложного объекта (||) создает экземпляр сложногообъекта посредством комбинирования значений компонентов сложного объекта. Значения ком­понентов сложного объекта могут комбинироваться в произвольном порядке. Значением выраже­ ния оператора конструирования экземпляра сложного объекта яиляется значение компонентасложного объекта или экземпляр сложного объекта. Тип данных ком понент сложного объекгаможет появляться только один раз на данном уровне выражения оператора конструирования эк­ земпляра сложного объекта. Значение компонента сложного объекга может появляться на разныхуровнях данного выражения, если они являются вложенными, то есть если значение компонентасложного объекта используется для создания экземпляра сложного объекта, который играет рольатрибута в значении компонента сложного объекта, используемом для создания экземплярасложного объекта. Более полную информацию об экземплярах сложных объектов смотри в при­ложении В.П р и м е р 112 - Задано:ENTITY аABSTRACT SUPERTYPE;а! ; INTEGER:END_ENTITY;ENTITY b SUBTYPE OF (a);bl : STRING;END_ENTITY:ENTITY c SUBTYPE OF (a):c l : REAL; END.ENTITY;Далее могут быть созданы следующие экземпляры сложных объектов:LOCALv! : а;v2 : с;END_ LOCAL;v2 := a(2) | c(7.998e-5>:— это экземпляр типа а&сvl := v2 N b('abc');-- это экземпляр типа а&Ь&сv l := v2\a | b( <.00002639*);-- это экземпляр типа а&Ьvl := vl | v2;-- это неверно, так как экземпляр имел бы тип а&Ь&а&с12.11 Совместимость типовОперанды в операторе должны быть совместимы с типом(ами) данных, требуемым для опе­ратора. Типы данных обоих операндов некоторого оператора также должны быть совместимымежду собой; такие случаи были описаны в данном разделе выше. Типы данных могут быть со­вместимыми, не будучи идентичными. Типы данных совместимы, когда выполняется одно изследующих условий:- типы данных являются одинаковыми;78
ГОСТ Р ИСО 10303-11-2000-оди н тип данных является подтипом или конкретизацией другого (включая определенныетипы данных, использующие определенный тип данных как исходный тип данных);- оба типа данных являются типами данных массивов с совместимыми основными типамиданных и одинаковыми границами;- оба типа данных являются типами данных списков с совместимыми основными типамиданных;- оба типа данных являются типами данных мультимножеств или наборов с совместимымиосновными типами данных.П р и м е р 113 - Заданы следующие определения;TYPE natural = REAL; WHERE SELF >= 0.0;END.TYPE;TYPE positive = natural:WHERE SELF > 0.0;END_TYPE;TYPE bag_of_naturaI = BAG OF natural;END.TYPE;TYPE set_of up to five positive = SET |0:5| OF positive:END_TYPE;Совместимы следующие типы данных;ЗоламСовместим cREALI NTEGER. REAL. NUMBER, natural, positivenaturalREAL. NUMBER, natural, positivepositiveREAL. NUMBER, natural, positivebag_of_naturalBAG OF REAL. BAG OF NUMBER. BAG OF natural.BAG OF positive. SET OF REAL. SET OF NUMBER.SET OF natural, SET OF positive. bag_of_natural,sct_of_up_to_five_positiveset_of_up_to_fivc_posit iveBAG OF REAL. BAG OF NUMBER. BAG OF natural.BAG OF positive. SET OF REAL. SET OF NUMBER.SET OF natural. SET OF positive, bag_of_natural,sct_of_up_to_five_positive 13 Исполняемые операторыИсполняемые операторы определяют действия функций, процедур и правил. Эти операторымогутпроизводить действиятольконад локальнымипеременнымидляFUNCTION.PROCEDURE и RULE. Эти операторы используются для того, чтобы определить логические от­ношения и действия, необходимые для поддержки определения ограничений, то есть разделовWERE и RULE. Данные операторы не оказывают влияния на экземпляры объектов в областизначений, как это определено в разделе 5. Исполняемыми операторами являются: пустой (null),ALIAS (псевдоимени), присваивания (assignment), CASE (альтернативы), составной (compound).ESCAPE (выхода), IF (условный), вызов процедуры (procedure call), REPEAT (цикла). RETURN(возврата) и SKIP (пропуска).Синтаксис;291 stmt = alias_stmt | assignment_stmt | case_stmt | compound ja m t | escape_stmt |if_stmt | null_stmt | procedure call_stmt | repeat_stmt | returnjstmt |skip_stmt. ”Исполняемые операторы м о т появляться только внутри FUNCTION, PROCEDURE илиRULE.79
ГОСТ Р ИСО 10303-11-2000 13.1 Пустой операторИсполняемый оператор, который состоит только из точки с запятой (;), называется пустым(null) оператором. Никаких действий пустой оператор не выполняет.Синтаксис:247 null_stmtП р и м е р 114 — Показано возможное использование пустого оператора.IF а = 13 THEN; — это пустой оператор.ELSEb := 5;E N D J F ; 13.2 Оператор псевдоимениОператор ALIAS (псевдоимени) обеспечивает возможность локального переименования оп-164 aliasjumt = ALIAS variable id FOR general ref { qualifier}stmt { s t mt )END_ALIAS Y -216 general_ref = parameter_ref | variable_ref.В о б л а е т действия оператора ALIAS выражение variable_id неявно объявляется соответст­вующей типизированной переменной, имеющие значения определенного идентификатора, сле­дующего за ключевым словом FOR.Г1 р и м с ч а н и с — Правила видимости для variableid описаны в 10.3.1.П р и м е р 115 — Предположим, что существует тип объекта point (точка) с атрибутами x,y,z.оператор ALIAS может быть использован в функции calculatejength (вычислить длину) для со­кращения длины возвращаемого выражения.ENTITY line;standpoint,end point : point;END.ENTITY;FUNCTION calculatejength (the. line : line) : real;ALIAS s FOR thejine.start .point;ALIAS e FOR the_Iine.end_point;RETURN (SQRT((s.x - e.x)**2 + (s.y — e.y)*»2 + (s.z - e.z)**2)) ;END_ALIAS:END ALIAS;E N D_ FUN CTION; 13.3 Оператор присваивапияОператор присваивания (assignment) используется для назначения экземпляра локальной пе­ременной или параметра. Тип данных значения, присваиваемого переменной, должен быть со­ вместим по присваиванию с переменной или параметром.П р и н с ч а н и с — Оператор присваивания может быть использован для определения того, что двелокальные переменные являются одним и тем же экземпляром объекта.Синтаксис:166 assignment, stmt = general_ref { qualifier) *:=' expression.216 general,ref = parameter_ref | variable_ref.___________________________________________________Г1 p и м е p 116 — Следующие выражения являются правильными присваиваниями.LOCALa, b : REAL;р: point;80
ГОСТ Р ИСО 10303-11-2000END LOCAL;а := 1.1;b := 2.5 • а;р.х := Ь: Совместимость по присваиваниюСчитается, что тип данных, присваиваемый переменной или параметру, совместим по при­сваиванию с типом данных результирующего выражения, если выполняется одно из следующихусловий:-типы данных являются одинаковыми; - выражению присваивается тип. являющийся подтипом или конкретизацией типа, которыйобъявлен для присваиваемой переменной;-объявленный тип присваиваемой переменной является определенным типом, чьим фунда­ментальным типом является выбираемый тип. а выражению присватается значение типа, со­ вместимого с одним или более типами, установленными в списке выбора выбираемого типа.Фундаментальным типом определенного типа япляется фундаментальный тип исходного ти­па. а фундаментальным типом типа, отличного от определенного типа, является сам этот тип;- переменная представлена определенным типом, фундаментальным типом которого япляет­ся простой тип. а выражению присвоено значение этого простого типа;- переменная представлена агрегатным типом данных, а выражением является инициализа­тор агрегата, элементы которого совместимы по присваиванию с основным типом агрегатноготипа данных.Экземпляры компонента сложного объекта, которые не яаляются допустимыми экземпля­рами сложного объекта (см. приложение В), не могут быть присвоены параметрам или перемен­ным и не могут быть переданы функциям и процедурам в качестве фактических параметров. Этоне ограничивает присвоения допустимых экземпляров сложных объектов. 13.4 Оператор CASEОператор CASE (альтернативы) является механизмом, обеспечивающим выборочное испол­нение выполняемых операторов, в зависимости от значения выражения. Оператор выполняется взависимости от значения выражения selector. Оператор альтернативы состоит из выражения, яв­ляющегося переключателем (селектором) альтернативы, и списка альтернативных действий, каж­ дому из которых предшествует одно или несколько выражений, являющихся метками альтерна­тивы. Результирующий тип метки альтернативы должен быть совместим с типом переключателяальтернативы. Мри исполнении оператора альтернативы будет исполнен первый оператор, у ко­торого значение метки альтернативы совпадает со значением переключателя альтернативы. Ис­полняется не более одного из альтернативных операторов. В случае, если ни у одной из метокальтернативы значение не совпадает со значением переключателя альтернативы, то:-если имеется предложение OTHERWISE, исполняется оператор, связанный с OTHERWISE; - если предложение OTHERWISE отсутствует, ни одного оператора исполнено не будет.Синтаксис:182 case stmt = CASE selector OF { case action 1 | OTHERWISE ' * stmt |END_CASE.283 selector = expression .180 case_action = casejabe! |casejabel )stnu .181 casejabel = expression . Правила и ограниченияТип значения, присвоенного альтернативным меткам, должен быть совместим с типом зна­чения. присвоенного селектору альтернативы.П р и м е р 117 — Простейший пример оператора альтернативы, использующего целочислен­ные альтернативные метки.LOCALа : INTEGER ;х : REAL ;END_LOCAL ;
ГОСТ Р ИСО 10303-11-2000а := 3 ;х := 34.97 ;CASH a OF1: х := SIN(x) ;2: х := НХР(х);3: х := SQRT(x) ;это оператор исполнено!4, 5 : х := LOG(x) ;OTHERWISE : х := 0.0 ;END_CASE ; 13.5 Составной операторСоставным оператором является последовательность операторов, заключенная между клю­чевыми словами BEGIN и END. Составной оператор действует как единичный оператор.Г1 р и м с ч а н и с - Составной оператор нс образует ноной области действия.Синтаксис:183 compoundjstmt = BEGIN stmt { stmt } END.П р и м е р I IS — Простейший составной оператор:BEGINa = a+I ;IF a > 100 THENa := 0 ;E N D J F ;END ; 13.6 Оператор выходаОператор ESCAPE вызывает немедленный переход к оператору, следующему непосредст­венно за тем оператором REPEAT, в котором появился данный оператор ESCAPE.П р и м е ч а н и е — Применение оператора ESCAPE является единственным способом выхода из бес­конечною никла при исполнения оператора REPEAT.Синтаксис:202 escape_stnit = ESCAPE. Правила и ограниченияОператор ESCAPE должен появляться только внутри области действия оператора REPEAT.П р и м е р 119 — Оператор ESCAPE передает управление оператору, следующему заEND_ REPEAT, если а < 0,REPEAT UNTIL (a=l);IF (а < 0) THENESCAPE;E N D J F ;END_REPEAT; -- управление передается здесь 13.7 Оператор I f ... Then ... ElseУсловный оператор IF ... THEN ... ELSE допускает условное выполнение операторов на ос­нове выражения типа LOGICAL. Когда logicaI_expression принимает значение TRUE, исполняет­ся оператор, следующий за ключевым словом THEN. Когда Iogical_exprcssion принимает значениеFALSE или UNKNOWN, исполняется оператор, следующий за ключевым словом ELSE, если этоключевое слово имеется в выражении. Если Iogical_e.xpression принимает значение FALSE илиUNKNOWN, а ключевое слово ELSE отсутствует, управление передается следующему оператору.Синтаксис:220 if stmt = IF logical expression THEN stmt { stmt ) | ELSE stmt { stmt ) |E N D J F 7 ;' . 82
ГОСТ Р ИСО 10303-11-2000П ри м е р 120 — Простой оператор 1F:IF а < 10 THENс := с + 1;ELSEс := с — I;E N D J F : 13.8 Оператор вызова процедурыОператор вызова процедуры вызывает процедуру. Фактические параметры при вызове про­цедуры должны быть согласованы с формальными параметрами, установленными для этой про­ цедуры. по числу, порядку и типу.Синтаксис:257 procedure_call_stmt = ( built_in_procedure | procedure..ref)| actual .parameterJist |.157 actual_parameter_list = ' ( ’ parameter { Y parameter } *)’ .251 parameter = expression .Правила и ограничения Передаваемые фактические параметры должны быть совместимы по присваиванию с фор­мальными параметрами.П р и м е р 121 — Вызов встроенной процедуры INSERT.INSERT (point list. this_point, here): 13.9 Оператор циклаОператор цикла (REPEAT) используется дтя повторения в зависимости от условий выпол­нения последовательности операторов. Начало или продолжение повторения определяется путемоценки управляющего условия(ий). Управляющими условиями являются:- конечная итерация: - пока условие имеет значение TRUE; - д о тех пор. пока условие не получит значение TRUE.Синтаксис:272 repeat_simt = REPEAT repeat_comrolstmt { stmt | END. REPEAT *;* .271 repeat_control = | increment_control | | while, control | | until_comrol | . 222 increment_control = variable_idbound_l TO bound_2 | BY increment | .174 bound_l = numeric_expression . 175 bound_2 = numeric_expression .221 increment = nunmeric_expression .________________________________________________________Для задания условий прерывания повторения может использоваться комбинация управляю­щих элементов. Для упраатения итерациями данные условия вычисляются следующим образом:a)Если задано управление приращением, то до начала выполнения оператора REPEATвычисляется оператор управления приращением, как описано в 13.9.1.b)Вычисляется управляющее выражение WHILE, при его наличии. Если результат прини­мает значение TRUE (или условие WHILE отсутствует), тело оператора REPEAT исполняется.Если результат принимает значение FALSE или UNKNOWN, исполнение оператора REPEATпрерывается.c)Когда исполнение тела оператора REPEAT завершено, вычисляется какое-либо управ­ляющие выражение UNTIL. Если результирующим значением является TRUE, дальнейшее ис­полнение итераций прекращается и выполнение оператора REPEAT завершается. Если результатимеет значение FALSE или UNKNOWN, управление оператором REPEAT возвращается к управ­лению приращением. Если управляющее условие UNTIL отсутствует, управление операторомREPEAT возвращается к управлению приращением.d)Если имеется управление приращением, значение переменной цикла изменяется на ве­личину приращения на каждой итерации. Если значение переменной цикла находится в пределахот bound_l до bound_2. включая сами границы, управление проводится по вышеописанномупункту Ь). в противном случае выполнение оператора REPEAT прерывается. ХЗ
ГОСТ Р ИСО 10303-11-2000II ри м е р 122 — В данном примере показано, как в операторе REPEAT могут быть исполь­зованы несколько управляющих условий. Исполнения операторов будут повторяться до тех пор.пока не будет достигнута требуемая точность или не будет выполнено сто циклов, независимо отпервого: то есть повторение прекращается, даже если решение не сошлось.REPEAT i := 1 ТО 100 UNTIL epsilon < l.E-6;epsilon :=END_REPEAT;13.9.1 У п р а в л е н и е п р и р а щ е н и е мУправление приращением приводит к выполнению тела оператора цикла для ряда значенийиз соответствующей последовательности. При входе в оператор цикла неявно объявляется пере­ менная числового типа variablejd. принимающая значение bound_I. После каждой итерации пе­ ременной variable_id присваивается значение >ariable_id + increment. Если приращение (increment)не определено, для него по умолчанию принимается значение равное единице (1). Если значениеvariablejd леж|гт между bound_l и bound_2 (включая случай, когда variablejd = bound_2),выполнение оператора цикла продолжается.Синтаксис: 222 increment_control = variablejdbound_ 1 ТО bound_2 | BY increment | .174 bound J = numeric_expression . 175 bound_2 = numeric_expression .221 increment = numeric_expression . Правила и ограниченияa)Выражениям numeric_expression. представляющим bound_l. bound_2 и increment, должныбыть присвоены числовые значения. b)Выражения numeric_e.\pression. представтяющие границы и приращение, вычисляютсяодин раз при входе в оператор REPEAT.c)Если какое-либо из выражений numeric_expressk»n. представляющих границы или при­ращение, имеет неопределенное (?) значение, оператор REPEAT не выполняется.d)Перед первым вычислением оператора управления приращением проверяются следую­щие условия:-если increment (приращение) положительно, a bound_l > bound_2, оператор REPEAT невыполняется;-если increment отрицательно, a bound_l < bound_2. оператор REPEAT не выполняется; -если increment нулевое (0), оператор REPEAT не выполняется; - иначе, оператор REPEAT выполняется до тех пор. пока значение переменной variablejd невыйдет за установленные границы или пока один из других операторов управления циклом непрерпет его выполнение.e)Переменной цикла variablejd присваивается значение bound_l в начале первого итера­ционного цикла, а в начале каждого последующего цикла она увеличивается на величину increment (приращения).0Тело оператора REPEAT не должно изменять значение переменной цикла.g)Оператор REPEAT образует локальную область действия, в которой переменная цикла variablejd объявляется неявно как числовая переменная. Вследствие этого, любое объявление variablejd во внешней области действия не видимо в операторе REPEAT, а значение переменнойцикла недоступно за пределами оператора REPEAT.13.9.2 У п р а в л е н и е WHILEУправление WHILE обеспечивает инициализацию и продолжение выполнения тела опера­тора REPEAT, пока управляющее выражение имеет значение TRUE. Управляющее выражениевычисляется перед каждой итерацией.Если присутствует управление WHILE, а управляющее выражение имеет значение FALSEили UNKNOWN, тело оператора REPEAT не выполняется.Синтаксис: 316 while_control = WHILE logical.expression .2 4 1 logical .expression = expression .84
ГОСТ Р ИСО 10303-11-2000 Правила и ограничения:a)Логическому выражению logical_expression должно присваиваться значение типаLOGICAL.b) Логическое выражение logicaI_expression вычисляется заново в начале каждой итерации.13.9.3 У п р а в л е н и е UNTILУправление UNTIL обеспечивает продолжение выполнения тела оператора REPEAT до техпор. пока управляющее выражение не примет значение TRUE. Выражение должно вычислятсяпосле каждой итерации.Если управление UNTIL является единственным видом управления, всегда должна бытьвыполнена по крайней мере одна итерация.Синтаксис:312 until_control = UNTIL logical expression . 241 logical_expression = expression .____________________________________________________________ Правила и ограниченияa) Логическому выражению logical_expression должно присваиваться значение типаLOGICAL.b) Логическое выражение Iogical_expression вычисляется заново в конце каждой итерации. 13.10 Оператор возвратаОператор возврата RETURN прерывает исполнение функции FUNCTION или процедурыPROCEDURE. В функции оператор RETURN должен определять выражение. Значение, получен­ное при вычислении данного выражения, является результатом функции и возвращается в точку еевызова. Выражение должно быть совместимо по присваиванию с объявленным возвращаемым ти­пом функции. В процедуре оператор RETURN не должен содержать никаких выражений.Синтаксис:276 return_stmt = RETURN | '(* expression ')' ). Правила и ограниченияОператор RETURN может появляться только в функции FUNCTION или процедуреPROCEDURE.П р и м е р 123 - Виды оператора RETURN.RETURN (50) ;<♦ из функции *)RETURN(work_point):(♦ из функции •)RETURN ;(* из процедуры •) 13.11 Оператор пропускаОператор пропуска SKIP вызывает немедленный переход в конец тела оператора REPEAT, вкотором он появился. Затем вычисляются и оцениваются управляющие условия, как это описанов разделе 13.9.Синтаксис:290 skipjanu = SKIP Правила и ограниченияОператор SKIP должен появляться только в области действия оператора REPEAT.П р и м е р 124 — Оператор SKIP передает управление оператору END,REPEAT, которыйвызывает оценку управления UNTIL.REPEAT UNTIL (a=l):IF (а < 0) THENSKIP;E N D JF ;... — этот оператор будет пропущен, если а < 0END_REPEAT;85
ГОСТ I* ИСО 10303-11-2000 14 Встроенные константыВ языке EXPRESS существует несколько встроенных констант, которые описаны ниже.П р и м е ч а н и е — Считается, что встроенные константы имеют точное значение, даже если что зна­чение непредставимо в компьютере.14.1 Константа еCONST_E является константой типа REAL, предстаатяющей математическое значение е —основание функции натурального логарифма (In). Ее значение задается следующей математиче­ ской формулой: 14.2 НеопределеннаяСимвол неопределенности (?) символизирует неоднозначное значение. Он совместим совсеми типами данных.П р и м е ч а н и е — Наиболее часто неопределенность (?) используется для спецификации верхнейграшшм мультимножества, списка или набор:!. Этим представляется понятие о неограниченности размераагрегатного значения, определенного агрегатным типом данных. 14.3 ЛожьКонстанта FALSE (ложь) яачяется константой типа LOGICAL, предстаатяющей логическуюзапись понятия “ложь". Она совместима с типами данных BOOLEAN и LOGICAL. 14.4 ПиКонстанта PI (пи) яачяется константой типа REAL, предстаачяюшей математическое значе­ние я. отношение длины окружности к ее диаметру. 14.5 SelfПсевдоконстанта SELF ссылается на данный экземпляр объекта или значение типа. SELFможет появляться внутри объяатения объекта, объявления типа или конструктора объекта.Г1 р и м е ч а м и с — SELF нс яачяется константой, но ведет себя как константа в каждом контексте,где она может появиться. 14.6 ИстинаКонстанта TRUE (истина) является константой типа LOGICAL, предстаачяюшей логиче­скую запись понятия «истина*. Она совместима с типами данных BOOLEAN и LOGICAL. 14.7 НеизвестнаяКонстанта UNKNOWN (неизвестное) яачяется константой типа LOGICAL, предстаатяющейтот факт, что для оценки логического условия недостаточно данных. Она совместима с типомданных LOGICAL, но несовместима с типом данных BOOLEAN. 15 Встроенные функцииПредполагается, что все функции (и математические операции вообще) вычисляются с точ­ных» результатом.Для каждой встроенной функции задан ее прототип, показывающий типы ее формальныхпараметров и результат (возвращаемое значение). 15.1 Abs — арифметическая функция FUNCTION ABS ( V:NUMBER ) : NUMBER;Функция ABS возвращает абсолютное значение числа Параметры. V яачяется числом.Результат. Абсолютное значение V. Возвращаемый тип данных идентичен типу параметра V. П р и м е р 125 - ABS ( -10 ) ~ > 10 15.2 ACos — арифметическая функция FUNCTION ACOS ( V:NUMBER ) : REAL;Функция ACOS возвращает величину угла по заданному значению косинуса. Параметры. V — число, являющееся косинусом угла.Результат. Угол в радианах (0 £ результат < я), косинус которого равен V. Условия. —1.0 й V й 1.0П р и м е р 126 - ACOS ( 0.3 )1.266103 ... 86
ГОСТ Р ИСО 10303-11-2000 15.3 ASin — арифметическая функция FUNCTION .ASIN ( V:NUMBER ) : REAL;Функция ASIN возвращает величину угла но заданному значению синуса. Параметры. V — число, являющееся синусом угла.Результат. Угол в радианах (-я/2 < результат < я/2), синус которого равен V. Условия. -1 .0 £ V £ 1.0П р и м е р 127 - ASIN ( 0.3 ) ~ > 3.04692...е-' 15.4 АТаа — арифметическая функция FUNCTION ATAN ( VLNUMBER; V2: NUMBER ) : REAL;Функция ATAN возвращает значение угла по заданному значению тангенса V. где V задановыражением V = VI/V2. Параметрыa) Vl — число. b) V2 — число. Результат. Угол в радианах (-я/2 £ результат £ я/2). тангенс которого равен V. Если V2 рав­но нулю, результатом является я/2 или -я/2 в зависимости от знака VI. Условия. VI и V2 не должны одновременно иметь нулевое значение.П р и м е р 128 - ATAN ( -5.5, 3.0 ) ~ > -1,071449... 15.5 Blength — двоичная функция FUNCTION В LENGTH ( V:BINARY ) : INTEGER;Функиия BLENGTH возвращает число битов в двоичном значении. Параметры. V является двоичным значением.Результат. Возвращаемым значением является число битов в переданном двоичном значении.П р и м е р 129LOCALn : NUMBER;х : BINARY := %010I(M)10 ; END_LOCAL;n ;= BLENGTH ( x ); — n присваивается значение 8 15.6 Cos — арифметическая функция FUNCTION COS ( V:NUMBER ) : REAL;Функция COS возвращает значение косинуса угла. Параметры. V — число, являющееся значением угла в радианах.Результат. Косинус V (-1.0 £ результат £ 1.0).П р и м е р 130 - COS ( 0.5 ) « > 8.77582...Е-1 15.7 Exists — общая функция FUNCTION EXISTS ( V:GENERIC ) : BOOLEAN;Функция EXISTS возвращает значение TRUE, если существует значение для входною пара­метра, или FALSE, если входной параметр не имеет значения. Функция EXISTS полезна для про­верки. имеют ли значения OPTIONAL атрибуты или инициализированы ли переменные. Параметры. V яатяется выражением, результаты которого могут быть любого типа.Результат. TRUE или FALSE, в зависимости от того, имеет ли V фактическое или неопреде­ленное (?) значение.П р и м е р 131 - IF EXISTS ( а ) THEN ... 15.8 Exp — арифметическая функиия FUNCTION EXP ( VrNUMBER ) : REAL;Функння EXP возвращает e (основание натуральной логарифмической системы), возведен­ное в степень V. Параметры. V — числоРезультат. Значение еу .87
ГОСТ !* ИСО 10303-11-2000П р и м е р 132 - ЕХР ( 10 ) ~ > 2.202646...Е+4 15.9 Format — oilman функция FUNCTION FORMAT (N:NUMBER; F:STRING) : STRING;Функция FORMAT возвращает форматированное строковое представление числа. Параметрыa)N — число (целое или действительное);b)F — строка, содержащая команды форматирования.Результат. Строка, представляющая число N. отформатированное в соответствии с F. Принеобходимости строковое представление округляется.Строка форматирования содержит специальные символы, показывающие вид результата.Строка форматирования может быть записана тремя способами:a)Строка форматирования может задавать символьное описание выходного представления.b)Строка форматирования может задавать описание шаблона выходного представления.c)Когда строка форматирования пустая, создается стандартное выходное представление.15.9.1 С и м в о л ь н о е п р е д с т а в л е н и еОбщая форма символьного представления имеет вид: | sign | width (.decimals | type.Параметр sign (знак) показывает, как представляется знак числа. Если sign не определен илиопределен как минус (-), первым возвращаемым символом для отрицательных чисел являетсяминус, а для положительных чисел (включая ноль) — пробел. Если sign определен как плюс (+).то первым возвращаемым символом для отрицательных чисел является минус, для положитель­ных чисел — плюс и для нуля — пробел.Параметр width (ширина) задает общее число символов в возвращаемой строке. Он долженбыть целым числом, большим двух. Если width задается с предшествующим нулем, возвращаемаястрока будет содержать предшествующие нули, иначе предшествующие нули запрещены. Еслиформатируемое число содержит больше символов, чем задано значением width, возвращаетсястрока с числом символов необходимого формата.Параметр decimals (десятичные знаки) задает число цифр, которые возвращаются в строкесправа от десятичной точки. Число десятичных знаков, если оно задается, должно быть положи­ тельным целым числом. Если параметр decimals не задан, возвращаемая строка не будет содер­ жать десятичной точки следующих за ней цифр.Параметр type является буквой, указывающей вид числа, представляемого в строке:- если type имеет значение I, число должно быть представлено как целое, при этом:параметр decimals не устанавливается,значение параметра width должно быть не менее двух;- если type имеет значение F. число должно быть представлено как действительное число сфиксированной десятичной точкой, при этом:значение параметра decimals, если он задан, должно быть не менее единицы.если параметр decimals не задан, его значение по умолчанию принимается равнымдвум,значение параметра width должно быть не менее четырех;- если type имеет значение Е. число должно быть представлено как действительное число вэкспоненциальной форме, при этом:для type Е всегда должен всегда устанавливаться параметр decimals,значение параметра decimals должно быть не менее единицы,значение параметра width должно быть не менее семи (7), если в параметре width задан предшествующий ноль, первыми двумя символами ман­ тиссы должны быть 0.,экспоненциальная часть должна содержать по меньшей мере два символа с обязатель­ным знаком,отображаемый знак экспоненты ЧГ должен быть прописной буквой.П р и м е ч а н и е — В таблице 20 показано, как форматирование влияет на представление различныхзначений. 88
ГОСТ Р ИСО 10303-11-2000Т а б л к н а 20 — Пример влияния символьного форматирования Ч и с л о Ф о р м » В и д К о м м е н т а р и и10+71’ +10'Нули удалены10+071'+000010'Нули не удалены10I0.3EЧ .000Е +0Г123.4567898.2F■ 123.46'123.4567898.2Е‘ I.23E+02'123.45678908.2Е•0.12Е+02'Предшествующий ноль обязателенЭкспоненциальная часть содержит три символа,9.876Е1238.2Е'9 .8 8 Е + 123'а ширина игнорирована32.77761' 33'Округлено15.9.2 П р е д с т а в л е н и е в в и д е ш а б л о н а В шаблонном формате каждый символ шаблона соответствует символу в возвращаемойстроке. Используемые символы заданы в таблице 21.Т а б л и ц а 21 — Символы шаблонного форматированияСмиво.1Значениея (знак номера)Представляет цифру. (занятия)Разделитель. (точка)Разделитель + — ( п л ю с и м и н у с )Представляет знак( ) (круглые скобки)Представляет отрицаниеРазделители точка У и запятаяиспользуются следующим образом:-если запятая У появляется в строке формата раньше точки У , то запятая У является сим­волом группирования, а точка У — десятичным символом;-если точка У появляется в строке формата раньше запятой У . то точка У яазяется симво­лом группирования, а запятая У — десятичным символом;-если в строке формата есть только один разделитель, этот разделитель является десятич­ным символом.Любой другой символ изображается без изменения.П р и м е ч а н и е — В таблице 22 показано, как форматирование влияет на представление различныхзначений.Т а б л и ц а 22 — Пример влияния шаблонного форматированияЧисло Ф о р м а !Вид К о м м е н т а р и и10Я Р Я’ 10-10(Я Я *)• 10'Круглые скобки игнорированы-10(* я я)'( 10)'7123.456ноя. к и п . н а' 7.123.46-Нотация США7123.456Я Р Я . Я Я Я ? Я Я' 7.123.46-Европейская нотация15.9.3 С т а н д а р т н о е п р е д с т а в л е н и еСтандартным представлением для целого числа является '7Г. Стандартным представлениемдля действительного числа является '10Е'. Описание символьных представлений представлено в15.9.1.89
ГОСТ I* ИСО 10303-11-2000 15.10 Hi Bound — арифметическая функция FUNCTION HIBOUND ( VrAGGREGATE OF GENERIC ) : INTEGER;Функция HIBOUND возвращает объявленный верхний индекс массива (ARRAY) или объ­явленную верхнюю границу мультимножества (BAG), списка (LIST) или набора SET. Параметры. V — агрегатное значение.Результатa) Когда V является массивом (ARRAY), возвращаемым значением является объявленныйверхний индекс.b) Когда V является мультимножеством (BAG), списком (LIST) или набором (SET), возвра­щаемым значением является объявленная верхняя граница; если границы не объявлены иливерхняя граница объявлена неопределенной (?), то возвращается неопределенное (?) значение.П рн м е р 133 — Использование функции HIBOUND для вложенных агрегатных значений.LOCALа ; ARRAY[-3:191 OF SET|2:4| OF LIST |0:?| OF INTEGER:hi, h2. h3 : INTEGER;END_ LOCAL: аГзНПШ 2 ;— помещает значение в списокhi := HIBOUND(a);— =19 (верхний индекс массива)h2 := HIBOUND(a|-3J);— = 4 (верхняя граница набора)h3 := HIBOUND(a|-3||IJ);— = ? (верхняя граница списка (неограниченного)) 15.11 Hi Index — арифметическая функция FUNCTION HIINDEX ( V: AG GREG ATE OF GENERIC ) : INTEGER;Функция HIINDEX возвращает верхний индекс массива (ARRAY) или число элементов вмультимножестве (BAG), списке (LIST) или наборе (SET). Параметры. V — агрегатное значение Результатa) Когда V — массив (ARRAY), возвращаемым значением является объяшенный верхнийиндекс.b) Когда V — мультимножество (BAG), список (LIST) или набор (SET), возвращаемым зна­чением яатяется фактическое число элементов в агрегатном значении.П р и м е р 134 — Использование функции HIINDEX для вложенных агрегатных значенийLOCALа : ARRAY|-3:19) OF SET|2:4| OF LIST|0:?| OF INTEGER:hi, h2. h3 : INTEGER;END_ LOCAL;а|-ЗЦ 1Ц11 := 2;— помешает значение в списокhi := HIINDEX(a);— = 19 (верхний индекс массива)h2 := H llN D E X (a|-3|);— = 1 (размер набора) — это неверно по отношению к— границам набораh3 := HIINDEX(a|-31|!|); - = I (размер списка) 15.12 Length — с г роковая функция FUNCTION LENGTH ( V:STRING ) : INTEGER;Функция LENGTH возвращает число символов в строке. Параметры. V — строковое значение.Результат. Возвращаемым значением является число символов в строке и оно должно бытьбольшим или равным нулю.П р и м е р 135 — Использование функции LENGTH.LOCALn : NUMBER; xl : STRING := abc'; x2 : STRING := <.(XXX)25FF00(M01B5o; END LOCAL;90
ГОСТ Р ИСО 10303-11-2000n := LENGTH ( х ! ); -- п присваивается значение 3n := LENGTH ( х2 ); -- п присваивается значение 2 15.13 LoBound — арифметическая функция FUNCTION LOBOUND ( V:AGGREGATE OF GENERIC ) : INTEGER;Функция LOBOUND возвращает объявленный нижний индекс массива (ARRAY) или объ­явленную нижнюю границу мультимножества (BAG), списка (LIST) или набора (SET). Параметры. V — агрегатное значение. Результатa)Когда V — массив (ARRAY), возвращаемым значением является объявленный нижнийиндекс.b)Когда V — мультимножество (BAG), список (LIST) или набор (SET), возвращаемымзначением валяется объявленная нижняя Гранина; если нижняя граница не объявлена, то воз­вращается нуль (0).П р и м е р 136 — Использование функции LOBOUND для вложенных агрегатных значений.LOCALа : ARRAYI-3: 19] OF SET |2:4| OF LIST|();?| OF INTEGER;hi, h2. h3 : INTEGER;END_ LOCAL;hi ;= LOBOUND(a);— = 3 (нижний индекс массива)h2 ;«= LO BOUND(a|-3|);— = 2 (нижняя граница набора)h3 := L O B O U N D (a|-3||l|); — = 0 (нижняя граница списка) 15.14 Log — арифметическая функция FUNCTION LOG ( VrNUMBER ) : REAL;Функция LOG возвращает натуральный логарифм числа. Параметры. V — число Результат. Действительное число, которое яаляется натуральным логарифмом V.Условия. V > 0.0П р и м е р 137 - LOG ( 4.5 ) ~ > 1.504077...Е0 15.15 Log2 — арифметическая функция FUNCTION LOG2 ( VrNUMBER ) : REAL;Функция LOG2 возвращает логарифм числа по основанию два (2). Параметры. V — число.Результат. Действительное число, которое является логарифмом V по основанию два (2). Условия. V > 0.0П р и м е р 138 - LOG2 ( 8 ) ~ > 3.00...Е0 15.16 LoglO — арифметическая функция FUNCTION LOG 10 ( VrNUMBER ) : REAL;Функция LOG К) возвращает логарифм числа по основанию десять (10). Параметры. V — число.Результат. Действительное число, которое является логарифмом V по основанию десять (10). Условия. V > 0.0П р и м е р 139 - LOG 10 ( 10 ) ~ > 1.00...Е0 15.17 Lolndex — арифметическая функция FUNCTION LOLNDEX ( VrAGGREGATE OF GENERIC ) : INTEGER;Функция LOINDEX возвращает нижний индекс агрегатного значения. Параметры. V — агрегатное значение. Результата)Когда V — массив (ARRAY), возвращаемым значением является объявленный нижнийиндекс.91
ГОСТ Г ИСО 10303-11-2000Ь)Когда V — мультимножество (BAG), список (LIST) или набор (SET), возвращаемымзначением является единица (1).П р и м е р 140 - Использование функции LOINDEX для вложенных агрегатных значений.LOCALа : ARRAY|-3:19| OF SET|2:4| OF LlST|0:?| OF INTEGER:hi, h2, h3 : INTEGER;END_ LOCAL;h i := LOINDEX(a);— = -3 (нижний индекс массива)h2 := LOINDEX(a|-31);- = I (для набора)h3 := LO INDEX(a|-3|| 1]); — = 1 (для списка) 15.18 NVL — функция нулевого значения FUNCTION NVL(V:GENER1C:GEN1; SUBSTITUTE:GENERIC:GEN1):GENERIC:GEN1;Функция NVL возвращает или входное значение, или альтернативное значение, если вход­ной параметр имеет неопределенное (?) значение. Параметрыa)V — выражение любого типа.b)SUBSTITUTE — выражение, которое не должно быть неопределенным (?). Результат. Когда V не является неопределенным (?), возвращается значение V. Иначе воз­вращается значение SUBSTITUTE.П р и м е р 141 — ENTITY unit vector;х, у : REAL;г : OPTIONAL REAL;WHEREx**2 + y**2 + NVL(/„ 0.0)**2 = 1.0;END_ENTITY;Функция NVL используется для подстановки нуля (0.0) в качестве значения Z. когда Z яв­ляется неопределенным (?). 15.19 Odd — арифметическая функция FUNCTION ODD ( VrINTEGER ) : LOGICAL;Функция ODD возвращает значение TRUE или FALSE, в зависимости от того, является личисто нечетным или четным. Параметры. V — целое число.Результат. Когда V MOD 2 = 1 , возвращается TRUE, иначе возвращается FALSE. Условия. Ноль не является нечетным числом.П р и м е р 142 - ODD ( 121 ) - > TRUE 15.20 RoIesOf — общая функция FUNCTION ROLESOF ( V-.GENERIC ) : SET OF STRING;Функиия ROLESOF возвращает набор строк, содержащих полные квалифицированные име­на ролей, играемых заданным экземпляром объекта. Полное квалифицированное имя определя­ется как имя атрибута, квалифицированное именем схемы и объекта, в которых объявлен атрибут(то есть SCHEMA.ENTITY.ATTRIBUTE'). Параметры. V — любой экземпляр типа данных объекта.Результат. Набор строковых значений (в верхнем регистре), содержащий полные квалифи­цированные имена атрибутов экземпляров объектов, которые используют экземпляр V.Если поименованный тип данных импортирован с помощью спецификаций USE илиREFERENCE, также возвращается имя типа в исходной схеме и имя исходной схемы, если типбыл переименован при импорте. Поскольку операторы USE могут быть связанными в цепочку,возвращаются все имена связанных схем и имя поименованного типа в каждой схеме.П р и м е р 143 — Этот пример показывает, что точка может быть использована как центрокружности. Функция ROLESOF возвращает строку1, показывающую, какую роль фактически иг­рает данный экземпляр объекта. 9 2
ГОСТ Р ИСО 10303-11-2000SCHEMA tliat_schema;ENTITY point;x, у, z : REAL;END_ENT1TY;ENTITY line;start. end ; point;END_ENTITY:END_SCHEMA:SCHEMA this_schema;USE FROM that_schema (point, line);CONSTANTorigin ; point := point(0.0, 0.0. 0.0);END_CONSTANT;ENTITY circle;centre: point;axis; vector;radius: REAL;END ENTITY.LOCALp : point := point(l.0, 0.0. 0.0);c : circle ;= circle(p. vector(l, 1, 1), 1.0); I : line := Iine(p. origin); END_ LOCAL;IF THIS.SCHEMA.CIRCLE.CENTRE' IN ROLESOF(p) THEN - trueIF 'THIS_SCHEMA.LINE.START' IN ROLESOF(p) THEN- trueIF 'THAT_SCHEMA.LINE.START' IN ROLESOF(p) THEN- trueIF THIS_SCHEMA.L1NE.END' IN ROLESOF(p) THEN- false 15.21 Sin — арифметическая функция FUNCTION SIN ( V:NUMBER ) : REAL;Функция SIN возвращает значение синуса угла. Параметры. V — число, представляющее угол в радианах Результат. Синус V (-1.0 £ результат £1.0)П р и м е р 144 - SIN ( Р1 ) - > 0.0 15.22 SizeOf — агрегатная функция FUNCTION SIZEOF ( V:AGGREGATE OF GENERIC ) : INTEGER;Функция SIZEOF возвращает число элементов в агрегатном значении. Параметры. V — агрегатное значение.Результатa)Когда V — массив (ARRAY), возвращаемым значением является объявленное для негочисло элементов агрегатного типа данных.b )Когда V — мультимножество (BAG), список (LIST) или набор (SET), возвращаемымзначением является фактическое число элементов в агрегатном значении.П р и м е р 145 — LOCALn : NUMBER;у : ARRAY|2:5| OF b;93
ГОСТ I* ИСО 10303-11-2000END_ LOCAL;n := SIZEOF (у); — n присваивается значение 4 15.23 Sqrt — арифметическая функция FUNCTION SQRT ( V:NUMBER ) : REAL;Функция SQRT возвращает неотрицательный квадратный корень числа. Параметры. V — любое неотрицательное число.Результат. Неотрицательный квадратный корень V. Условия. V > 0.0 П р и м е р 146 - SQRT ( 121 ) ~ > 11.0 15.24 Tan — арифметическая функция FUNCTION TAN ( VtNUMBER ) : REAL;Функция TAN возвращает значение тангенса угла. Параметры. V — число, выражающее угол в радианах. Результат. Тангенс угла. Если угол имеет значение пл/2, где п нечетное целое число, воз­вращается неопределенное (?) значение. П р и м е р 147 - TAN ( 0.0 ) ~ > 0.0 15.25 TypeOf — обшая функция FUNCTION TYPEOF ( V:GENERIC ) : SET OF STRING;Функция TYPEOF возвращает набор строк, содержащий имена всех типов данных, параметркоторых является членом. За исключением простых типов данных (BINARY, BOOLEAN,INTEGER. LOGICAL, NUMBER. REAL и STRING) и агрегатных типов данных (ARRAY. BAG.LIST. SET), имена которых квалифицируются именем схемы, содержащей определение типа.П р и м е ч а н и е I — Основное назначение данной функции состоит в проверке, может ли данноезначение (переменная, значение атрибута) использоваться для заданной цели, например, чтобы убедиться всовместимости двух значений но присваиванию. Также данная функция может использоваться, если раз­ личные подтипы или конкретизации заданного типа по-разному трактуются в некотором контексте. Параметры. V — значение любого типа.Результат. Содержимым возвращаемого набора строковых значений являются имена (вверхнем регистре) всех типов, где V является членом. Если это не простой и не агрегатный типданных, такие имена квалифицируютсяименем схемы,содержащей определение типа('SHEMA.TYPE'). Возвращаемое значение может быть получено с помощью нижеприведенногоалгоритма (алгоритм приводится в целях разъяснения, а не в качестве необходимого компонентареализации).a)Когда именем типа является поименованный тип данных, результирующий набор ини­циализируется включением в набор имени того типа, к которому принадлежит V. Если V являет­ся формальным параметром, он заменяется соответствующим фактическим парамегром. Если Vявляется агрегатным значением, именем типа является точное имя соответствующего агрегатноготипа данных (ARRAY, BAG. LIST, SET).b)Повторять до rex пор, пока наращивание списка не прекратится;1)Повторить для всех имен в результирующем наборе:-есл и текущее имя является именем простого типа данных, пропустить;- если текущее имя является именем агрегатного типа данных (ARRAY, BAG, LIST,SET), пропустить;-если текущее имя является именем перечисляемого типа данных, пропустить;-если текущее имя яатяется именем выбираемого типа данных, к результирующе­му набору добавляются имена всех типов (с именем схемы) из списка выбора,экземпляром которых действительно является V. (Этих имен может быть не­сколько. так как список выбора может содержать имена типов, являющихся со­вместимыми подтипами общего супертипа или конкретизацией одного общегообобщенного типа);-если текущее имя является именем любого другого вида определенного типа дан­ных, то имя типа, на который ссылается текущий тип, добавляется к результи-94
ГОСТ Р ИСО 10303-11-2000рующему набору с именем схемы. Если ссылка делается на агрегатный тип дан­ных, то добавляется только имя агрегатного типа;- если текущее имя является именем объекта, то к результирующему набору добав­ляются имена всех его подтипов (включая, при необходимости, имя схемы) эк-земпляром которых является V.2)Повторить для всех имен в результирующем наборе:- если текущее имя является именем подтипа, к результирующему набору лобаатя-ются имена всех его супертипов;-если текущее имя является именем специализации (конкретизации), к результи­рующему набору добавляются имена всех ее обобщений.3)Повторить для всех имен в результирующем наборе:- если текущее имя появляется в списке типов по крайней мере одного выбираемо­го типа данных, к результирующему набору добааляются имена всех выбираемыхтипов данных, определения которых базируются на типе с текущим именем.4)Повторить для всех имен в результирующем наборе:-если текущее имя импортировано в текущую схему с помощью спецификацииUSE или REFERENCE, в результирующий набор добавляется имя из схемы, от­куда был осуществлен импорт, квалифицированное именем этой схемы. По­скольку операторы USE могут быть последовательными, в результирующий на­ бор добавляется имя типа из всех связанных схем, квалифицированное именамисоответствующих схем,с)Возврат результирующего набора.Если V и м еет н е о п р ед е л е н н о е (?) зн ач ен и е , ф ун к ц и я T Y P E O F возвращ ает пустой набор.П р и м е ч а н и е 2 — Функция TYPEOF завершает дальнейший выбор при встрече агрегатного типаданных. Функции не представляет никаких сведений об основном типе агрегатного значения. При необхо­ димости данные сведения можно получить путем применения функции TYPEOF к корректным элементамагрегатного значения.П р и м е р 14S — В контексте следующей схемы:SCHEMA this schema;TYPEmvlist = LIST 11 : 20| OF REAL:E N D _T Y P E ;LOCAL1st: mvlist;END_ LOCAL;END.SCHEMA:Следующие условия истинны:TYPEOF (1st)= |'THIS_SCHEMA.MYLIST', 1 LIST'|TYPEOF (1st 117|) = Г REAL', NUM BER'!П р и м е р 149 — Показано влияние использования импорта со спецификацией USE илиREFERENCE на основе предыдущего примера.SCHEMA another schema;REFERENCE FROM this_schema (mylist AS hislist);1st : hislist;END_SCHEMA:Теперь можно сказать:TYPEOF (1st) = Г ANOTHER_SCHEMA.HISLIST', THIS_SCHEM A.MYLIST\ ‘ LIST' | 15.26 Usedln — общая функция FUNCTION USEDIN ( TtGENERIC; R:STRING ) : BAG OF GENERIC;95
ГОСТ I* ИСО 10303-11-2000Фумкиия USEDIN возвращает каждый экземпляр объекта, который использует данный эк­земпляр объекта в указанной рати.Параметрыa)Т — любой экземпляр любого типа данных объекта.b)R — строка, содержащая полностью квалифицированное имя атрибута (роли), как этоопределено в 15.20. Результат. Каждый экземпляр объекта, использующий данный экземпляр в указанной роли,возвращается в мультимножество.Если экземпляр Т не играет никаких ролей или роль R не найдена, возвращается пустоемультимножество.Когда R является пусгой строкой, то документируется каждое использование Т. Проверяютсявсе связи, напраатенные в сторону Т. Когда связь начинается с атрибута, имеющего имя R. экземп­ляр объекта, содержащий Т, относится данный атрибут, добавляется в результирующее мультимно­ жество. Заметим, что, если Т нигде не используется, то возвращается пустое мультимножество.П р и м е р 150 — Этот пример показывает, как может быть написано правило, проверяю­щее. что должна быть точка в начале координат, используемая как центр окружности. Заметим,что в этом примере выражение запроса (см. 12.6.7) используется как параметр при обращении кфункции S1ZEOF.ENTITY point:х, у, z : REAL:END_ENTITY:ENTITY circle;centre: point:axis: vector;radius: REAL:END_ENTITY:...(• Это правило находит каждую точку, используемую как центр окружности, и затем проверяет,что по меньшей мере одна из этих точек лежит в начале координат •)RULE exampl FOR (point): LOCALcentre points : SET OF circle := | |; — пустой набор окружностейEND LOCAL; REPEAT i := LOINDEX(point) TO HIINDEX(point);centre_points := centre_points +USEDlN(point|ij, 'THIS_SCHEMA.CIRCLE.CENTRE' );END_REPEAT;WHERE Rl : SIZEOF(QUERY(— начато запросаat_zero <• centre_points |— получить все точки(at zero.centre = point(0.0, 0.0, 0.0)) — на 6,0.0 )) >= 1;— по меньшей мере однаEND_RULE; 15.27 Value — арифметическая функция FUNCTION VALUE ( V:STRING ) : NUMBER;Функция VALUE возвращает численное представление строки. Параметры. V — строка, содержащая действительный или целочисленный литерал (см. 7.5). Результат. Число, соответствующее нредстаатению строки. Если строка не может быть ин­терпретирована ни как действительный или целочисленный литерал, возвращается неопределен­ное (?) значение.П р и м е р 151VALUE ( ’ 1.234’ ) —> 1.234 (действительное)VALUE ( ’20’ )~ > 20 (целое)VALUE ( ’abc’ )—> ? (неопределенное)%
ГОСТ Р ИСО 10303-11-2000 15.28 Value in — функция принадлежности FUNCTION VALUEJN ( CrAGGREGATE OF GENERICrGEN; V:GENERIC:GEN ) : LOGICAL;Функция VALUE_IN возвращает логическое значение, в зависимости от того, является ликонкретное значение членом агрегата. Параметрыa)С — агрегат любого типа.b)V — выражение, которое совместимо по присваиванию с основным типом С. Результатa)Если V или С имеет неопределенное (?) значение, возвращается значение UNKNOWN.b)Если какой-либо элемент С имеет значение, равное V, возвращается значение TRUE.c)Если какой-либо из элементов С имеет неопределенное (?) значение, возвращается зна­чение UNKNOWN.d)Иначе возвращается значение FALSE.П р и м е р 152 — Следующая проверка гарантирует, что существует хотя бы одна точка, рас­положенная в начале координат.LOCALpoints : SET OF point;END_ LOCAL;IF VALU E_ IN (points, point(0.0, 0.0. 0.0)) THEN ... 15.29 Va!ue_unique — функция уникальности FUNCTION VALUE_UN1QUE ( VrAGGREGATE OF GENERIC) : LOGICAL;Функция VALUE_UN1QUE возвращает логическое (LOGICAL) значение, в зависимости оттого, являются ли элементы агрегата уникальными по значению. Параметры. V — агрегат любого типа.Результатa)Если V имеет неопределенное (?) значение, возвращается значение UNKNOWN. b) Если значения любых двух элементов V равны, возвращается значение FALSE. c)Если любой из элементов V имеет неопределенное (?) значение, возвращается значениеUNKNOWN.d)Иначе возвращается значение TRUE.П р и м е р 153 — Этот тест служит для проверки, что каждая точка в наборе имеет позицию,отличную от других точек (по определению, эти точки должны быть представлены разными эк­ земплярами объектов).IF VALUE_UNIQUE(points) THEN ... 16 Встроенные процедурыВ языке EXPRESS имеется две встроенные процедуры, каждая из которых используется дляуправления списками. В данном разделе приведено описание этих процедур.Для того чтобы показать типы данных формальных параметров, задан заголовок каждой изпроцедур. 16.1 Insert PROCEDURE INSERT ( VAR L:LJST OF GENERIC:GEN; E:GENERIC:GEN; P:INTEGER );Процедура INSERT вставляет элемент в заданную позицию в списке.Параметрыa) L — это значение списка, в который должен быть вставлен элемент.b) Е — это экземпляр, вставляемый в L. Е должен быть совместим с основным типом L.что указывается в заголовке процедуры с помощью меток типа.c) Р — целое число, задающее позицию в L, на которую должен быть встаален элемент Е. Результат. L изменяется за счет вставки Е в L на указанную позицию. Элемент встааляетсясразу за существующим элементом в позиции Р так. что при Р = 0 элемент Е становится первымэлементом.97
ГОСТ I» ИСО 10303-11-2000Условия. 0 5 Р 5 SIZEOF(L). 16.2 Remove PROCEDURE REMOVE ( VAR L.LIST OF GENERIC; P:INTEGER );Процедура REMOVE удаляет элемент из заданной позиции в списке.Параметрыa) L — это список, из которого должен быть удален элемент.b) Р — целое число, задающее позицию удаляемого элемента в L. Результат. Список L изменяется за счет удаления элемента, находившегося в позиции Р.Условия. 1 5 Р 5 SIZEOF(L).98
ГОСТ Р ИСО 10303-11-2000ПРИЛОЖЕНИЕ А(обязательное)С интаксис языка E X P R E S SВ настоящем приложении определены лексические элементы языка и грамматические правила, ко­торым они должны подчиняться.П р и м е ч а н и е — При непосредственном использовании этих синтаксических определений синтак­сический анализ будет неоднозначным. Определения написаны для того, чтобы передать информацию, от­носящуюся к использованию идентификаторов. Интерпретируемые идентификаторы определяют лексемы,которые Ссылаются на объявленные идентификаторы и. следовательно, нс могут распознать простые иден­тификаторы (simplc id). Ввиду этого разработчик синтаксического анализатора должен создать просмотро­вую таблицу или подобную конструкцию для обеспечения возможности разрешения ссылок на идентифика­торы с возвратом ссылок средству проверки грамматических правил. Такой подход разработчиков синтакси­ ческих анализаторов обеспечит отсутствие неоднозначностей при использовании идентификаторов.А.1 Лскссмы Следующие правила определяют лексемы, используемые в языке EXPRESS. За исключением случаев,когда это явно задано в синтаксических правилах, внутри текста, удовлетворяющего простому синтаксиче­скому правилу, определенному в пунктах А. 1.1 — А. 1.4, нс должно появляться игнорируемых фрагментовили комментариев.А. 1.1 К л ю ч е в ы е с л о в аВ л о м пункте заданы правила представления ключевых слов EXPRESS. П р и м е ч а н и е — Представление ключевых слов в этом подразделе соответствует тшиирафскому со­глашению, установленному в 6.1, но которому каждое ключевое слово представлено как синтаксическоеправило, левая часть которою является самим ключевым словом в верхнем регистре (прописными буквами).Поскольку строковые литералы в синтаксических правилах нс учитывают регистр, ключевые Слова могутзаписываться в верхнем, нижнем или смешанном регистрах.0 ABS - 'abs' .1 ABSTRACT “ 'abstract' .2 ACOS «■ 'acos' .3 AGGREGATE - 'abrogate' .4 ALLAS * 'alias' . 5 AND - 'and' . 6 A.NDOR ■» 'andor' . 7 ARRAY “ 'array' . 8 AS ** 'as' . 9 ASIN - 'asin' .10 ATAN - 'atan' . 11 BAG - 'bag' . 12 BEGIN - begin' . 13 BINARY ■= 'binary' . 14 BLENGTH - blcngth' . 15 BOOLEAN - boolean' . 16 BY - by' . 17 CASE - 'case' . 18 CONSTANT ■ 'constant'. 19 C O N S T .E - const_c' .20 CONTEXT - 'context' . 21 COS " 'cos’ .22 DERIVE - derive' .23 D1V - W .24 ELSE - 'else' .25 END - 'end' . 26 E N D A L IA S ■» *cnd_alias' . 27 END_CASE - end_case' . 28 END_CONSTANT - end_constanf . 29 END_CONTEXT - ,end_contexf .30 END_ENT!TY - 'end entity'. 31 END FUNCTION - end function' . 9 9
ГОСТ Г ИСО 10303-11-200032 E N D J F - " en d jf . 33 END_LOCAL - "endjocal" . 34 ENDJViODEL - 'end.model* . 35 END_PROCEDURE - «^procedure" . 36 END_REPEAT - *ciid_repeat' . 37 END_RULE - "end_rulc" . 38 END_SC1IEMA - "end_schema" . 39 END_TYPE - "end_typc" .40 ENTITY - "entity*. 41 ENUMERATION - enumeration" . 42 ESCAPE ■ 'escape'. 43 EXISTS - 'exists’ . 44 EXP - e x p '. 45 FALSE - "false" . 46 FIXED - "fixed" . 47 FOR - "for" . 48 FORMAT ■ "format" . 49 FROM - "from" .50 FUNCTION - "function* . 51 GENERIC - "generic" . 52 IIIBOL'ND - "Inbound" . 53 IliIN D EX - "hiindex" . 54 IF - "if . 55 IN - "in'. 56 INSERT - "insert" . 57 INTEGER - "integer" .58 INVERSE - "inverse" .59 LENGTH - "length" .60 LIKE - "like" . 61 LIST « "list" . 62 LOBOUND - "lobound". 63 LOCAL - "local" . 64 LOT; - "log" . 65 LOG 10 - "log 10*. 66 LOG2 - "log2" . 67 LOGICAL - "logical" . 68 LOINDEX - "loindcx" . 69 M OD - "mod" .70 MODEL - "model" . 71 NOT - "not" . 72 NUMBER - "number" . 73 NVL - "nvl" .74 ODD » "(Kid" .75 OF = "of .76 ONEOF - "опеоГ .77 OPTIONAL - "optional" .78 OR - "or" . 79 OTHERWISE - "otherwise" .80 PI - "pi" . 81 PROCEDURE - "procedure" . 82 QUERY - "query" . 83 REAL - "real" . 84 REFERENCE - "reference" . 85 REMOVE - "remove" . 86 REPEAT » "repeat" . 87 RETURN - "return" . 88 ROLESOF - "rolesor . 89 RULE - "rule" .100
ГОСТ Р ИСО 10303-11-200090 SCHEMA - •schema1 . 91 SELECT - 'select*. 92 SELF - se lf . 93 SET - 'set* . 94 SIN - sm . 95 SIZEOF - 'shear . 96 SKIP - skip* . 97 SQRT - *sqrt* . 98 STRING - string . 99 SUBTYPE - 'subtype* .100 SUPERTYPE - supertype* . 101 TAN - tan' . 102 THEN - then . 103 TO - *to" . 104 TRUE - true* . 105 TYPE - 'type* . 106 TYPEOF - typeof . 107 UNIQUE - unique' . 108 UNKNOWN - ‘unknown* . 109 UNTIL - until' .110 USE “ 'use* . 111 USED1N - usedin* . 112 VALUE - value* . 113 V A L U E JN - Value_in* . 114 VALUE_UNIQUE - *valuc_unique* . 1 IS VAR - var*. 116 WHERE - where* . 117 WHILE - while* . 118 X O R - xor* .A. 1.2 К л а с с ы с и м в о л о вСледующие правила определяют различные классы символов, которые используются в написании лек­сем в А. 1.3.119 bit - *0* | Т . 120 digit — *0* | *1* | *2* | *3* | *4* | *5* | *6* | *7* | *8’ | '9*. 121 digits - digit { digit } . 122 cncodcd_charactcr - octet octet octet octet . 123 hcx_digit * digit | 'a* | 'b* | *c* |'d* | *e* | *f . 124 letter - *a* | *b* | *c* | *d* ! *e* | T | *g' I *h* | *i*| у | *k'|T |*m* | *n* | o' j *p* | *q* j V | *s* | T | *n* | V | W*|*x* | У I У •125 lparcn_not_star — '(' n o ts ta r . 126 not_lparen_star - not_paren_star | *)' . 127 not_paren_star - letter | digit | not_parcn_star_spccial . 128 not_paren_star_quotc_spccial — T | ’ *" || '$' ||| '+' | |129 not_paren_star_special - not_paren_star_quote_spccial | и" .130 not_quote - not_paren_star_quote_special | letter | digit | ’(* | *)’ | '** . 131 not_rparen — not_parcn_star || *(’ .132 not star - not_parcn_star | ’( ’ | *)’ . 133 octet “ hex_digit hex digit . 134 special - not_paren_star_quote_spccial | '(' | ’)* | '** | "" . 135 star_not_rparen — *'* not_rparcn .A. 1. 3Л е к с и ч е с к и е э л е м е н т ы Следующие правила определяют, как определенные комбинации символов интерпретируются в каче­ стве лексических элементов языка. 101
ГОСТ Р ИСО 10303-11-2000136 binary_literal e '% ' bit { bit } .137 encodcd_string_lilcral " ‘ ' encodedcharacter { encodedcharacter }.138 integer Jitcral ** digits . 139 rcaHitcral e digits| digits ) | 'e’ | sign ] digits | .140 simplc_id = letter { letter | digit | *_' } . 141 simplc_string_literal ■ \q { ( \q \q ) | not_quotc | \ s | \x 8 | \x 9 | \xA| \x B | \x C | \x D } \q .A. 1.4 К о м м е н т а р и иСледующие правила определяют синтаксис комментариев в языке EXPRESS.142 embeddedremark я '(*’ { not_lparcn_star | lparen_not_star | star_not_rparcn |eml>edded_remark ) '•)' .143 remark » embedded гевш к | tail_rcmark . 144 tail_rcmark - *--• { \a | \ s | \x 8 | \x 9 | \x A | \x B | \x C | \x D } \n .A. 1.5 И н т е р п р е т и р у е м ы е и д е н т и ф и к а т о р ыСледующие правила представляют идентификаторы, конкретный смысл которых известен (то есть ониобъявляются как типы, функции и т.д.).П р и м е ч а н и е — Предполагается, что идентификаторы, соответствующие Этим правилам, распо­знаются реализацией. Способ, которым реализация получает эту информацию, нс связан с описанием язы­ ка. Одним из способов получения данной информации является многопроходный синтаксический анализ,когда на первом проходе выбираются идентификаторы из соответствующих объявлений, так что на следую­ щем проходе появляется возможность отличить, к примеру, ссылку на переменную err ссылкина функцию (fimction ref).145 attributc_rcf ■ atlribute_id . 146 constant_rcf * constant J d . 147 entity_ref e cntily_id . 148 cnnmeration_rer = cnumcration_id . 149 function_rcf “ functioned .150 param eterref ■ paramcter_id . 151 proccdurercf =* proccdurcid . 152 schcraa_ref •» schema_id , 153 type labcl rcf *■ type_labd_id . 154 t y p e r e f » type_id . 155 variablc_ref •» variablc_id .A.2 Грамматические правилаСледующие правила задают способы, которыми рассмотренные выше лексические элементы могутбыть объединены в конструкции EXPRESS. Игнорируемые фрагменты текста и/или комментарии в этихправилах могут появляться между двумя любыми лексемами. Основным Синтаксическим правилом дляEXPRESS является синтаксис (syntax).156 abstract_supcrtypc_dcclaration *■ ABSTRACT SUPERTYPE ( subtype_constraint 1 . 157 actual_parameter_list «■ ’(' parameter {parameter } ')’ .158 add like op - *+* | *-* | OR | XOR . 159 aggregatejnitiali/cr •| clement {element } J 'J' .160 aggrogate_sourcc ” simplc_cxpression . 161 aggrcgate_type " AGGREGATE |type_label | OF parameter type.162 aggregation_types » array_type | bag_typc | list type | set_t>pc . 163 algorithmJicad “ { declaration J [ constant_decl | ( local_dcel ) . 164 alias_stmt “ ALIAS variablc_id FOR gencral_rcf { qualifier }stmt { stmt >END AL1AS *;*.165 arrayjvp c - ARRAY bound_spec OF 1 OPTIONAL J | UNIQUE \basc.typc .166 assignmcnt_stmt = general_ref { qualifier } ':■* expression.167 attribute_dcclattributc_id | qua!ificd_attributc .168 attributc_id * simple_id . 169 attributc_qualifier “attribute_rcf .170 bag type ” BAG 1 boundspec j OF base_type . 171 base type - aggregation^types | simplc_types | nam edlypes . 172 binary_type « BINARY | width_spcc 1 . 102
ГОСТ Р ИСО 10303-11-2000173 boo lean_ type ■ BOOLEAN . 174 bound_l *■ numeric_cxpression . 175 bound_2 ■» nuraeric_exprcssion . 176 bound_spcc * ’l' bound_lbound_2 '|* .177 built_in_constant - CONST_E | PI | SELF | T . 178 builtjn.function - ABS I ACOS | ASIN | ATAN | BLENGTH | COS | EXISTS |EXP | FORMAT | HIBOUND | 1I1INDEX | LENGTH |LOBOUND | LOINDEX | LOG | LOG2 | LOG 10 | NVL |O D D | ROLESOF | SIN | SIZEOF | SQRT | TAN | TYPEOF |USEDIN | VALUE | VALUE IN | VALUE_UN1QUE .179 built_in_procedurc - INSERT | REMOVE .180 casc_action " c a sela b el {ca seja b el Jstmt .181 case_labcl “ expression . 182 e a sc stm t ” CASE selector OF { case action > | OTHERWISEstmt |END_CASE •;*.183 compound stmt ■ BEGIN stmt { stmt } END.184 coastanl_body “ constant_idbasc_lypeexpression ’;*.185 coastaot ded ■■ CONSTANT constant_bodv { constaatb ody }EN D_CON STANT V .186 constant_factor * built_in_coastant | conslant_ref. 187 coastant_id ■ simple_id . 188 constructed., types ■» cnumcration_typc | sd eet type . 189 declaration = entity ded | function dccl | procedurc_decl | type decl .190 derivcd_attr * attribute declb a sety p eexpression191 dcrive_clause « DERIVE dcrivcd_attr { dcrivcd_attr } . 192 domain_rulc =* | label] logica!_cxpression .193 element = expression |repetition J .194 entity body *• { explicit_attr } [ derive_clause | | in»erse_clausc || unique.clause | l where clause J .195 entity_constructor = entity ref ’(' ( expression {expression J J ')' .196 entity dccl ” entity_head cntity_body END_ENTITY.197 entity_hcad * ENTITY entity id [ subsuper ).198 entity id « simplc_id . 199 enumeration J d m simplc_id .200 enumeration_rcfcrcncc “ | type_rcf V | enumeration ref . 201 cnumeration_type « ENUMERATION OF '(' enameration id {enuineration kl } ')*.202 escape_stmt “ E1SCAPE.203 explicit_attr *■ attribnte_dccl {attribute_decl }( OPTIONAL )base type.204 expression “ simple expression | rel_op_extcndcd simple_expressi<»n J .205 factor ” simplc_factor |simplc_f!»ctor | .206 formal_pararaeter ® paramcter_id { V parameter_id } *:' parametcr_type .207 function_call = < built_in_function | function_ref ) 1 actual paramcter list ) . 208 fuiK'tion decI ■ function head | algorithm_head J stmt { stmt }END_FUNCTION209 function head ■ FUNCTION function_id | '(' formal_parameter{formal_parametcr } ')' Jparamcter_tvpe.210 function_id “ simple_id . 211 gcncralized_types *■ aRj*regatc_type | Rcneral aKRreRation types) gencric type . 212 gcncral_aa>rcgation_types ■ general_array_typc | general_bag_type |gencral_list_typc | general_sct_type .213 general_array_type - ARRAY | bound_sjK4- J OF | OPTIONAL | l UNIQUE ]paramcter_type .214 general_bag_tvpeBAG | bound_spec | OF parametcr_type .215 gencral_list_type • LIST | bound spcc | OF’ ( UNIQUE | parameter_type .216 gcneral_ref “ parainctcr_rcf | variablc_rcf .217 gcneral_set_type * SET | bound_spec | OF parameter type . 218 gencric_type ■ GENERIC |typejabcl | .103
ГОСТ Р ИСО 10303-11-2000219 group_qualifler ■ *\* entity_ref .220 if_stmt * IF logical_exprcssion THEN slmt { stmt J | ELSE stmt { stmt > )ENDJF V .221 increment " numeric_exprcssion .222 incremcnt_control = variable_idbonnd l TO bound_2 | BY increment | .223 index «■ numcric_cxpression . 224 m d e x l *» index . 225 index_2 = index . 226 index_qualifier яindcx_l |index 2 J 'J' .227 integer lype - INTEGER .228 interfaccspccification * referencc_clause | usc_clause .229 interval ” '{* intcrval_low interval_op intcrval_itcm interval_opinterval_high.230 interval_high = simplecvprcssion . 231 intenal_itcm - simple_exprcssion . 232 intenal_low “ simple_expression . 233 intenal_op = '<’ | *<“ ' . 234 inverseattr “ attributedeclJ ( SET | BAG ) | bound_spec| OF | entHy_rcfFOR a t t r i b u t e _ r e f .235 inverse_clausc ■ INVERSE inverse attr { inverse_attr } . 236 label ■ simple_id . 237 lis tjy p c - LIST 1 bound_spec ) OF J UNIQUE J b a sejy p c . 238 literal = binary Jiteral | integeMitcral | logicaHiteral | rcaMitcral |stringjitcral .239 local_dccl “ LOCAL local_variable { local_variable } END_LOCAL.240 local_variable ■ variable_id {* variable_id )paramcter_typel ':•* expression |.241 logical_expression " expression . 242 logicaljitcral - FALSE | TRUE | UNKNOWN . 243 logical tvpeLOGICAL .244 multiplication_like_op - V | | D1V | M OD | AND \ f -245 named_types ■ cntity_rcf | type_rcf . 246 named_typc_or_renarae = namcd_types | AS ( entity_id | type id ) | . 247 null_stmt " ';* .248 nurnbcr_type ■* NUMBER .249 numcrie_cxpression * siraple expression .250 one o f ” ON EOF '(* supertypc_cxprcssion {supcrtype_cxpression > ’)' .251 parameter m expression . 252 parameterjd =» simple_id . 253 parametcr_typc ” gcncrali/edtypcs | named_types | simplc_typcs . 254 population ™ entity_ref . 255 precision_spcc = nmneric cxpression .256 primary • literal | ( qualifiable_factor { qualifier } ) .257 proeedurc_call_stmt ” ( built_in_procedure | procedurc_ref )[ actual_parameter_list |.258 proeedure_dccl ” proeedure_hcad | aJgorithmhcad | { stmt J END_PROCEDURE 259 procedurejiead *■ PROCEDURE proccdure_id | '(' 1 VAR | formal_paramcter{| VAR J formal_parametcr | ')' J *;*.260 procedure*! * simple id . 261 qualifiaMe_factor ■» attributc_ref | constant_factor | functioncall |gencral_rcf | population .262 quali(icd_attributc * SELF group.qualifier atlributcqualifier .263 qualifier ■ attribute_qualifier | groupqualificr | index_qualilier .264 qucry_cxprcssion “ QUERY ’(’ variaN cid '<*’ aggrcgate_sourcological_expression ')'*265 rcal_typc = REAL [ '(' precision_spec *)’ J . 266 rcfcrcnccd_attribute • altribute_rcf | qualified_attribute .104
ГОСТ Р ИСО 10303-11-2000267 refercnce_clausc * REFERENCE FROM 5Chema_ref | ’(' rcsource_or_rcnamc{ V rcsource_or_renamc } *)' J.268 rcl_op - *<’ | V | *<-* | * > -' | ’<>* ||':<>:* |.269 rcl_op_extcndcd ” r e lo p | IN | LIKE .270 renamc_id ■* constanMd | entity_id | functioned | proccdurc_id | typc_id . 271 rcpcat_control и 1 incrcment_contn>l | J w kilecontrol J { untilcontrol J . 272 rcpcat_stmt " REPEAT repcat_contrdstmt { stmt J END_REPEAT.273 repetition = numeric_cxprcssion . 274 rcsource_or_renamc ■ rcsource_ref 1 AS rename_id J .275 rcsourcc_ref = c o n sta a tr ef | cntitj_ref | function_rcf | procedure_rcf | type_ref .276 return_strat ” RETURN | *(' expression ’)* J *;* . 277 rulc_dccl * rule_hcad | algorithmhcad | { stmt } where_clau.se END_RULE278 nilc_hcad « RULE rulc_id FOR '(' cntity_rcf {entity ref } ’)*.279 rulc_id = simple_id .280 schcma_body « { interface_speciflcation } | c»nstant_decl |{ declaration | rnle_dccl } .281 schcma_decl - SCHEMA schemaJd *;* schema_body END_SCHEMA V .282 schem ajd =* simple_id .283 selector " expression . 284 select type =» SELECT ’(' named_types (namcd_t>pes J ')' .285 sct_type “ SET l bound_spec ) OF base_type . 286 sign » ’+* |.287 simple_cxpression “ term { add_like_op term } . 288 simple_ractor =■ aggregate_initiali/er | entity_constructor|cnumcration refcrence | interval | query_exprcssion | ( ( unarv op | ( *(• expression ')' | primary ) ) .289 simplc_types * binary_type | boolean_type | iateger type | logica!_type |number type | real_type | string true .290 skip_strat =■ SKIP *;* .291 stmt e alias_stmt | assignmcnt_stmt | case_stmt | compound_stmt | cscape_slmt |if_slrat | nnll stmt | proccdurc_call_stmt | rcpcat_stmt | return_stmt |skip_stml .292 string literal *• simple_string_literal | encodcd_string_literal .293 string_type ” STRING | width_spcc ] .294 subsuper ” | supertype_constraint 1 1 subtype_declaration | .295 subtypc_constraint ■ OF''(' supertype_cxpression ’)' .296 subtvpc_dcclaration ■ SUBTYPE OF ' (' entity_rcf {cntity_ref J ')' .297 supertype_constraint " abstract_supertype_dcclaration | supertypc_rule . 298 supertype_cxpression ” supertype_factor { .ANDOR superlypc_factor > . 299 supertype factor - supertypc_term { .AND snpertype_term J .300 supertypc_rulc " SUPERTYPE subtype_constraint . 301 supertype_term “ cntity_rcf | onc_of | ’(’ supertype_cxpression ')' . 302 syntax * schema ded { schema_decl } . 303 terra “ factor { multiplication_like_op factor } . 304 type_dccl = TYPE type_id ’■>* undcrlying_tvpe| wbcrc_clau.se ] END TYPE.305 type_id « simple*_id . 306 lypejabcl ■» type_label_id | type_label_ref. 307 tvpe_label_id = simple_id . 308 unary_op ■ '+* | | NOT . 309 undcrlying_type ™ constructed_t>pcs | aggregation types | simple_typcs |t y p e r e f .310 uniquc_ctausc ™ UNIQUE uniquc_rulc{ uniquc_rulc} .311 uniquc_rulc " ( bbel *:' 1 rcfcrenced atlribute {refcrenccd_attribute > .312 until_control = UNTIL k>gical_cxprcssion . 313 use_clause ™ USE FROM schcma_ref | '(' namcd_type_or_rcnamc{ V named_type_or_rcname > *)' J.314 variablc_id » simplc_id .105
ГО СТ I* И С О 1 0 3 0 3 - 1 1 - 2 0 0 0315 whcre_clausc «■ WHERE doinain_rulc{ domain_nilc} .316 while_controi * WHILE logk.al_expr*ssion . 317 width ■ numcriccxprcssion . 318 width_spcc ■■ '(' width ')' 1 FIXED | .A.3 Список перекрестных ссылок Конструктив, указанный слева, используется в конструктивах, указанных справа.0ABS| 1781ABSTRACT1562ACOSI 1783AGGREGATE| 1614ALIAS| 1645AND244 2996AN DORI 2987ARRAY| 165 2138AS| 246 2749ASIN| 17810ATAN| 17811BAG| 170 214 23412BEGIN18313BINARYI 17214BLENGTH| 17815BOOLEAN| 17316BY 22217CASE| 18218CONSTANT| 18519CONST EI 17720CONTEXTI21COS| 17822DERIVE19123MVI 24424ELSE | 22025END| 18326END_ALIAS| 16427E.ND_CASE| 18228END_CONSTANTj 18529END CONTEXT30E N D _ ENTITY| 19631EN D_FU NCTION| 20832E N D J F| 22033END_LOCAL| 239 34 END_MODEL35END_PROCEDURE| 25836END_REPEATj 27237END_RULE| 27738END_SCI1EMA28139END_TYPEj 30440ENTITYI 19741ENUMERATIONj 20142ESCAPE| 20243EXISTS| 17844EXP| 17845FALSE24246FIXEDI 31847FOR| 164 234 27848FORMAT| 17849FROM| 267 313106
ГОСТ Р ИСО 10303-11-200050FUNCTION20951GENERIC21852IUBOUND17853III INDEX17854IF22055IN26956INSERT17957INTEGER22758INVERSE23559LENGTH17860LIKE26961LIST215 23762LOBOUND17863LOCAL23964LOG17865LOG 10178 66LOG 217867LOGICAL243 68LOINDEX17869MOD24470MODEL71NOT30872NUMBER24873NVL17874OOD17875OF161 165 170 182 201 213 214 215 217 234 237 285 295 29676ON EOF25077OPTIONAL165 203 21378OR15879OTHERWISE18280PI17781PROCEDURE25982QUERY26483REAL26584REFERENCE26785REMOVE179 86REPEAT27287RErURN276 88ROLESOF17889RULE27890SCHEMA28191SELECT28492SELF177 26293SET217 234 28594SIN17895S1ZEOF17896SKIP29097SQRT17898STRING29399SUBTYPE296 100SUPERTYPE156 300 101TAN178 102THEN220ЮЗTO222104TRUE242105TYPE304106TYPEOF178107
ГОСТ I* ИСО 10303-11-2000107UNIQUE| 16S 213 215 237 310108UNKNOWN242109UNTIL312110USE313111USEDIN178112VALUE178 113 VALUE IN178114VALUE_UN1QUE178115VAR259116WHERE315117WHILE316118XOR158119bit136120digit 121 123 127 130 140121digits138 139122encodcd_charactcr137123hex_digil133124letter127 130 140125lparen_not_star142126n o tlp a r c n sta r142127not_parcn_star126 131 132128not_parcn_star_quotc_spccial129 130 134129no t _pa rc a_sta r_spccial127130not_quote141131not_rparcn135132not_star125133octet 122134special135star_not_rparcn142 136 binary_literal238137cncoded_string_literal292138initeger_literal238139rcallitcral238140simptc_id168 187 198 199 210 236 252 260 279 282 305 307 314141siraplc_string_literal292142cmbedded_remark142 143 143 remark144tail_remark143145attributc_ref169 234 261 266146constant_ref186 275147entity_ref195 219 234 245 254 275 278 296 301 148 cnumcration_ref 200149function_rcf207 275150paramctcr_ref216151procedure_rcf257 275152schcma_rcf267 313 153 tjp ejab cl_ ref306154type_rcf 200 245 275 309155variablc_ref216156abstract_supcrtype_declaration297 157 actual_paranH'tcr_list207 257158add_like_op287159aggrcgate_initializer288160aggrcgate_sourcc264161aggrcgatc_typc 211 108
ГОСТ Р ИСО 10303-11-2000162 ■ggregatioB_t)pes| 171 309163algorithmhcad| 208 258 277164al i asstmtI 291165array_typcj 162166avsignnicnt_stmt| 291167attributedecl| 190 203 234168attributcjd| 145 167169attribute_qualifkT| 262 263170bagt vpc162171bascjyp c165 170 184 190 203 237 285172binary_typc289173boolcantypc289174bo u n d l176 222175bound_2176 222176boundspec16S 170 213 214 215 217 234 237 285177built_in_constant186178buill_in_function207179built_in_procedurc257180casc_action182181 caselabcl180182 cascstm t291183 cninpound_stml291184constant_body185185constantdccl163 280186constant_factor 261187constant id146 184 270188const rue ted_ types309189declaration163 290190dcrivcd_attr| 191191dcrive_clausc194192domain_rulcI 315193clement| 159194entitybodv| 196195cntityconstructor| 288196entity _dccl189197cntity_hcadI 196198 entity_id| 147 197 246 270199enumeration idI 148 201 200спите ration_refcrencc| 288 201enumcration_typc| 188 202escapc_strat291203cxplicit_attrI 194204expression| 166 181 184 190 193 195 240 241 251 276 283 288205factor| 303206formal_paramctcr| 209 259207function_call| 261208function_dccl| 189209function_headI 208 210functionjd| 149 209 270 211gencralizcd_typcsj 253 212gcneral_aggrcgation_ types | 211213gcneral_array_lypc 212214gcneralba Retype I 212215gcncral_list_lypoI 212216gcnoral_rcfj 164 166 261217gcneral_set_type I 212218gcneric_typc I 211109
ГОСТ Г ИСО 10303-11-2000219groupqualificr262 263220291221increment222222incremcnt_control271223index224 225224in d e x l226225index_2226226indexqualifier263227intcger_type289228interfacespccificatioii280229interval288230intervalhigh229231intcrval_itcni229232intervaMow229233intcrval_op229234iaverseattr235235inverse clause194236label192 311237list_typc162238literal256239lo c a ld e d163240local_variablc239241logical_cxpression192 220 264 312 316242lugical_litcral238243logical_tjpc289244multiplication_like_op303245named_ types171 246 253 284246namcd_type_or_rcname313247null_stmt291248nunibcr_tjpe289249numeric_exprevsion174 175 221 223 25S 273 317250onc_of301251parameter157252parameterjd150 206253paramcter_tvpc161 206 209 213 214 215 217 240254population261255precision_spec26S256primary288257procedure_call_stmt291258proccduredecl189259procedare_head258260procedurejd151 259 270261qualifiable_factor256262qualified_attribute167 266263qualifier164 166 256264queryexpression288265rea lty p e289266refercnced_attributc311267referenceclause228268rcl_op269269rcl_op_extendcd204270rcnam cid274271rcpeat_control272272rcpeat_stmt291273repetition193274rcsourcc_or_rename267ПО
ГОСТ Р ИСО 10303-11-2000275resource_rcf274276retu m stm t291277rulcd ccl280278rulehcad277279ru leid278280schemabody281281sclK‘ma_dccl302282schem akl152 281283selector182284selectly p c188285set_type162286sign139287simplc_cxprcssion160 204 230 231 232 249288siraplcfactor205289simplc_ types171 253 309290sk ipstm t291291stmt164 180 182 183 208 220 258 272 277292string_literal238293string_tvpc289294subsaper197295subt у pc_const mint156 300296subtype_dcclaration294297supcrtype_constraint294298supcrtypo_cxpression250 295 301299supcrtypc_factor298300supertype_rule297301supcrtype_term299302syntax303term287304type_dcd189305typejd154 246 270 304306type_labd161 218307typc_label_id153 306308unary_op288309undcrlyingtype304310unique_clau.se194311unique_rulc310312until_control271313usc_clause228314variabk*_id155 164 222 240 264315where_clause194 277 304316w kilecontrol271317width318318width_spcc172 293III
ГОСТ I* ИСО 10303-11-2000 П Р И Л О Ж Е Н И Е В (обязательное)Определение разрешенных экземпляров объектов В конкретном графе подтин/супсртип может содержаться больш ое число типов данных сложных объ­ ектов и типов данных простых объектов, для которых могут создаваться экземпляры . Настоящее приложе­ ние показывает, как эти экземпляры идентифицирую тся при объявлении общ его графа подтип/супертип. П р и м е ч а н и е — В качестве примера рассмотрим множество натуральных чисел ( I . 2, 3 . ...). Эго множество может быть структурировано разными способами. Четные и нечетные числа: |2 , 4, 6, ...1 и |1 , 3, 5. 7, ...|. Простые чиста: [2. 3, 5, 7 , . . . |. Числа, делимые н а 3: |3, 6. 9, 12, ...], Числа, делимы е на 4: |4 , 8, 12. 16, ...). В терминах EXPRESS натуральные числа могут быть представлены как супертип, а другие множества чисел — как его подтипы. О чевидно, что некоторые и з этих подтипов будут нсперскрывакнцимися множест­ вами (например, четные и нечетные числа), а другие будут перекрываться частично (наприм ер, подтип "числа делимые на 3" и подтип "числа делимые на 4 ”). В.1 Формальный подход Любая группа типов данных объектов, связанная отнош ениям и подтип/супертип, может быть рас­ смотрена как граф подтип/супертип. для которого могут создаваться экземпляры. В этом формальном под­ ходе такие группы типов данных объектов называются частными типами данны х сложных объектов. Част­ ный тип данны х сложного объекта может включать тип данных простого объекта, поскольку для типа дан ­ ных простою объекта могут создаваться экземпляры. Частный тин данны х сложного объекта обозначается через имена образующих его типов данных объекта, разделенных символом & . Частные типы данных слож­ ных объектов должны комбинироваться для образовании других типов данных сложных объектов. Частный тип данных сложного объекта может быть типом данных слож ного объекта, но для того, чтобы в этом удо­ стовериться, необходима полная оценка. Э кземпляр слож ного объекта является экземпляром типа данных сложного обьскга и предметом описания в настоящем приложении. Для л ю б о ю частного типа данны х слож ною объекта справедливы следующие тождества: - А&А «в А то есть конкретны й тип данных объекта может появиться в заданном частном типе данны х сложного объек­ та только один раз. - A & B s B & A то есть группирование частных типов данных сложных объектов яатяется коммутативным. - А & (М С ) в (А&В)& С «а А&В&С то есть группирование частных ти п ов данны х сложных объектов является ассоциативны м; в данном случае круглые скоб ки, задающие приоритет в вы числении, не атияю т на результат. Результирующее множество определяется как математическое множество частных типов данных слож ­ ных объектов, описанны х именами частных типов данных сложных объектов, разделяемыми запятой У и заклю ченны м и в квадратные скобки. Пустое результирующее множество записывается как ||. Для комбинирования частного типа данных сложного объекта и результирующего множества могут быть использованы два оператора: - А + \В 1,В 2\1В1.В2\+А[А.В1.В2] Оператор + добавляет частный ти п данных слож ного обьскга к результирующему множеству в качест­ ве нового элемента этого множества. Один и тот же частный тип данных сложного объекта нс долж ен при­ сутствовать в одном результирующем множестве более одного раза. - А&[В1, В2\ в . (В1.В2\&А в . Ц&В1..4&В2\ Оператор & добавляет частный тип данных Сложного обьскга ко всем типам данных сложных объектов в результирующем множестве. Следовательно, эга операция дистрибутивна над результирующими множест­ вами. Результирующие множества могут комбинироваться с использованием тех же двух механизмов: - \ А 1 М \ + \В 1.В 2\ в . Ц1.А2,В1.В2\Может быть сформ ировано результирующее множество, содержащее все элементы двух объединяемых множеств. Эго операция является объединением двух множеств. - [А1.А2\& \В1.В2\UI&B1.AI&B2.A2&B1.A2&B2] Результирующее множество может быть сформ ировано путем п овторною применения правила ди ст­ рибутивности дчя оператора & к каждому элементу первого результирую щ ею множества над вторым резуль­ тирующим множеством. Результирующие множества могут быть отфильтрованы с помощью онсратора/для создания нового ре­ зультирующего множества; 112
ГОСТ Р ИСО 10303-11-2000 - [ A ^ & B ,A & C ,A & B & D .M C ,D ] /A т» \А ,Л & В .А & С ,Л & В & 1)\Новое результирующее множество содержит только те элементы исходного результирующего множест­ ва. в которые входит заданный частный тип данных сложного объекта. - U U & B ,A & C ,A & I i& D .M C ,,D \/lB .D ] в . 14& B ..4& B & D .B & C .D ) Новое результирующее множество может быть сформ ировано путем повторной ф ильтрации первого результирую щ ею множества каждым частным типом данных сложного объекта из второго результирующего множества и последующей ком бинации результатов с помощ ью оператора +. Результирующие множества могут вычитаться с помощью оператора - Д Л Я создания нового результи­ рующего множества: - 1 А 1 ,А 2 ,В 1 ,В 2 \- \А 2 ,В 1 \ в . 1А1,В2\ Может быть сформ ировано результирующее множество, содержащее все элементы первого результи­ рующего множества за исключением элементов, входящих во т о р о с результирующее множество. Следующие тождества справедливы для лю бого результирующего множества: - [А ,В \ в . [В.А\Результирующие множества неуиорядочены. - [ Л Л В \ в . Ц.Я) Конкретный тип данны х сложного объекта может появиться в любом заданном результирующем м но­ жестве только один раз. - Ш * , С \ \1А,В.С\ Результирующие множества могут быть итоженными. В.2 Операторы супертнпов Используя вы ш еописанны й ф ормализм, мож но переписать выражение супертипов EXPRESS в терм и­ нах результирующих множеств. П ри этом превращ ения, описанны е в В .2.1 — В.2.3, применяю тся рекурсивно д о тех пор. пока нс останется ни одного выражения супертипа (O N E O F, A N D или A N DOR). Эти превращ ения нс могут полностью описать содержимое операторов суиертипов. в частности, опе­ ратора O N EO F. Для этого требуется полный алгоритм, опи санны й в В.З. В .2.1 O N EO F С писок O N E O F преобразуется в результирующее множество, содержащее выборки O N EO F. то есть: O N E O F ( 4 £ , ...) - » \ А ,В , ...J В.2.2 A N D Оператор A N D эквивалентен оператору & и, действуя над частными типами данных сложных объектов или над результирующими множествами, создает частный тип данных сложного объекта или результирую­ щее множество.A AND В - » \А & В \A vnu O N E O F (fi/,/tf) -♦ Л & [ В 1 ,Ю \ - | А & В 1 ,А & В 2 \ O N E O F M M 2 ) AND O N F .O ¥ ( B l.B 2 )\М ,Л 2 \& [В 1 ,В 2 \ - \Л 1 & В 1 ,А 1 & Я 2 .А 2 & В 1 .А 2 & В 2 \ В.2.3 AN D O R Оператор A N D O R создает результирующее множество, содержащее каждый из операндов по отдельно­ сти. а операнды комбинирую тся с использованием оператора & . Оператор A N D O R действует над частными типами данных сложных объектов или над результирующими множествами.A A N DOR В -♦ \А ,В ,А & В \A ANDOR O.NEOF(J?/,Zf2) -» [ A , [ B l .B 2 \ ..i & [ B l ,B 2 \\ - [A ,B l,B 2 ,A & B l.A & B 2 \ O N EO F(.4tyA 2 ) ANDOR O N E O F (/D .£ 2 ) -♦ \ [ Л 1 М \Л В 1 .В 2 \,[ А 1 ,А 2 \& [ В 1 ,В 2 \\ - - 1 А /.А 2 .В /. B 2 ,A I& .B1.A l& B 2 .A 2 & B I.A 2 & B 2\ B.2.4 П р и о р и т е т о п е р а т о р о в Вычисление результирующих множеств производится слева направо, операторы, имеющие высший приоритет, выполняются первыми в соответствии с 9.2.4.5. П р и м с р 154 — Нижеприведенное выражение вычисляется следующим образом:A A N D O R Я a n d C - » | y f . | M q , y | & | M q | - \ А . В к С Ж В & С \ В.З Интерпретация возможных типов данных сложных объектов И нтерпретация выражения супертнпов с добавлением ин ф орм ац ии, доступной из объявленной струк­ туры. позволяет разработчику EXPRESS-схсмы определить типы данны х сложных объектов, экземпляры которых могут быть созданы , исходи и з заданных объявлений. Для построения такого определения может быть создано результирующее множество типов данны х сложных объектов для графа иодтии/сунсртип. Для этого введем следующ ие определения: Подтип с множественным наследованием (multiply inheriting subtype): Подтипом с множественным на­ следованием является подтип, который имеет два или более супертипа в объявлении данного подтипа. корневой супертип (root supertype): Корневым супертипом является супергии. нс являющийся подтипом. Результирующее множество R типов данных сложных объектов вычисляется в результате следующегопроцесса:
ГОСТ Г ИСО 10303-11-2000 a) Определяются все объявлении объектов, формирую щ ие граф иодгип/суиертии. П р и м е ч а н и е I — В случае сложных графов подгип/супертии для этого может потребоваться н е­ сколько итераций. b) Д ля каждого супертипа в графе нодтил/супсртии создастся л атн о е вы раж ение супсргииа. вклю чая н еяв­ ные ограничения AN DOR с полтинами, которые нс включены в выражение супсргииа. c) Для каждого супсргииа i в графе подтип/супсргип создастся результирующее множество, представляю­ щее ограничения между подтипами данного супсргииа. путем применения преобразований и з В.2 и тож­ деств из B .I. чтобы получить полное выражение супертипа, как это задано на шаге (Ь). Для ком биниро­ вания f с результатом используется оператор &. Если i нс является абстрактным супсртииом. » лобаалястся к результату с помощ ью оператора +. Назовем это множество d) Д тя каждого корневого супертниа г в графе подтии/супергип расширяется множество Е , следующим образом: 1) Для каждого подтипа х и з г заменяется каждое его вхождение в Е , (вклю чая вхождение в состав част­ ных типов данны х сложных обьсктов) на если это возможно, и применяю тся преобразования из В.2. 2) Рекурсивно повторяется ш аг ( d l j для каждого <г, расш иряя полтины s до тех п ор. пока нс будут дос­ тигнуты листьевые объекты (для которых нс существует Е%). П р и м е ч а н и е 2 — З т а рекурсия долж на завершиться, поскольку в графе подтип/супсрлни отсутст­ вуют циклы. с) Комбинируются корневые множества. Создается R = £ •,£ ', в* Е ,\ + Е ,2 + ... , то есть R является объедине­ нием множеств, полученных на шаге (d) 0 Д ля каждого подтипа с множественным наследованием т выполняется следующее: 1) Для каждого из его непосредственных супертипов я создается множество R / m / s . содержащее строго тс сложные типы данных из R . которые включают и т , и х.2) Создастся результирующее множество комбинаций супертипов, разреш енных для т , Рл, *• =■ R /m /x l& R / m / x 2 & ..., то есть комбинирую тся результирующие множества, полученные на шаге (Я) с использованием оператора &. 3) Создается результирующее множество комбинаций супертипов, которое может нс включать все су- пертипы т . Х т ■ R /m /s. то есть объединяю тся результирующие, пездученные н а ш аге (fl). 4) Присваивается R ■» ( R - Ха) + Рт. g) Для каждого выражения сунертина к . имеющего вид ONLOF(.V,, S2, ) , выпалняелся следующее: 1) Для каждой пары подвыражений £,. управляемых к (/ < J ), вычисляется множество комбинаций, за­ прещ енных оператором O N EO F(S,,Sj): Д ‘4 ■ Выиазнистси преобразование Д ‘4 в соответствии с преобразованиями и з В.2 и тождествами из B.I. 2) Задается множество Д • 5>(j Д '4 , то есть Д является объединением множеств, вычисленных на ш а­ ге R ■* R - ( Л / Д ). h) Для каждого выражения супертипа к вида S t AND S2 выпалнястся следующее: 1) Вычисляется множество требуемых комбинаций, задаваемых к. Д " |.У,&Л,|. Преобразуется Qk в соответствии с преобразованиями из В.2 и тождествами из В.1. 2) Для каждого типа данны х объекта /, названного в к . вычисляется множество недопустимых ком би­ наций объектов, содержащих г. которые запрещены к , Д 1 = R / i - R/( Д /i) . 3) Создается множество Д - 2 > |Д 1. то есть Д является объединсггисм множеств, вычисленных на шаге (Н2>. 4) П рисваивается R т R — Д . i) К онечное результирующее множество R является результирующим множеством для исходного графа подтии/суиертип. П р и м е р 155 — В данном примере заданы только объявления супсргипов и подтипов объектов, гак как это вся инс|юрмация, которая необходима для интерпретации возможных типов данных сложных обьсктов. SC H EM A example: ENTITY р SU PERTY PE OF (O N E O F lm . 0 A N D O N EO F(c, a»); ENTITY m SU BTYPE O F (p); ENTITY f SU BTYPE O F (p); ENTITY e SU BTYPE O F (p>; ENTITY a ABSTRACT SU PERTY PE O F ; ENTI TY I SU BTYPE O F (a); E N T IT Y ! SU BTYPE O F (a); EN D _SCH EM A ; Это представлено EX PR ESS-G -диаграммой на рису нке. B .l.114
ГОСТ Р И СО 10303-11-2000Рисунок В.1 — EXPRESS-G-диаграмма для схемы и:» примере) 155Возможные типы данных сложных объектов могут быть определены следующим образом.Вышеприведенный текст EXPRESS уже дает нам все объявления объектов и полные выражения супер-типов. как это требуется на шагах а) и Ь).Применение шага с) даст:Еу, -» (р&лг&с, р & т& а, p & fi& c. p&J^&a. р\£„ -» |о&/. о&/|Применение шага d) расширяет объявления корневых объектов р Результирующим множеством явля­ется:£ р - [р&т&с, p& m & a& i. p& m & a& i. p& f2&c, p& J.& a& i. p&J\&a&i. р\Комбинация корневых множеств на шаге с) дает :R ~ [р&т&с, p& m & a& i. p& m & a& i. р&/2&с. р&/2&а&1. p&J\&a&i. р\Подтипы с множественных! наследованием отсутствуют, поэтому шага 0 не требуется. Применение шага g) к каждому ограничению ON EOF дает :- ONEOF(m.f):/>,' 2 - [т&АD,= [т&ДУдаляя D | из R в соответствии с шагом g3). оставляем R неизменным. Следовательно, мы остаемся с:R - [р&т&с. p& m & a& i. p& m & a& i, р&/,&с. р&/2&а&1. p& f^& a& i. р\- ONEOF(c.a):= |с&д|D ,“ [с&а|Удаляя О у и з R в соответствии с шагом g3), оставляем R неизменным. Следовательно, мы остаемся с:R = [р&т&с, p&m &a&i. p&m &a&i. р&/->&с. p& fy& a& l, p&J\&a&i. р\-O N E O F O . i):D x '1 - |/&/|Dx- (AMУдаляя /); из R в соответствии с шагом g3), оставляем R неизменным. Следовательно, мы остаемся с:R p& m & a& i, p&m &a&i, p&J2&c. p&J\&a&l, p&/2& a & i, p\Применение шага h) к каждохтс ограничению A N D дает: - ONEOF(m.O A N D ONEOF(c.a):@i» |/и&с. m&a, fi& c , fy&a\o r- | |/>/” 11 /V - II /),* - IIot -IIУдаляя D\ из R в соответствии с шагом Ь4). оставляем R ней шейным. Следовательно, мы остаемся с:R - [р&т&с, p&m & a& l. p&m &a&i. р&/2&с. р&/,&а&/. p&/2& a & i, р\В соответствии с шагом i) результатом является:R [р&т&с, p&m &a&i. p&m &a&i. р&/2&с. р&/2&а&1. p&f2& a & i. р\Этот пример, будучи произвольным, может стать более реалистичным, если дать объектам более опи­сательные имена. Например, если вместо р. га, f, с, я, I и i назвать объекты соответственно person (лич­ность), male (мужчина), female (женщина), citizen (гражданин), alien (иностранец). Iegal_alien (легальныйиностранец), и illcgal_alien (нелегальный иностранец).115
ГОСТ Р ИСО 10303-11-2000При использовании такой интерпретации прочтение некоторых элементов из окончательного резуль­тирующего множества даст:- личност ь (person); -личность (person), которая является мужчиной (male) и гражданином (citizen); -личность (person), которая является мужчиной иностранцем (male alien) и нелегальным иностранцем(iliegal_alien);- личность (person), которая ...П р и м е р 156 — ^гог пример показывает, что ON EOF является глобальным ограничением, котороене может быть переопределено множественным наследованием.SCHEMA diamond;ENTITY a SUPERTYPE OF (ONEOF(b. c)); ENTITY b SUPERTYPE OF (d) SUBTYPE OF (a); ENTITY c SUPERTYPE OF (d) SUBTYPE OF (a); ENTITY d SUBTYPE OF (b, c); END_SC'HEMA;'Это представлено EXPRESS-G-дмаграммой на рисунке В.2.Рисунок В.2 — EXPRESS-G-диаграмма для схемы из примера 156Возможные тины данных сложных объектов могут быть определены следующим образом:Вышеприведенный текст EXPRESS уже дает нам все объявлении объектов и полные выражения супер­типов, как это требуется на шагах а) и Ь).Применение шага с) дасг:Et -* \а&Ь, а&с. а\ Еь —» | b& d , 6|Ес -> (c&rf. с|Ъ -4 ИПрименение шага d) расширяет объявления корневых объектов а. Результирующим множеством явля­ется:Ец = \a&h&d, a&b. a&c&d. а&с, а\Комбинация корневых множеств на шаге с) даст:К ]a&h&d, a&b, a&c&d. а&с. fl|Применение шага f) к каждому подтипу с множественным наследованием дает следующие результаты: - Для объекта d:Сйь-С£- |o&c&d|Рл- \a&b&d&c\Ха- |a&b&d. a&c&d]Новым множеством Л * ( Л — А[,) + Рл тогда яатястся:а&с. a. a&b&d&c].Применение шага g) к каждому ограничению ON EOF даст:- ONEOF(b.c): />,‘ -2 = |Л& с |D , - |6&с|Удаление D, из Я в соответствии с шагом g3) удаляет из R следующие элементы: [o&A&d&cJ.Таким образом, мы остаемся с:Я = [а& Ь , а & с . о |
ГОСТ Р ИСО 10303-11-2000Выражения супертипов, использующие оператор A N D , отсутствуют, поэтому шаг h) нс требуется. В соответствии с шагом i) результатом является:Я — |д&6. а&с. а]П р и м е р !57 — Этот пример показывает влияние применения ограничений к сложной структуре,содержащей по меньшей мере один из возможных типов ограничений. Этот пример нс является модельюкакой-либо полезной концепции и используется исключительно для демонстрации алгоритма.SCHEMA complex;ENTITY a SUPERTYPE OF (ONEOF(b, c) A N D d ANDOR 0; ENTITY b SUBTYPE OF (a); ENTITY c SUBTYPE OF (a): ENTITY d ABSTRACT SUPERTYPE OF (ONEOF(k, I)) SUBTYPE OF (a): ENTITY f SUBTY PE OF (a, z); ENTI TY k SUBTYPE OF Это представлено с помощью EXPRESS-G-лнаграммы на рисунке В.З.я__________ 1__________—1—a _ £ f t P i¥ i" ALlРисунок В.З - EXPRESS-G-диаграмма для схемы из примера 157Возможные типы данных сложных объектов могут быть определены следующим образом:Вышеприведенный текст EXPRESS уже даст все объявлении объектов и полные выражения суперти­пов. как это требуется на шагах а) и Ь>.Применение шага с) ласт:E j -» (a. a&h&d. a&b&d&f, a&c&d. a&c&d&f. a&/\Ел -> 1 d&k. d & l|E, -* [f& x& y& z./& x& z./& )& z. f& z. x& y& z, x& z, y& z, c|Применение шага d) расширяет объяатенпя корневых объектов а. г. Результирующими множествамиявляются:Ел [a. a& b& d& k. a&b&d&l. a&b&d&f&k. a&b&d&f&t. a&c&d&k. a& c& d& l,a&c&d&J&k. a& c& d& f& l, a&AE, - \f&f&x&y&Z. /&I&V&Z. J&X&Y&Z. f&X&Z. f&y&Z, J&Z. I&X&)&Z. f&y&z,x&y&z. x&z. y&z. c|Комбинация корневых множеств на шаге с) дает:Я - | a. a&b&d&k. a& h& d& l. a&b&d&J&k. a& b& d& f& l. a& c& d& k. a&c&d&l.a& c& d& f& k. a&c&d&J&l. a&f. J& l& x& y& z. f& l& y& z. f& x& y& z. J&x&z. f& y& z.f&Z. I&X&Y&Z, f&y&Z, X&y&Z, X&z. y&z. clПрименение шага Г) к каждому подтипу с множественным наследованием/даст следующие результаты:для объекта f:СУ - | a&b&d&k&f. a & h & d & l& f a&c&d&k& f. a&c&d&l&f. a&J)СУ = U & i& x& y& z. f& l& y & z . J& x& y& z. J&x& z. f& y& z. J&z\Pt ~ |a&b&d&J&k&z. a&b&d&f&k&x& z, a&b&d&J&k& t& v&z. a& b& d& f& k& v& z,a& b& d& J& k& l& x& y& z. a&b&d&Z&k&x&y&z, a&h&d&J&l&z. a& b& d& f& l& x& z.117
ГОСТ Р ИСО 10303-11-2000a& b&d&J&l&y&z. a& b& d& J& l& x& y& z. a&c&d&J&k&z. a&c&d&J&k&x&z.a&c&d&J&k&l&\ &z. a&c&d&J&k&v&z. a& c& d& J& k& l& x& v& z.a&c&d&J& k&x&v&z, a&c&d&J&l&z. a&c&d&J& l&x& z. a& c& d& f& l& y& z.a&c&d&J& l&x& y&z. a&J&z. a&J&x&z. a&J& l& y& z, a&J&y&z. a&J&f&x&y&z.a&/&x&y&z]Xx = [a&b&d&J&k. a&h&d&J&l. a&c&d&J&k. a&c&d&J&l. a& f.J& l& x& v& z,J&l&y&Z, J&x&y&z. J&x&z.J&.v&Z. J&z\Новым множеством R = (R-X) + P тогда является: |a. a&b&d&J&k& z. a&b& d& J& k& x&a& b& d& J& k& l& y& z. a& b& d& f& k& v& z. a& b& d& J& k& l& x& v& z.a&b&d&J&k& x&v&z. a&b&d&J&l&z, a& b & d& f& l& x& z. a&b&d&J&l&v&z.a&b& d& J& l& x& v& z. a&b&d&k. a&b& d& l. a&c&d&J&k&z. a&c&d&J&k&x&z,a& c&d&J& k&t&v&z. a&c&d&J&k&v&z. a& c& d& J& k& l& x& v& z.a&c&d&J& k&x&v&z. a&c&d&J&l&z. a&c&d&J& l&x& z. a&c&d&J&l&v&z.a& c& d& J& l& x& v& z. a&c&d&k. a& c& d& l. a&J&z. a&J&x&z. a&J&l&y&z.a&J&y&z, a& J& l& x& v& z, a&J&x&y&z. I& x& y& z. l& y& z. x& y& z. x&z. y&z, г|- для объекта I:C,d - |a& b& d& J& k& l& v& z. a& b& d& J& k& l& x& v& z. a&b&d&J&l&z.a& b & d & f& l& x& z. a&b&d&J&l&v&z, a& b&d&J&l&x&v&z. a & b & d & l,a& c& d& J& k& l& v& z, a& c& d& J& k& l& x& v& z. a&c&d&J&l&z. a&c&d&J&l&x&z.a&c&d&J& l&v& z. a& c& d& J& l& x& y& z. a& c& d& t)Cp - {a&h&d&J&k&l&v&z. a& b& d& J& k& l& x& x& z. a&b&d&J&l&y&z.a& b& d& J& l& x& v& z. a & c & d & f& k& l& i& z. a&c&d&J&k&l&x&\ &z.a&c&d&J&l&Y&z. a&c&d&J&l&x&Y&z. a & f& l& y& z. a& J& l& x& v& z. I& x& y& z.l&y&z]P, - | a&b&c&d&J&k&l&Y&z. a& b& c& d& f& k& l& x& y& z. a&b&c&J&l&y&z.a&b&c&J& l&x& v&z. a& b&d&f&k&l'& v&z. a& b& d& J& k& l& x& y& z.a& b& d& t& l& y& z. a& b&d&J&l&x&v&z. a& h& d & l& x& v& z, a& b & d & l& v& z,a&c&d&J&k&l&Y&z. a& c& d& J& k& l& x& v& z. a&c&d&J&l&v&z.a&c&d&J& l&x& y&z. a& c& d& l& x& y& z. a&c&d&l&y&z]X, = | a& h& d& J& k& l& y& z. a& b & d & f& k& l& x& y& z. a&b&d&J&l&z,a& b & d& f& l& x& z. a&b&d&J&l&v&z. a&b& d& J& l& x& v& z. a&b& d& l.a&c&d&J& k&l& Y&z. a& c& d& J& k& l& x& v& z. a&c&d&J&l&z. a&c&d&J&l&x&z.a&c&d&J& l&v& z. a&c&d&J& l&x& v&z. a& c& d& l. a&J& l& y& z. a&J& l& x& v& z.I& x& y& z. l&y&z]Новым множеством R - {R-X^)+P\ тогда является: |a, a&b&c&d&J& k&t&y&z.a& b& c& d& J& k& l& x& y& z. a&b&c&J&l&v&z. a&b&c&J& l&x& v&z.a&b&d&J&k&l&\ &z. a& b & d& J& k& l& x& y& z. a&b&d&J&k&x&z, a&b&d&J&k&v&z.a& b& d& J& k& x& y& z. a& b& d& f& k& z. a&b&d&J&l&y&z. a& b& d& f& l& x& y& z.a&b&d&k. a& b & d & l& x& v& z. a& b& d& l& v& z. a& c& d& J& k& l& x& v& z.a& c& d& J& k& l& y& z. a&c&d&J& l&y& z. a& c& d& J& l& x& y& z. a&c&d&J&k&x&z.a&c&d&J& k&y&z, a&c&d&J& k&x&y&z, a&c&d&J&k&z. a&c&d&k.a& c& d& l& x& y& z. a& c& d& l& y& z. a&J&z. a&J&x&z. a&J&y&z. a&J&x&y&z.x& y& z. x&z. y& z, ;]Применение шага g) к каждому ограничению QNEGF дает: -ONEOF(b.c): О, 1-2 - |/ч&е|2),= |Wic|Удаляя /), из Л в соответствии с шагом R следующие элементы:la&b&c&d&J&k&l&\ &z. a& b& c& d& J& k& l& x& v& z. a& b & c& J& l& i& z.a&b&c&J&l&x&y&z]Таким образом, мы остаемся с:R ~ [a. a& b& d& f& k& l& v& z. a&b&d&J&k& l&x&v& z. a&b&d&J&k&x&z.a& b& d& f& k& y& z. a&b&d&f&k&x& v&Z. a&b&d&J&k&z, a&b&d&J&l&v&z.a&b& d& J& l& x& v& z. a&b&d&k. a&'b&d&l&x&y&z. a& b&d&l& y&z.a& c& d& J& k& l& x& v& z. a& c& d& J& k& l& y& z. a&c&d&J&l&v&z.a& c& d& J& l& x& v& z. a&c&d&J& k&x&z. a&c&d&J&k&v&z.a&c&d&J& k&x&y&z. a&c&d&J&k&z. a&c&d&k. a& c& d& l& x& y& z.a& c& d& l& y& z. a&J&z. a&J&x&z. a&J&y&z. a&J&x& y&z. x& y& z, x&z. y&z. c|IIS
ГОСТ Р ИСО 10303-11-2000-O N E O F (U ):О ,1-2 - |М /|D]= |А:&/1Удаляя D> из R в соответствии с шагом g3), удаляем из Л следующие элементы:[a& b& d& j& k& t& y& z, a& b& d& J& k& l& x& y& z. a&c&d&f&k&l&y&Z.a&c&d&/&k& Ukx&y&z]Следовательно, мы остаемся с:R - | a, a&b&d&f&k&x& z. a&b&d&f&k&Y&z. a&b&d&J&k& x&y&z,a&b&d&J&k&z, a&b&d&J&l&y&z. a& b& d& f& l& x& Y& z. a&b&d&k.a& b & d & l& x& y& z. a&b&d&l& y&z. a& c& d& f& l& y& z. a&c&d&J&l&x&y&z,a& c& d& f& k& x& z. a&c&d&f&kc&y&z. a&c&d&j'dek&x&y&z. a & c& d & j& k& z,a&c&d&k. a& c& d& l& x& y& z. a & c & d & l& i& z. a&J&z. a&J&x&z. a&J&y&z.a&J&x& y&z, x&ytzz. x&z. J&Z, z\Применение шага h) к каждому ограничению A N D даст: - ONEOF(b.c) ANDd:- | b&d. c&d\0 .h = | | /V “ II /V “ IIA=11Удаляяиз R в соответствии с шагом Ь4). оставляем R неизменным. Следовательно, мы остаемся с:R - | a. a&b&d&J&k&l&Y&z. a&b&d&J&k&l&x&y&z. a&b&d&J&k&x&z.a& b& d& f& k& y& z. a&b&d&J&k&x&Y&z. a&b& d& f& k& z. a&b&d&f&l&Y& z.a& b& d& f& I& x& Y& z. a& c& d& J& k& l& v& z. a&b&d&k. a&b&d&l& x&Y& z,a& b & d & l& y& z. ci& c& d& f& k& l& x& v& z, a&c&d&J& l&y& z. a& c& d & j& t& x& v& z.a& c& d& f& k& x& z. a&c&d&J&k&y&z. a&c&d&J& k&x&y&z. a&c&d&J&k&z.a&c&d&k. a& c& d& l& x& y& z, a& c& d& l& y& z, a&J&z. a&J&x&z, a&J&y&z.a& j& x& y& z. x& y& z. x& z. Y&Z. г|В соответствии с шагом i) результат является:R - |<т. a&b&d&J&k&l&Y&z. a& h& d& J& k& l& x& y& z. a&h&d&J&k&x&z.a&b&d&J&k&y&z. a& b& d& J& k& x& y& z, a&b&d&f&k&z. a&b&d&J&l&Y&z.a& b&d&J&l&x&y&z. a&c&d&J& k&i&v&z. a&b&d&k. a& b& d& l& x& v& z.a& b& d& l& v& z. a& c& d & f& k& l& x& v& z. a&c&d&J& l&y& z. a & c & d & j& l& x& v& z.a&c&d&J& k&x&z. a&c&d&/&k&y& z. a&c&d&J& k&x&y&z. a&c&d&J&k&z.a&c&d&k. a& c& d& l& x& y& z. a& c& d& l& y& z. a&J&z, a&J&x&z, a&J&y&z,a&J&x&y&z. x& y& z. x&z. y& z. clПРИЛОЖЕНИЕ C(обязательное)Ограничения на экземпляры, налагаемые спецификацией интерфейсаКогда импортируются сложные графы подтип/супертнп, допустимые типы данных сложных объектоввычисляются с использованием расширений правил, описанных в разделе 11 и в приложении В. За счет то­ го. что определяются только те объекты, которые необходимы в данной схеме, граф подтип/супертнп, опре­деленный в одной или нескольких других схемах, может быть усечен для использования в данной схеме.В настоящем приложении заданы правила, необходимые для разложения графов подтип/супертип втом случае, если один или несколько типов данных объектов, присутствующих в исходных графах, не им­портируются. Такие пропущенные типы данных объектов оставляют пустоты в выражениях супертипов. В119
ГОСТ Г ИСО 10303-11-2000настоящем приложении такие пустоты обозначаются как О . Для удаления пустот из выражения супсртипаиспользуются следующие преобразования:- O N E O F(A <> , - . ) -» ONEOF(/l. ... >-O N E O F (< > )-» <>- 0 N E 0F (-4) -* А- A A N D <> -» 0 N E 0 F M . А) - A AN DOR О -* АОбработка оператором A N D гарантирует, что тс тины данных объектов, которые в исходной схемеобязательно должны комбинироваться, не будут присутствовать в данной схеме (обеспечивается операторомONEOF(A, А)), если сочетаемые с ними типы данных объектов нс импортированы.Результирующее множество допустимых типов данных сложных объектов для схемы, связанной с дру­гими схемами, вычисляется по следующему алгоритму:a) Создастся полный пул объектов для данной схемы. Полный пул объектов состоит из:1) всех объектов, определенных в данной схеме;2) всех объектов, импортированных в данную схему с помощью спецификаций USE и REFERENCE; 3) всех объектов, неявно импортированных в данную схему.П р и м е ч а н и е I — Полный Пул объектов может содержать несколько объектов с одинаковым име­нем (в случае их неявного имноршрования из разных схем) или может включать один и тот же объект подразными именами (когда этот объект был переименован при импорте посредством выражения USE FROM ...AS). В первом случае пул будет содержать каждый объект, имеющий идентичное имя. Во втором же случаепул будет содержать только один объект, несмотря на одновременное наличие у него нескольких имен.b) Для каждою супсртипа из пула объектов сокращают выражение супсртипа. удаляя все ссылки наобъекты, отсутствующие в пуле объектов. Повторно применяют описанные выше преобразования для удале­ния образовавшихся пустот и получают правильное выражение супсртипа. ссылающееся только на объектыиз пула объектов.c ) Для каждого супсртипа из пула объектон выписывают полное выражение супсртипа. включающеенеявные ограничения AN DOR с подтипами, нс указанными в выражении супсртипа.П р и м е ч а н и е 2 Неявные ограничения ANDOR включают как подтипы, добавленные в схемах,отличных от объявленной схемы, так и подтипы из объявленной схемы, которые нс вошли в выражениесупсртипа.d) Вычисляют результирующее множество в соответствии с алгоритмом, описанным в приложении В.начиная с шага с).Для тина данных сложного объекта из результирующего множества, который содержит но крайней ме­рс один локально объяш1снный или импортированный с помощью спецификации USE объект, могут бытьсозданы независимые экземпляры. Для типа данных сложного объекта, не содержащего таких объектов, не­ зависимые экземпляры в данной схеме нс могут быть созданы.П р и м е ч а н и е 3 — Если имеется явно импортированный объект, который нс присутствует ни в ка­ком типе данных сложного объекта из полученного результирующего множества, для такого объекта экзем­ пляры не могут быть созданы вообще. Это означает ошибку при импорте данного объекта.П р и м е р ы :158 — Схема example (см. пример 155 из приложения В) используется для демонстрации алгоритма.SCHEMA test:USE FROM example (I); REFERENCE FROM example (m); END .SCHEM A ;Возможные типы данных сложных объектов определяются следующим образом: Пул обьсктов включает объекты I, т . а. р. I и т импортированы явно, а и р импортированы неявно,поскольку они входят в цепочку супсртипов объекта /.Усечение выражения супсртипа для р и его преобразование (шаг Ь) дает:ONEOF(m.y) A N D ONEOF(c. а)ONEOF(m, <>j A N D ONEO F(<>, a)ONEOF(m) A N D O NEOF(e)m AN D aПодобным же образом находим для а:O N £O F(/. j)ONEOFONEOFIВ этом случае выражения супертипа уже полные, как это требуется для шага с). Применение алгоритма результирующего множества на шаге d) даст результирующее множествоR = |р. а&1&т&р\120
ГОСТ Р ИСО 10303-11-2000Тип данных сложного объекта a& l& m & p содержит объект /, явно импортированный с момошью спе­цификации USE. и следовательно для него могут быть созданы независимые экземпляры. С другой сторо­ны. для объекта р в данной схеме независимые экземпляры созданы быть нс могут.159 — Предположим доступность следующих схем:SCHEMA si;ENTITY c l SliPERTYPE OF SCHEMA s2;USE FROM si ( el l AS I); ENTITY e 2 11 SUBTYPE OF (0; END_ENTITY; ENTITY c2I2 SUBTYPE OF (f); END_ENTITY: END_SCHEMA:SCHEMA s3;USE FROM si ( cl 2 AS g); ENTITY c321 SUBTYPE OF (g): END_ENTITY: ENTITY e322 SUBTYPE OF (g); END_ENTITY; END_SCHEMA:Результирующими множествами для этих схем являются:si | el . e l &e l l . e l &el 2. e l &e l l &e l 2 |s2 |el& /, el& /fce2l1. el&/&e212, el& /& e2l 1&е212|s3 |el&.?. el& g& e32l, el&,i?&e322. el&s&e32l&e322|Если схема lest описывается, как приведено ниже:SCHEMA test;USE FROM s2 ( e211 >: USE FROM s3 (c322): END_SCHEMA;Возможные типы данных сложных объектов для нес определяются следующим образом: Пул объектов состоит из е211. е322. / g. el: е211 и е322 импортированы явно;/ , g и el импортированынеявно, поскольку они аходят в цепочку супертинов e ll I и е322. Объекты/ и # являются переименованнымиe l l и el 2 соответственно, так что el 1 и е!2 являются действительными членами пути объектов.Усечение выражения супертипа для el и сто преобразование (шаг Ь) дают:e l l AN DOR el 2/ A N D O R gдля /находим :e2l I AN DOR e2l2e2l I AN DO R <>e2l 1для g находим:e321 ANDOR e322<> ANDOR e322e322В этом случае выражения супертинов уже являются полными, как требуется для шага с). Применение дпоритма результирующего множества на шаге d) даст результирующее множество К ~e [el. е\&/, el&£. el&flicg. e\&J&e211. e(&/&g ei&f& g& e322, d&/&g&e2l 1&е322]. Типы данныхсложных объектов el& /2te2ll. el&/&.g&e211. el&g&e322. el&y&?&e322. el&y&g&e211&е322 содержат одни изобъектов — e2l 1 или е322. импортированных явно с помощью спецификации USE, и поэтому для них могутбьпъ созданы независимые экземпляры. С другой стороны, в данной схеме не могут быть созданы незави­ симые экземпляры для el, e l& / el&g, ei&f& g.121
ГОСТ Р ИСО 10303-11-2000ПРИЛОЖЕНИИ D(обязательное)EXPRESS-G. Графическое подмножество EXPRESS0 .1 Введение и обзорEXPRESS-G является формальной графической нотацией, предназначенной для изображения специ­фикаций данных, определенных в языке EXPRESS. Данная нотация поддерживает подмножество языкаEXPRESS.EXPRESS-G поддерживает следующее:- различные уровни абстракции данных: - диаграммы, размещаемые более чем на одной странице; -диаграммы, использующие минимум компьютерных графических средств, включая использованиетолько нсграфнчсских символов.Нотация EXPRESS-G представлена графическими символами, образующими диаграмму. В нотациииспользуется три типа символов:определения — символы, обозначающие простые типы данных, поименованные типы данных, сконст­руированные типы данных и объявления схем;отношения — символы, описывающие отношения, существующие между определениями; компоновки — символы, позволяющие размешать диаграммы более чем на одной странице.EXPRESS-G поддерживает простые типы данных, поименованные типы данных, отношения и количе­ство элементов (множества). Также EXPRESS-G поддерживает ногагшн одной или нескольких схем. Под­держка механизма ограничений, задаваемых средствами языка EXPRESS, в EXPRESS-G отсутствует.П р и м е ч а н и е — EXPRESS-G может использоваться как самостоятельный язык определения дан­ных. то есть нс требует наличия соответствующей Спецификации на языке EXPRESS.П р и м е р 160 — На рисунках D.1 и D.2 показаны EXPRESS-G-диаграммы для простой схемы наязыке EXPRESS из примера 171 (см. приложение Н). Диаграмма разбита на несколько страниц, чтобы пока­зать, как создаются многостраничные диаграммы.Личность (person) имеет некоторые определяющие ее характеристики, включая фамилию, имя. необя­зательное прозвище имя. дату рождения и описание волос. Личность является мужчиной (male) или женщи­ ной (female). Мужчина может иметь жену — женщину, в этом случае женщина имеет мужа — мужчину.Личность может иметь детей, которые также яатяются личностями.ehllcfcwi S#k7]h *Рисунок D .l — Полная диаграмма уровни объекта для примера 171 (страница 1 из 2) 122
ГО СТ Р И С О 1 0 3 0 3 - 1 1 - 2 0 0 0KW j || u r n I г date 1 1Рисунок 0 .2 — Полная диаграмма уровня объекта для примера 171 (страница 2 из 2) D.2 Символы определенияОпределения типов данных и схем в диаграмме обозначаются прямоугольниками, содержащими внут­ри имя определяемого элемента. Отношения между элементами обозначаются линиями, соединяющимипрямоугольники. Для различных видов определений и отношений используются различные стили линий.D.2.1 С и м в о л ы д л я п р о с т ы х т и п о в д а н н ы хСимвол для обозначения простого типа данных EXPRESS представляет собой сплошной прямоуголь­ник с вертикальной двойной чертой справ;!. Имя типа данных заключено в прямоугольник, как это показа­ но на рисунке D.3. BOOLEAN LOGICAL | ■ т о м а 1 « Л И И | ] N T E 0 U | - 1Рисунок D.3 — Символы для простых типов данных EXPRESSD .2.2 С и м в о л ы д л я с к о н с т р у и р о в а н н ы х т и п о в д а н н ы хСимволы для сконструированных типов данных EXPRESS, выбираемого типа SELECT и перечисляе­мого типа ENUMERATION представляют собой пунктирные прямоугольники, в которые заключено имятипа данных, как это показано на рисунке D.4.шлет | | тшшиаш \Рисунок D.4 — Символы для сконструированных типов данных EXPRESSСимвол для тина данных SELECT типа состоит из пунктирного прямоугольника с двойной вертикаль­ной линией слева.Символ для типа данных ENUMERATION тина состоит из пунктирного прямоугольника с двойнойвертикальной линией справа. EXPRESS-G не обеспечивает представления списка элементов перечисления.П р и м е ч а н и е — Поскольку простые типы данных и тип данных ENUMERATION являются вEXPRESS-G атомарными типами данных, символ, обозначающий тип данных ENUMERATION, сходен ссимволом, обозначающим простой тип данных, который также имеет вторую вертикальную черту справа.EXPRESS допускает использование типов данных SELECT и ENUMERATION только для предстаале-иия определенного типа данных. EXPRESS-G предоставляет сокращенную нотацию, когда имя определен­ ного типа данных пишется внутри пунктирного прямоугольника, представляющего типы SELECT илиENUMERATION', вместо имени типа данных, а символ определенного типа данных нс дастся, как это пока­ зано на рисунке D.5 (см. D.5.4).« . м м ЯГЦ И Ш П ЯЛ ЯМРисунок D.5 — Сокращенные символы дли сконструированных типов данных EXPRESS,используемые для представления определенных типовП р и м е р 161 — Две диаграммы на рисунке D.5 эквивалентны.Рисунок D.6 — Пример альтернативных методов представления гйпа ENUMERATION123
ГО СТ Р И С О 1 0 3 0 3 - 1 1 - 2 0 0 0Реализация инструментальных средств редактирования EXPRESS-G может использовать полную фор­му представления сконструированных типов данных, сокращенную форму или обе формы. Разработчик ин­струментальных средств редактирования EXPRESS-G должен указать, какая из этих форм применяется, ис­пользуя приложение Е.D.2.3 С и м в о л ы д л я о п р е д е л е н н ы х т и п о в д а н н ы хСим ват для определенною типа данных представляет собой пунктирный прямоугольник, в которыйзаключено имя типа, как это показано на рисунке D.7.Рисунок D.7 — Символ для определенного типа данных EXPRESSD.2.4 С и м в о л ы д л я т и п о в д а н н ы х о б ъ е к т о вСимвол для типа данных объекта представляет собой сплошной прямоугольник, в который заключеноимя обьскга. как это показано на рисунке D.8.|"-«ЙНУРисунок D.8 — Символ для типа данных объекта в EXPRESSD.2.5 С и м в о л ы д л я ф у н к и и й и п р о ц е д у р EXPRESS-G не поддерживает никакой нотации ни для обозначения функций (FUNC TIO N), ни дляобозначения процедур (PROCEDURE).D .2.6 С и м в о л ы д л я п р а в и лEXPRESS-Ci нс поддерживает нотацию для определения правил (RULE). Имена объектов, яатнюших-ся параметрами правил, могут быть помечены звездочкой (см. D.5.3).D.2.7 С и м в о л ы д л я с х е мСимвол для схемы (рисунок D.9) представляет собой сплошной прямоугольник с именем схемы вверхней половине прямоугольника, отделенный от нижней половины горизонтальной чертой. Нижняя по­ловина прямоугольника остается пустой.1_МЙМ(Рисунок D.9 — Символ дтя схемыD.3 Символы отношенийСим ваты определений соединяются линиями различных стилей, как это показано на рисунке D.10. ■ о С г в ц ш дня; ---------------- - г^нкгирнв*! лмгмя; - Т В П С П Л Л И Н М 1Рисунок D.10 — Стили линий, обозначающих отношенияОтношение для необязательного атрибута типа данных объекта представляется пунктирной линией. Ссылка между схемами представляется пунктирной линией. Отношение наследования (то есть отно­шение между подтипом и су перги пом) представляется толстой линией. Все прочие отношения представля­ ются сплошными линиями нормальной толщины.Отношения являются двунаправленными, но одно из направлений выделяется. Если обьскт А имеет яв­ный афибут, который начнется объектом В, то выделенным является направление от А к В. В EXPRESS-Gотношения отмечаются пустым кружком в выделенном направлении, в данном случае в конце линии со сто­ роны В. Для отношения наследования выделенным направлением является нагграатсние к подтипу, то естькружок располагается на конце линии со стороны подтипа.П р и м е р 162 — Направления отношений показаны на рисунке D.1I, колорый является неполным от­ражением кода EXPRESS из примера 172 приложения Н. Диаграмма содержит шесть типов данных объектов,три определенных типа данных и несколько простых типов данных. Обьскт super имеет два подтипа, назван­ные sub_l и sub_2. Объект sub_2 имеет- атрибут выбираемого типа данных, названный choice, выбираемый ме-124
ГО СТ Р И С О 1 0 3 0 3 - 1 1 - 2 0 0 0жду типом данных объекта. названным an_enl, и определенным типом данных name. Тип данных объектаan ent имеет в качестве атрибут целочисленный тип данных, а п ате является строковым типом данных.Тип данных объекта sub_l имеет в качестве атрибута тип данных объекта from en t. Тип данных объек­та from_ent в качестве необязательного атрибута имеет тин данных объекта t o e n t , а в качестве обязательно­го атрибута — действительный тин данных. В свою очередь, тип данных объекта to_cnt в качестве обяза­тельного атрибута имеет определенный тип данных, названный strings, a strings является списком (не пока­занным на диаграмме) строкового типа данных.11 р и si с ч а н и я1 Хотя в приведенной диаграмме показаны только прямые линии отношений, линии могут иметь лю­бую конфигурацию (например, быть скругленными).2 Нс всегда удается построить диаграмму, избежав при этом взаимного пересечения линий отношений.Задача распознавания и разводки линий связей в точках их пересечения возлагается на разработчика диа­граммы.Рисунок D. I! — Частная диаграмма уровня объекта, иллюстрирующая нап­равления отношений из примера 172 (страница 1 из 1)D.4 Символы компоновки Графические представлении могут располагаться на нескольких страницах. Каждая страница должнабыть пронумерована. Символы, обеспечивающие ссылки между страницами, приведены на рисунке D.12.[ щ » м ч * Л - Г ) ---------- °— ссылка на данную страницу;— ссылка на другую страницуРисунок D. 12 — Символы компоновки: страничные ссылкиСхема может содержать ссылки на определения из других схем. Символы, обеспечивающие ссылкимежду схемами, приведены на рисунке D.13.— определение спецификации REFERENCE из другой схемы;— определение спецификации USE из другой схемыРисунок O. I3 — Символы компоновки: ссылки между схемамиD .4.1 С т р а н и ч н ы е с с ы л к и Когда существует отношение между определениями на разных страницах, линия отношении на каждойстранице оканчивается скругленным прямоугольником. Скругленный прямоугольник должен содержать125
ГО СТ Р И С О 1 0 3 0 3 - 1 1 - 2 0 0 0номер страницы и номер ссылки на странице, как показано на рисунке D.12. Номером страницы являетсяномер страницы, содержащей определение, на которое дастся ссылка. Номер ссылки используется для раз­личения множества ссылок на одну и ту же страницу. На той странице, откуда исходит ссылка, символ ком­поновки должен содержать имя определения, на которое дана ссылка. На той странице, на которую данассылка, символ компоновки может содержать заключенный в круглые скобки список страниц, с которыхисходят ссылки.П р и м е ч а н и е — Использование страничных ссылок показано на рисунках 0 .1 и О.2. Скругленныйпрямоугольник, помеченный 2.5. исходящий от определения person, означает, что определение, на котороедастся ссылка, находится на странице 2 диаграммы как ссылка номер 5. На странице 2 диаграммы, как по­казано на рисунке. D .2, текст в скругленном прямоугольнике указывает, что на данное определение ссылкасделана из определения, расположенного на другой странице диатраммы. Число один (1) в круглых скобкахпоказывает, что определение, из которого исходит ссылка, расположено на первой сграниие диаграммы.D.4.2 С с ы л к и м е ж д у с х е м а м иСсылки между схемами обозначаются скругленным прямоугольником, содержащим имя определения,квалифицированное именем схемы, как показано на рисунке D .I3.Определения, доступные из другой схемы через спецификацию REFERENCE, заключают в пунктир­ный прямоугольник. Если определение переименовано при импорте, новое имя может быть написано впрямоугольнике под внутренним скругленным прямоугольником.Определения, доступные из другой схемы через спецификацию USE, заключают в сплошной прямо­угольник. Если определение переименовано при импорте, новое имя может быть написано в прямоугольни­ке под внутренним скругленным прямоугольником.Г1 р и м е ч а н и е — Использование ссылок между схемами показано на рисунке D. 17.D.5 Диаграммы уровня объектаEXPRESS-G может быть использован для представления определений и отношений между ними впределах одной схемы. Компоненты такой диаграммы включают простые тины данных, определенные тиныданных, типы данных обьектов и символы отношений, вместе с соответствующей информацией о ролях иколичестве элементов, представляя содержимое одной схемы.D.5.I И м е н а р о л е й В EXPRESS атрибут тина данных объекта именуется для указания р а ж типа данных, на которую ссы­лаются. когда экземпляр участвует в отношении, установленном атрибутом. Строка текста с именем ратиможет быть размещена над линией отношения, соединяющей символ типа данных объекта с символом егоатрибута. Подобные имена ратей латжны быть согласованы с правилами области действия и видимости,приведенными в разделе 10.D.5.2 К о л и ч е с т в о э л е м е н т о вАтрибуты объектов и определенные типы данных могут быть представлены агрегатными типами дан­ных (то есть ARRAY, BAG, LIST и SET). В EXPRESS-G тип агрегации указывают около линии отношениядля атрибута сразу за именем атрибута. Используется только первая буква агрегатного типа данных (А. В. Lили S), а ключевое слово OF опускается. Если тип агрегации нс указан, то кшшчсстно элементов равняетсяединице для обязательного отношения и нулю или единице — дли необязательного атрибута.П р и м е ч а н и е — На рисунке. D.14 приведена полная EXPRESS-G-диаграмма для текста на языкеEXPRESS из примера 172. Для компонентов выбираемого типа имена ролей не даны.Рисунок D.14 — Полная диаграмма уровня объекта для примера 172 (страница 1 из 1)126
ГО СТ Р И С О 1 0 3 0 3 - 1 1 - 2 0 0 0D.5.3 О г р а и и ч с и и яКроме механизма задания ограничений на количество элементов, EXPRESS-G не имеет никаких дру­гих механизмов для задания ограничений. Тот факт, что на элемент наложены некоторые ограничения, мо­жет быть обозначен применением звездочки (*). предшествующей имени элемента. Применяют следующиеправила:- если объект является параметром в глобальном правиле RULE, перед именем объекта может ставить­ся звездочка;-есл и атрибут объекта ограничен предложением UNIQUE или предложением WHERE внутри объекта,перед именем атрибута может ставиться звездочка;- если определенный тип данных ограничен предложением WHERE, перед именем определенного типаданных может ставиться звездочка;-есл и агрегатный тип данных ограничен ключевым стовом U N IQ U E, перед первым символом, обо­значающим агрегатный тин. может ставиться звездочка.D.5.4 С к о н с т р у и р о в а н н ы с и о п р е д е л е н н ы е т и п ы д а н н ы хТип данных SELECT прсдстаатястся символом выбираемого тина данных (см. рисунок D.4) плюс от­ношение и определение типа данных для каждого выбираемого -элемента. Никаких количеств элементов илиимен ратей для отношений не указывается.Тип данных ENUMERATION иатностъю представляется своим символом (см. рисунок D.4).П р и м е ч а н и е I — EXPRESS-G не обеспечивает механизм для записи элементов перечисления.Определенный тип данных представляется символом определения типа (см. рисунок D .7), внутри ко­торого записывается имя определения, определением представляемого типа данных и линией отношения,направленной от определения определенного типа данных к определению представляемого типа данных.Над линией отношения может быть указано количество элементов представления.II р и м е ч а н и е 2 — Представление определенного типа данных можно увидеть на типе .strings на ри­сунке D .I4.D.5.S Т и п ы д а н н ы х о б ъ е к т аДля определений объектов в EXPRESS-G используется символ сплошного прямоугольника (см. рису­нок 0 .8 ). Имя типа данных объекта записывается внутри прямоугольника.В EXPRESS-G объект может.- быть частью ациклического графа наследования; - иметь явные атрибуты: - иметь вычисляемые атрибуты; - иметь инверсные атрибуты;Каждый явный или вычисляемый атрибут в EXPRESS-обьсктс задаст отношение в соответствующейEXPRESS-G-днаграммс. Имя роли атрибута вместе с следующим за именем количеством элементов могутбыть надписаны над линией отношения. Вычисляемый алрибуг отличается от явного атрибута тем. что пе­ ред именем вычисляемого атрибута в круглых скобках пишутся символы DER. то есть (DER).В случае, когда для атрибута определен инверсный атрибут, имя инверсного атрибута и количество егоэлементов пишутся с противоположной стороны линии связи по отношению к имени атрибута, для которо­го он является инверсным. Перед именем инверсного атрибута в круглых скобках пишутся символы INV, тоесть (INV).П р и м е ч а и и я1 Типовые диаграммы уровня объекта показаны на рисунках D.1 и D .I4.2 Обозначения правил областей значений, применяемых для атрибутов, можно увидеть на рисунке D. 1на примере ролей husband и maidennarne.3 Пример объектов, ограниченных правилами, показан на рисунке O.I для объектов male и female.I1одтип/супсртипОбъекты, формирующие граф наследования, соединяются толстыми сплошными линиями. Кружокславился на конце линии отношения со стороны подтипа. Когда супертип является абстрактным суперти­пом, перед именем объекта внутри прямоугольного символа объекта в круглых скобках пишутся символыABS, то есть (ABS).EXPRESS-G обеспечивает ограниченную нотацию для обозначения логической структуры графа на­следования. Отношение ON EOF может- быть показано путем разветвления линии отношения, идущей отсупертипа к каждому из подпитое, относящихся друг к другу как ON EOF. Около точки разветвления ставит­ ся цифра 1.П р и м е ч а н и я4 На рисунке D.15, представляющем EXPRESS-G-диаграмму для примера 173. показано, что объектsub2 является абстрактным супертипом.5 На рисунке D. I5 показано, что объекты я Ы , sub2 и subS являются подтипами супертипа super. Л о­гические отношения между этими подтипами (то есть A N D или AN D O R ) никак нс обозначены. Экземплярsuper может нс иметь подтипов, поскольку super нс является абстрактным супсршпом. Объекты sub3 и sub4являются подтипами супертипа sub2. Объекты sub3 и sub4 друг с другом находятся в отношении ON EOF. 1 2 7
ГОСТ I* ИСО 10303-11-2000Рисунок D.15 — Полная диаграмма уровня объекта для графа наследования на примера 173 (страница I ИЗ I)EXPRESS дает возможность перс объявлять в подтипе атрибутов супертипа, представляя псрсобьявлсн-ный атрибут в конкретизации типа атрибута супертипа. В EXPRESS-G псрсобьяпленный атрибут представ­ляется таким же способом, как и атрибут супертипа, но с добавлением перед именем атрибута символов RT(теdeclared type — псрсобъявлсннын тип), заключенных в круглые скобки, то есть (RT).П р и м е ч а н и е 6 — На рисунке D. I6 показана одна из форм персобъявления атрибута, заданная втексте на языке EXPRESS из примера 174. Объект sub a переобьяатяет атрибут attr из его супсртнпа в под­тип атрибута с ю супертипа. Обьект sup_b имел необязательный атрибут типа NUMBER. В подтипе данныйатрибут переопределен как обязательный атрибут тина REAL.||^ ш т * |-------- — ------ ^ пщтжя | Г ^ п rf ^ r rРисунок D .I6 — Полная диаграмма уровня объекта для примера 174.показывающая персобъявления атрибутов в подтипах (страница I из I)D.5.6 С с ы л к и м е ж д у с х е м а м и Когда определение из данной схемы ссылается на определение из другой схемы, используется сим вилссылки между схемами, содержащий имя определения, на которое сделана ссылка, квалифицированноеименем схемы.П р и м е ч а н и е — На рисунке D. I7 показана диаграмма уровня объект» единичной схемы. Исходныйтекст EXPRESS для этой диаграммы приведен в примере 175. Полная диаграмма состоит из двух схем — topи gcora (см. рисунок D.18). а некоторые объекты схемы top имеют атрибуты, использующие определения изсхемы gcom. Поскольку диаграмма уровня объекта состоит только из тех элементов, которые определены водной схеме, в представлении схемы top в этом примере необходимо использование ссылок между схемами.D.6 Диаграммы уровня схемыДиаграмма уровня схемы состоит из представления нескольких схем и интерфейсов между ними.Содержимое EXPRESS-G-диаграммы уровня схемы ограничено схемами, входящими в диаграмму, иинтерфейсами между схемами. В диаграмму может быть включено следующее:-схем ы , которые ссылаются на другие схемы с помощью спецификации USE; - схемы, которые ссылаются на другие схемы с помощью спецификации REFERENCE; - имена элементов, на которые даны ссылки или которые используются в схемах.Импорт с иомошью спецификации USE представляется сплошной линией отношения нормальнойтолщины, направленной от схемы, использующей данный элемент, к схеме, содержащей данный элемент,оканчивающейся пустым кружком со стороны символа, обозначающего схему, содержащую данный эле­мент. Импорт с помощью спецификации REFERENCE представляется пунктирной линией отношения нор­ мальной толщины, направленной от схемы, ссылающейся на данный элемент, к схеме, содержащей данныйэлемент, оканчивающейся пустым кружком со стороны схемы, содержащей данный элемент.128
ГОСТ Р ИСО 10303-11-2000Рисунок D.17 — Полили диаграмма уровня объекта для схемы top из примера 175,показывающая ссылки между схемами (страница 1 из I)Определения, которые использованы в схеме (импоргнровдны в нес) или на которые даны ссылки изданной схемы, могут быть показаны в виде списка имен, смежного с соответствующей линией отношения исоединенного с линией отношения линией, заканчивающейся стрелкой у линии отношения. Переименован­ное определение указывается после исходного имени определения вслед за знакох> «больше* (>).П р и м е ч а н и е I — Диаграмма с двумя схемами показана на рисунке D.18. Схема top имеет интер­фейс со схемой gcon. В частности, схема top ссылается на определение surface (поверхность) и импортирует(использует) определения curve (кривая) и point (точка) из схемы gcom. Определение point в схеме top пере­именовано в node (узел).pdnt>nod* cun*Ск<*5MirflK»Рисунок D.1S — Полная диаграмма уровня схемы для примера 175 (страница I из I)Если диаграмма уровня схемы размещается на нескольких страницах, а схемные интерфейсы пересе­кают границы страниц, тогда используются символы страничных ссылок.11 р и м е ч а н и е 2 — В примере 176 задан исходный текст на языке EXPRESS для сокращенной вер­сии диаграммы уровня схемы. Диаграма EXPRESS-G схемы для этого примера показана на рисунке D.19. D.7 Полные диаграммы EXPRESS-GВ полной диаграмме EXPRESS-G должны быть точно представлены в пределах ограничений нотацииEXPRESS-G все определения, отношения и ограничения, используемые в диаграмме уровня объекта илиуровня схемы.D.7.1 П о л н а я д и а г р а м м а у р о в н я о б ъ е к т аДиа1раммы. представляющие полную диаграмму одной схемы, должны пмегь содержание, определяе­мое следующими правилами:a)Каждая страница должна иметь заголовок, начинающийся со слов: "Complete entity level diagramo f..." (Полная диаграмма уровня объекта для ...),b )Каждая страница должна быть пронумерована в виде «Page X o f N* (Страница X из N ). где N —общее число страниц, образующих диаграмму, а X — номер данной страницы.129
ГО СТ Г И С О 1 0 3 0 3 - 1 1 - 2 0 0 0 Рисунок D.19 — П олная диаграмма уровня схемы для примера 176 (страница I из 1)c) Должны быгь показаны все типы данных объектов, определенные типы данных и простые симво­лы. используемые в данной схеме.d) Символы схем нс должны применяться.e) Должны быть показаны все отношения, имена атрибутов и количества элементов. 0Должны быть показаны все атрибуты, включая явные, вычисляемые и инверсные атрибуты.g) Должны быть показаны все отношения наследования (то есть отношения подтип/суисртнп>.h) Должны быть помечены нее абстрактные (ABSTRACT) супертипы. i)Должны быть помечены все подтипы, находящиеся в отношениях ONEOF.j)Все определения из других схем, используемые в данной схеме или на которые даны ссылки изданной схемы, должны быть представлены символами скругленных прямоугольников, заключен­ных в прямоугольники соответствующего стиля (сплошные — для используемых определений, апунктирные — для определений, на которые даны ссылки из данной схемы).k) Любое переименование должно быть представлено в соответствующем символе ссылки между схе­мами.l)Все объекты, огранкченнные правилом (RULE), должны быть помечены звездочкой (*).пт) Все атрибуты, на которые наложены ограничения, должны быть помечены звездочкой (*). п) Все определенные Типы, на которые наложены ограничения, должны быть помечены звездоч­кой (*).о ) Все агрегатные типы, на которые наложены ограничения, должны быть помечены звездочкой (*).Все отношения обьект — объект, нс помеченные инверсными атрибутами, должны интерпретировать­ся как отношения с количеством элементов, равным нулю или более. Нет логическою структурирования,которое может быть выведено из отношения немаркированного подтипа, исключая случай, когда данноеотношение нс является отношением ON EOF.D.7.2 П о л н а я д и а г р а м м а у р о в н я с х е м ыДиаграммы, представляющие полную диаграмму уровня схемы, должны иметь содержание, определяе­мое следующими правилами:a)Каждая страница должна иметь заголовок, начинающийся со слов: "Complete schema level diagramo f ... " (Полная диаграмма уровня схем душ ...),b )Каждая страница должна быть пронумерована в виде «Page X o f N» (Страница X из N ), где N —общее число страниц, образующих диаграмму, а X — номер данной страницы.c ) Должны быть показаны все использованные схемы.d) Не должны быть показаны простые символы и символы объектов и типов.e ) Должны быть показаны все отношения схема — схема, представленные спецификациями USE пREFERENCE.0Имена всех определений, которые используются или на которые даны ссылки, вместе с любымиих нерснаимснованиими должны быть привязаны к соответствующей линии связи. Если к линиисвязи нс привязано никаких имен, это интерпретируется как схема объекта, используемая цели­ ком. или на нес дастся ссылка в целом.П р и м с ч а н и е — При разработке моделей или изображаемых диаграмм полезно иметь возможностьизображать диаграммы на разных уровнях абстракции. Например, на диаграмме могут быть заданы нс всеатрибуты или показаны нс все имена ролей. Такой подход вне области действия EXPRESS-G. но рекомен­дуется, чтобы уровень абстракции был согласован и документирован до начала разработки. Помимо того,рекомендуется, чтобы в заголовке диаграммы были отражены используемые уровни абстракции. 130
ГОСТ Р ИСО 10303-11-2000ПРИЛОЖЕНИЕ Е(обязательное)Заявка о соответствии реализации протоколу (ЗСРП)Является ли реализация синтаксическим анали'затором/вермфи катером языка EXPRESS? Если да. тодолжны быть даны ответы на вопросы, приведенные в E.I.Является ли реализация инструментальным средством редактирования EXPRESS-G? Если да. тодолжны быть даны ответы на вопросы, приведенные в Е.2.ЕЛ Синтаксический анализатор яш ка EXPRESSДля какого из уровней заявляется поддержка:уровень 1 — проверка ссылок:уровень 2 — проверка типов;уровень 3 — проверка значений:уровень 4 — полная проверю!.Г1 р и ы е ч а н и е — Для того чтобы заявить о поддержке конкретного уровня, должна быть обеспеченаподдержка всех нижних уровней.Каково максимальное целочисленное значение |intcger_literal|?: Какова максимальная точность действительных значений jrcaHilcral]?: Каков максимальный показатель степени действительных значений |real_litcral|?:Какова максимальная длина строки (в символах) |simplc_xiring_lilcral)?: Какова максимальная Длина строки (в восьмибитных байтах)(cncodcd_string_literal|?:Какова максимальная длина двоичных значений (в битах) |Ыпаг\ JiteralJ?:Существует ли ограничение на общее количество объявленных уникальных иден­тификаторов? Если да. го чему оно равно?:Существует ли ограничение на количество символов в идентификаторе? Если да.то чему оно равно?:Существует ли офаничение на глубину вложения областей действия? Если да. зочему он о равно?:Реализуется ли концепция многоименных областей действия, в которых могутпоявляться имена схем? Если да, то как называются эти о б л а е т действия?:Как представлена стандартная константа ’?’ |built_in_constantJ?:Е.2 Инструментальное средство редактирования EXPRESS-GДля какого из уровней заяалястсн поддержка:уровень 1 — проверка символов:уровень 2 — полная проверка.П р и м е ч а н и е — Для т о т чтобы заявить о поддержке конкретного уровня, должна быть обеспеченаподдержка всех нижних уровней.Существует ли ограничение на общее количество объявленных уникальных иден­тификаторов? Если да, то чему оно равно?:Существует ли ограничение на количество символов в и д е т ификаторс? Если да.то чему оно равно?:Существует ли офаничение на количество символов на страницу модели? Еслида, то чему оно равно?:Существует ли офаничение на количество страниц в модели? Если да. то чемуон о равно?:Реализуется ли концепция многоименных областей действия, в которых могутпоявляться имена схем? Если да, то как называются эти области действия?:Реализуется ли полная форма представления сконструированных типов данных,сокращенная форма или обе формы?:131
ГОСТ Р ИСО 10303-11-2000ПРИЛОЖЕНИЕ F(обязательное)Регистрация информационного объектаДля того чтобы обеспечить однозначную идентификацию информационного объекта в открытой сис­теме. настоящему стандарту присвоен идентификатор объекта:{ iso standard 10303 part< II) vcrsion(2) }Смысл этого значения определен в соответствии с ИСО/МЭК 8824-1 и уточнен в ГОСТ Р ИСО 10303-1.132
ГОСТ Р ИСО 10303-11-2000ПР ИЛОЖЕ НИЕ G (справочное)ОтношенияG.1 Отношения через атрибутыВ языке EXPRESS объявление в типе данных объекта атрибута, областью значения которого являетсядругой тип данных, явно устанавливает отношение между этими двумя типами данных. На это отношениеможно ссылаться как на простую связь, устанаативаюшую связь между экземпляром объявленного Объектаи одним из экземпляров представленною типа данных.Для того чтобы охарактеризовать отношения, устанавливаемые атрибутами, имеющими агрегатныезначения, определяют фундаментальный основной тип данных типа данных как неагрегатный тип данных,заданный:- фундаментальным основным типом данных неагрегатного типа данных, являющегося самим типом данных;- фундаментальным основным типом данных агрегатного типа данных, являющегося фундаменталь­ным основным типом данных этого основного тина.Когда фундаменгальным основным типом атрибута А является Т, будем говорить, что А основан на Т.Следовательно, объявление в типе данных объекта атрибута, областью значений которого является аг­регатный тип данных, основанный на фундаментальном основном гипс данных, устанавливает два вида от­ношений:- коллективное отношение между объявляемым объектом и агрегатным типом данных. Тем самым свя­зывается экземпляр объявленного объекта с множеством экземпляров фундаментального основного типа;- распределенное отношение между объявляемым объектом и фундаментальным основным типом. Темсамым индивидуально связывается экземпляр объявляемого объекта с одним или несколькими экземпляра­ми фундаментального основного типа.П р и м е ч а и н с — Данный подход отличается от подхода, принятого в некоторых других языках мо­делирования. Например, в модели объект—отношение (Entity-Relationship — ER) объекты и отношения мо­ делируются различными конструктивами.Как простое, так и распределенное отношения направлены от объявляемого объекта к некоторомудругому типу данных. Такой подход полезен при рассмотрении количества элементов в данных отношениях(с точки зрения объявляемого объекта). Количество элементов будет следующим. Если данным количествомэлементов явтясгся га : п (где 0 Z га £ п), каждый экземпляр объявленного объекта связывает нс менее га ннс более п экземпляров заданного типа данных. Если п имеет неопределенное (?) значение, то максимальноечисло экземпляров заданного тина данных, с которыми может быть связан экземпляр объявляемого объекта,не ограничено.Данный подход полезен при рассмотрении инверсного отношения, которое имеет направление, обрат­ное простому или распределенному отношению. Такое отношение неявно существует всегда, и но умолча-нию число Элементов в нем равно 0 : ?. Оно может быть явно поименованным и необязательно ограничен­ ным инверсным атрибутом (INVERSE), объяатенмым в представляемом тине данных, если представляемыйтип данных является типом данных объекта.Г1 р и м е р 163 — В этом примере существует простое отношение между типами данных объектов first иsecond, в котором second играет роль ref. Количество элементов в этом отношении с точки зрения first всегдабудет I : 1 (то есть каждый экземпляр объекта first связан строго с одним экземпляром объекта second).Относительно объекта second количество элементов в отношении будет 0 : ?, или неограниченным (тоесть один экземпляр объекта second может быть связан с нулем или более экземплярами обьекта first), этоявляется количеством элементов в инверсном отношении, принимаемым по умолчанию.ENTITY first;ref : second: lattr: STRING;END_ENTITY:ENTITY second;sattr: STRING:END_ENT1TY:Если тип данных обьекта Е имеет отношение с типом данных Т. установленное через атрибут А. этоотношение может быть изображено как: Е.А_________ \т : п )___________________ :при 0 £ m £ п и 0 s р s q. Здесь m : п является количеством элементов в прямом отношении от Е к Т. в товремя как р : q является количеством элементов в обратном отношении or Т к Е.Ниже формально описаны три вида отношений и соответствующие им количества элементов.133
ГОСТ I* ИСО 10303-11-2000G . 1.1 П р о с т о е о т н о ш е н и еПростое отношение — отношением, устанавливаемое атрибутом, представление которого являетсядругим типом данных объекта. Эти отношении устанавливаются между двумя типами данных объектов.Простое отношение всегда существует между экземпляром объявляемого объекта и нс более чем од­ним экземпляром представляющего объекта. На диаграмме это может быть показано следующим образом:Е.А: 1>{p:q\Т------------------------------------------------------------------------------ ►при 0 £ ОТ S 1 и 0 £ р £ (/.Это означает, что для каждого экземпляра Е роль А нс играется ни одним экземпляром Т или же игра­ется строго одним экземпляром Т. Для каждого экземпляра Т существует от р до q экземпляров Е. в которыхТ играет роль А.Следующие случаи значений р и q являются значащими классами ограничений, накладываемых напростые отношения между Е и Т:-есл и q - 1. то существует ограничение, заключающееся в том, что экземпляр Т нс может играть рольА более чем в одном экземпляре Е;- если I £ р. то существует ограничение, наложенное на Т. То есть для каждого экземпляра Т должносуществовать по меньшей мере р (но не больше чем q) экземпляров Е. использующих этот экземпляр Т вроли А.Для ограничения числа элементов простого отношения и соответствующего ему инверсного отноше­ния используют несколько различных конструкций EXPRESS:- случай от ~ 0 обеспечивается объявлением необязательного (OPTIONAL) атрибута А. Если А не объ­явлен как OPTIONAL, от = I;-случай q = 1 обеспечивается объявлением простого инверсного атрибута или применением к Е.Аправила уникальности, которое требует, чтобы каждая роль А в совокупности Е использовалась для различ­ ных экземпляров, то есть конкретный экземпляр Т может быть использован нс более чем одним Е.А;- другие ограничения на количество элементов в инверсном отношении выражаются путем объявленияв Т инверсного (INVERSE) атрибута в виде INVERSE 1 : SET: q| OF Е FOR А. Случай, когда р ** q * 1,может быть сокращенно записан как INVERSE 1 : Е FOR А.Ниже даны примеры простых отношений и связанных с ними ограничений на количество элементов.П р и м е р ы :1 6 4 -CIRCLE.CENTRE( 1 : 1 )( О: ?)POINT----------------------------------------------------------------►Каждая окружность CIRCLE имеет строю одну точку POINT, играющую роль се центра CENTRE.Каждая точка POINT может играть роль центра в произвольном числе окружностей (в том числе ни в од­ной). 'Эго может быть объявлено гак:ENTITY point:END_ENT1TY:ENTITY circle;centre : point;END_ENTITY;1 6 5 -PRODlJCT_VERSION.BASE_PRODUCT{1:1}( I:?)PRODUCTКаждая версия изделия PRODUCT_VERS10N имсё^шр!жПзлн<^тзл<^пк^’К О и и ^ ^ ^ 1 ^х!кш1 Сс роль ба­зового изделия BASE_PRODUCT. PRODUCT может играть роль BASE PRODUCT в любом количествеPRODUCT_VERSION, но нс менее чем в одном (существующая зависимость). 'Это может быть обънатсно так:ENTITY producl_venrion;base_pn>duct : product;END_ENTITY:ENTITY product;INVERSEversions : SET [I:?] OF product.version FOR basc_product;END_ENTITY:1 6 6 -PERSON.LUNCH{ 0 : 1 }{ 0 : ? }MEAL-------------------------------------------------------------------------►134
ГОСТ Р ИСО 10303-11-2000Каждая личность PERSON может употреблять пишу MEAL в роли завтрака LUNCH. MEAL может иг­рать роль LUNCH для лю бою числа личностей (предположим, что пиши достаточно много). Эго можетбы ть объявлено так:ENTITY person:lunch : OPTIONAL meal;END_ENTITY:ENTITY meal;calorics : e ncrgy_mca.surc;amount : weight_mcasurc;END_ENTTTY;G . 1.2 К о л л е к т и в н о е о т н о ш е н и еАтрибут, имеющий агрегатное значение типа данных объекта, устанавливает коллективное отношениемежду типом данных объекта и агрегатным типом данных, используемым для представлении атрибута.П р и м е ч а н и е — Коллективное отношение нс распространяется на экземпляры объектов, из кото­рых. в конечном счете, состаатсно агрегатное значение атрибута. Такие экземпляры участвуют в распреде­ленном отношении (см. G. I. 3).Коллективное отношение сходно с простым отношением в случае неагрегатного значения атрибута.Коллективное отношение всегда существует между экземпляром объявляемого объекта и нс более чем од­ним экземпляром представляющего агрегатного типа данных. Так же, как и в случае простого отношения,это может быть показано следующим образом:Е.А______________{m : 1)____________________ __________________ Тпри 0 £ т <. I и 0 <. /•£ s.Следующие случаи для значений г и s являются значащими классами ограничений, накладываемых наколлективные отношения между Е и Т:-есл и т = 1 . существует ограничение уникальности на коллективное значение атрибута А; - если I £ г, существует ограничение на существование Т.Также, как и в случае простого отношения, т управляется объявлением атрибута А необязательным = 0). Ограничение уникальности, когда 5 = 1 , также как и в случае простого отношения, может быть ох­вачено написанием в объявлении Е правила уникальности А. Иными способами г и х нс могут быть ограни­чены.Ниже даны примеры коллективных отношений и связанных с ними ограничений на количество эле­ментов:П р и м е р ы167 -POLY_CURVE.COEF{ 1 : 1 }( 0: ?[LIST (1 : ?J OF REAL--------------------------------------------------------------►Каждая поликривая POLY_CURVE имеет список значений действительного типа, играющих роль ко­эффициентов СОЕР. Каждый список действительных значений LIST J l : ?) OF REAL, может играть рольCOEF в произвольном количестве POLY_CURVE (включая их отсутствие). Это может быть объявлено так:ENTITY poly_curvc;c o c f: LIST 11: ?| OF REAL;END_ ENTITY168 -LOOP.EDGES{ ( ) : ! ){0 : 1}LIST (I : ?] OF EDGESКаждый контур LOOP может иметь список ребер EDGE, играющий роль ребер EDGES. Каждый спи­сок ребер LIST |1 : ? | OF EDGE может играть роль EDGES нс более чем в одном экземпляре LOOP. 'Этоможет быть объявлено так:ENTITY loop:edges : OPTIONAL LIST |1 : ?| OF edge;UNIQUEuni : edges:END_ENTITY:ENTITY edge;END_ENTITY;135
ГОСТ Г ИСО 10303-11-2000G.1.3 Р а с п р е д е л е н н о е о т н о ш е н и еВ дополнение к коллективному отношению, рассмотренному выше, атрибут, имеющий агрегатноезначение, устанавливает распределенное отношение между типом данных объекта и фундаментальным ос­новным типом агрегатного типа данных, используемым для представления атрибута.Распределенное отношение индивидуально связывает экземпляр объявленного объекта с произволь­ным ЧИСЛОМ экземпляров представляющего фундаментального основного типа. Количество элементов дан­ ного отношения ограничено количеством элементов агрегатного типа (ов) данных, используемого для пред­ставления атрибута. Обозначив фундаментальный основной тип данных атрибута как FUND(T). распреде­ленное отношение можно показать как:Е.А{* : /)(p:q\FUND(T)----------------------------------------------------------------------------------►при 0 £ * £ / и О £ / > £ < 7 .'Это означает, что для каждого экземпляра из Е атрибут А состоит из экземпляров FUND(T). заклю­ченных между к и I. Экземпляр FUND(T) может появиться в роли А между экземплярами Е от р д о q.Следующие случаи для значений р и q являются значащими классами ограничений, накладываемых нараспределенное отношение между Е и FlfND(T):-есл и q «= 1. существует ограничение, что один экземпляр FUND(T) нс может появиться в роли А б о ­лее чем в одном экземпляре Е;-если 1 £ р, существует ограничение на существование FL’ND(T). То есть для каждого экземпляраFUND(T) должно существовать по меньшей мере р (но нс более q) экземпляров Е, которые содержат экзем­пляр FUND(T) в роли А.Для задании ограничений на количество элементов в распределенном отношении и в соответствующемему инверсном отношении используются следующие конструкции EXPRESS:- значения к и / задаются указанием границ агрегатного типа данных, используемою для представле­ния А. В простейшем случае, тип данных атрзгбута будет просто SET (k : I] OF FUND(T) (иди подобнымобразом могут быть Записаны типы BAG или LIST).П р и м е ч а н и е I — При гаком подходе к отношениям не существует различия между одномернымии многомерными агрегатными значениями;- случай q — I для распределенною отношения не может бьггь задан применением правила уникально­сти к атрибуту Е.А. Вместо этого должен быть объявлен инверсный атрибут и наложено ограничение наFUND(T) в визе INVERSE I : Е FOR А:-другие ограничения на количество эл с м с т о в в инверсном отношении вырнжаюлси путем объявлениив FUND(T) инверсного атрибута в виде INVERSE 1 : SET (р : q) OF Е FOR А. Случай, когда р - q “ 1, мо­жет быть сокращенно записан как INVERSE 1 : Е FOR А.Ниже даны примеры распределенных отношений и связанных с ними ограничений на количествоэлементов.П р и м е р ы169 — В противоположность примеру 167.POLY_CURVE.COEF{1 : ?}( 0 : ? }OF REALПоликриваи POLY_CURVE имеет по меньшей мерс одно действительное число, играющее роль коэф­фициента COEF. Конкретное действительное число может был ь использовано в атрибуте COEF в неограни­ ченном количестве P OLVCLRVE (включая случай, когда число нс используется ни в одной поликривой).Эго может быть обьявлено так:ENTITY poly_curve;c o e f : LIST |1:?| OF REAL;END_ENTITY:170 — Сравните этот пример с примером 168.LOOP.EDGES(0 : ?}{2:2}EDGESКонтур LOOP может состоять из любого числа ребер EDGE (включая случай, когда число ребер равнонулю). EDGE лагжно использоваться строго в двух различных LOOP. Эго может быть обьяалено так:ENTITY loop:edges : OPTIONAL LIST |1 : ?| OF edge:UNI QUEuni : edges;136
ГОСТ Р ИСО 10303-11-2000END_ENTITY:ENTITY edge;INVERSE;loops : SET |2 : 2| OF loop FOR edges;END_ENTITY:G. 1.4 И н в е р с н ы й а т р и б у тКаждому отношению, установленному атрибутом, соответствует неявное инверсное отношение. Поумолчанию инверсное отношение игнорируется, то есть на него нс могут делаться ссылки, и на его количе­ ство элементов ограничения не накладываются. Правило уникальности, наложенные на атрибут, объявляю­щий простое отношение, ограничивает количество элементов в инверсном отношении. EXPRESS предос­тавляет конструкции, позволяющие поименовать и ограничить инверсные отношения. Данные конструкциичастично были описаны в пунктах, посвященных другим классам отношений, а в данном пункте дастся ихсводное описание.Идентификатор инверсному отношению присваивается путем объявления инверсного (INVERSE) ат­рибута. Тип инверсного атрибута может ограничить количество элементов данного инверсного отношения.Рассмотрим конкретные конструкции EXPRESS и их влияние на количество элементов в инверсномотношении. Допустим, что для обьскта Е объявлен атрибут А типа данных Т. Если Т является агрегатнымтипом данных, его фундаментальным основным типом будет FUND(T). Представляющий объект (FUND(T),или Т. соответственно) обозначим R. Допустим, что инверсное отношение объявляется инверсным атрибу­ том I в R.Если А является неагрегатным атрибутом, с которым связано правило уникальности, простое отноше­ние ограничено таким образом, что среди совокупности Е каждый А уникален. Следовательно, экземпляр Тможет играть роль А нс более чем в одном экземпляре Е. то есть, q = 1. Это эквивалентно записи INVERSEI : SET [0 : 1| OF Е FOR А.Если А является агрегатным атрибутом, с которым связано правило уникальности, на коллективноеотношение наклатываеген ограничение s = I. То есть экземпляр Т (который яаляегся агрегатным значени­ ем) можег играть роль А нс более чем в одном экземпляре Е. На распределенные отношения ограниченийнет: экземпляр R может играть А в любом числе экземпляров Е.Если 1 объявлен как INVERSE 1 : BAG (p:q) OF E FOR А. то количество элементов в отношении, ин­версном простому или распределенному отношению, ограничено соответствующими значениями р и q. Тоесть экземпляр R может трать роль А и экземплярах Е от р до q. Поскольку мультимножество BAG допус­кает натичис экземпляров с эквивалентными элементами, конкретный экземпляр из R может несколько разнгралъ рать А в конкретном экземпляре из Е. Эго имеет смысл только в том случае, когда Т является агре­ гатным типом данных, допускающим наличие повторяющихся элементов.Если I объявлен как INVERSE I : SET |p:ql OF E FOR А. то количество элементов в отношении, ин­версном простому или распределенному отношению, ограничено соответствующим и значениями р и q. Тоесть экземпляр из R может играть роль А в экземплярах Е от р до q. Поскольку набор SET нс допускает на­личия экземпляров с эквивалентными элементами, конкретный экземпляр из R может нс играть даннуюроль более одного раза в конкрегном экземпляре из Е.Если I объявлен как INVERSE I : Е FOR А. это равносильно объявлению как SET 11:11 OF Е. То естькаждый экземпляр из R должен играть рать А строго в одном экземпляре из Е.Дюбос объявление I как BAG или SET с р 2 I или отличным or BAG или SET, устанавливает ограни­чение на существование R: требуется, чтобы любой экземпляр из R играл роль А в. ио меньшей мере, одномэкземпляре из Е. G.2 Отношения ггодтнп/супертипОбъявление подтипа внутри обьскта определяет отношение между объектом подтипа и объктами ука­занных сунсртнпов.Для заданного объекта супертипа Р. имеющего подтип С, отношение может быть изображено следую­щим образом:{л: I){I : Ипри Й £ й 2 I. 'Эго означает, что для каждого экземпляра Р существует ноль или один экземпляр С. Для каж­дого экземпляра С существует один экзехтляр Р.В случае, когда Р является абстрактным сунсргипом. отношение будет следующим:Р( I - D: 1}СЭто означает, что для каждого экземпляра Р. существует один экземпляр С. Для каждого экземпляра Ссуществует один экземпляр Р.137
ГОСТ Г ИСО 10303-11-2000ПРИЛОЖЕНИЕН(справочное)Модели EXPRESS для иллюстрации примеров EXPRESS-GВ данном приложении приведены тексты на языке EXPRESS для нескольких примеров, использован­ных для иллюстрации моделирования с помощью EXPRESS-G.Эли примеры нс являются реальными или "правильными'*. В частности, модели из этих примеров нсимеют никакого отношения к моделям из других стандартов серии ГОСТ Р ИСО 10303.11.1 Пример модели единичной схемыМодель из примера 171 в основном показывает, что личность может быть мужчиной или женщиной.Каждая личность имеет определенные характеристики, такие как имя и фамилия, дата рождения, цвет во­лос, а также может иметь ноль или более детей (которые, конечно, также яатяются людьми). Мужчина мо­жет быть женат на женщине, в этом случае, женщина имеет инверсное отношение с мужчиной.Возраст (age) личности является вычисляемым атрибутом, который вычисляется с помощью функцииyears, определяющей количество лет между датой рождении, введенной в качестве параметра, и текущей датой.Личность (person) имеет инверсный атрибут, который связывает детей со своими родителями. Иижняя Гранина этого инверсного атрибута равна 0 на тот случай, когда невозможно обеспечить полное семенноедерево.П р и м е ч а н и е — Если бы существовал явный атрибут parents (родители), а атрибут children (ребе­нок) был бы инверсным атрибутом, семейное дерево необходимо было бы продлевать назад во времени добесконечности.П р и м е р 171 — Модель единичной EXPRESS-схсмы.SCHEMA example:TYPE date - ARRAY |l : 3| OF INTEGER;END_TYPE;TYPE hair type - ENUMERATION OF(blonde,brmvn,black,red.white,bakl):END_TYPE:ENTITY personABSTRACT SUPERTYPE OF (ONEOF (female, male)); first_namc: STRING; last name: STRING; nickname: OPTIONAL STRING;birth_datc: date;children: SET |0 : ?1 OF person: hair: hair_tvpc;DERIVEage : INTEGER :» vcarsINVERSEparents : SET |0 : 2| OF person FOR children:END_ENTITY:ENTITY femaleSUBTYPE OF (person);INVERSEhusband : SET (0 : I] OF male FOR wife; — м у ж не обязателен!END_ENTITY:ENTI TY maleSUBTYPE OF (person);wife : OPTIONAL female;END_ENT1TY:FUNCTION ycarsfpast : date) : INTEGER:(* Данная функция подсчитывает число лет между предыдущей и текущей датами *)END_FUNCTION;END_SCHEMA:138
ГОСТ Р ИСО 10303-11-200011.2 Шаблон ОТЫОВ1 СНИНВ примере 172 приведена простая модель для того, чтобы показать некоторые из определений н отноше­ний из EXPRESS. Модель содержит объекты супергинов. объекты подтипов и объекты, нс яатяюпитсся нитем, ми другим. Также показаны два определенных типа данных, выбираемый тип и несколько простых типов.П р и м е р 172 — Простой объект из EXPRESS и модель отношений типа.SCHEMA ctr,ENTITY super; END_ENTITY;ENTI TY sub_lSUBTYPE OF (super);attr: from_ent:END_ENTITY;ENTITY sub_2SUBTYPE OF (super);p ick : choice;END_ENT1TY:ENTITY an_cntini : INTEGER;END_ENTITY:ENTITY I'rom cntdescription: OPTIONAL to_cnt; values: ARRAY |! : 3| OF UNI QUE REAL;END_ENTITY:ENTITY to_cnttext : strings;END_ENTITY:TYPE choice - SELECT(an_cnt,name);END_TYPE;TYPE name = STRING:END_TYPE;TYPE strings - LIST 11 ; ?) OF STRING;END_TYPE;END.SCHEMA;11.3 Простое дерево нодтип/супсртинEXPRESS позволяет определять очень сложные деревья (и сети) подпшов/супергипов. Дерево, пока­занное в примере 173. относительно простое.П р и м е р 173 — Дерево подтип/супсртип в языке EXPRESS.SCHEMA simplc_trces;ENTITY super; END_ENTITY:ENTITY sublSUBTYPE OF (super);END_ENTITY:ENTITY sub2ABSTRACT SUPER OF (ONEOF(sub3,sub4))SUBTYPE OF (super);END_ENTITY:ENTITY' sub3SUBTYPE OF (sub2):END_ENTITY:139
ГОСТ Р ИСО 10303-11-2000ENTITY suMSUBTYPE OF (sub2):END_ENTITY;ENTITY subSSUBTYPE OF (super);END_ENTITY:END_SCHEMA;11.4 Переобышленме атрибутаВ EXPRESS допускается нсрсобьявлсние наследуемых атрибутов, обеспечивающее совместимость но­вых типов атрибутов. В примере 174 покатаны некоторые допустимые формы переобъявления:- тип персобъяпленного атрибута является подтипом наследуемого типа; - тип псрсобъявлснного атрибута является совместимым простым типом; - значение иерсобъянленного атрибута является обязательным, в то время как наследуемое значениебыло необязательным.П р и м е р 174 — Псрсобьявлснис атрибута в EXPRESS.ENTITY sup_a;attr: sup b;END_ENTITY:ENTITY sub_a:SUBTYPE OF (sup_a); SELF\sup_a.attr: sub_b;END_ENTITY:ENTITY sup_b;num : OPTIONAL NUMBER;END_ENTITY;ENTITY sub_bSUBTYPE OF (sup_b); SELF\sup_b.iium : REAL:END_ENTITY;11.5 Миогоехсмныс модели Модели в EXPRESS состоят по меньшей мерс из одной схемы. В примере 175 показана модель, с о ­стоящая из двух схем.П р и м е р 175 — Двухсхемная модель в EXPRESS.SCHEMA geom;ENTITY les; END_ENTITY:ENTITY surface; END_ENTITY;ENTITY curve; END_ENTITY:ENTITY' point: END_ENT1TY;END_SCHEMA; - geomSCHEMA top:USE FROM geom(curve,point AS node);REFERENCE FROM geom(surface);ENTITY face;bounds: LIST (I : ?1 OF loop:loc: surface:ENDJSNTITY;140
ГОСТ Р И СО 10303-11-2000ENTITY loopABSTRACT SUPERTYPE OF;(ONEOF(cloop. vloop));END_ENT!TY;ENTITY cloopSUBTYPE OF (loop);bound : LIST 11 ; ?| OF edge;EN IDENTITY;ENTITY vloopSUBTYPE OF (loop);bound : vertex;END_ENTITY;ENTITY edge;start: vertex;end: vertex;loc: curve;END_ENTITY;ENTITY vertex;loc : node:END_ENTITY;END_SCHEMA; - topБолее сложный набор схем задан в примере 176. Следует иметь ввиду, что внутри каждой из объяв­ленных схем существуют объекты, типы и другие определения, которые здесь нс показаны для экономииместа.II р и м с р 176 — Многосхемная модель в EXPRESS.SCHEMA stuff:END .SCHEM A ;SCH EMA whatsits:REFERENCE FROM stuff:END_SCHEMA;SCHEMA widgets;USE FROM whosits; USE FROM gadgets: REFERENCE FROM things:END_SCHEMA:SCHEMA things;END_SCHEMA;SC H E MA gadgets;USE FROM stuff; REFERENCE FROM things;END .SCHEM A ;SCHEMA w host is;REFERENCE FROM stuff: REFERENCE FROM whatsits;END .SCHEM A ;HI
ГОСТ Р ИСО 10303-11-2000ПРИЛОЖЕНИЕ J(справочное)Библиография|1 | ИСО/М ЭК 6429—92" Информационная технология. Представление числовых значений в строках симво­лов для обмена информацией|2 | ИСО ГО/9007—87" Системы обработки информации. Концепции и терминология для концептуальнойсхемы и информационной базы(3| KAMADA. Т. and KAWAI. S.: «А General Framework for Visualizing Abstract Objects and Relations». ACMTransactions on Graphics. January 1991. vol. 10. no. I. p. 1—39(41 WIRTH. N.; «What can we do about the unnecessary diversity o f notation for syntactic definitions?». Communi­cations o f the ACM. November 1977, vol. 20, no. 11, p. S22* Оригинал стандарта ИСО — во ВНМИКИ Госстандарта России.Предметный указательabs (функция) ....................................................................7.2, 15.1abstract (зарезервированное слово).7.2. 9.2. В.З. D.5, D.7, G.2асов (функция)...........................................7.2. 15.2aggregate (зарезервированное слово)...........7.2, 8.5. 9.5alias (зарезервированное слово)7.2. 10.3, 13. 13.2andor (зарезервированное сл о в о )....................................... .......................... 7.2. 8.4. 9.2, В.2., В.З, приложение С. D.5. array (•зарезервированное сл о в о )........................................ ................................ 7.2. 8.2. 9.2. 9.5, 12.6. 15. В.2.. В.З. D.5.as (зарезервированное слово)............................................... .................................................................7.2. 11, приложение С.asin (функция)........................................................................... ................................................................................... '......... 7.2, 15.3 atan (ф унк ция).......................................................................... .............................................................................................. 7.2. 15.4 bag (зарезервированное слово)............................................ .................... 7.2, 8.2. 9.2, 9.5, 12.6. 15. D.5. приложение G begin (зарезервированное с;н»во)........................................ ............................................'........................ ............. .'......... 7.2. 13.5 binary (зарезервированное слово)....................................... .......................................................... 7.2. 8.1. 9.2. 12. 12.3, 15.25 blength (функция)..................................................................... ................................................................ ............................. 7.2. 15.5 boolean (зарезервированное слово).................................... .......................................................... 7.2. 8.1. 9.2. 12.2. 14. 15.25 by (зарезервированное слово)............................................... case (зарезервированное слово)........................................... .......................................................................................7.2. 13, 13.4 constant (зарезервированное сл ово)................................... ................................................................................................ 7.2. 9.4 const с (конеганга).................................................................. .............................................................................................. 7.2. 14.1 cos (функция)............................................................................ ..............................................................................................7.2, 15.6 derive (зарезервированное слово)....................................... .................................................................................................7.2, 9.2 div (зарезервированное с л о в о )............................................ ..............................................................................................7.2. 12.1 else (зарезервированное сл о в о )........................................... .............................................................................................. 7.2. 13.7 end (зарезервированное сл о в о )........................................... .............................................................................................. 7.2. 13.4 entity (зарезервированное сл о в о )....................................... .......................................................... 7.2. 8.3, 9.2. 10.3. D.2, D.5 enumeration (зарезервированное слово)........................... ...................................................................7.2, 8.4. 12.6. D.2. D.S escape (зарезервированное сл ово)...................................... .......................................................................................7.2. 13. 13.6 exists (функция)......................................................................... ......................................................................................7.2. 9.2. 15.7 схр (функция)............................................................................ .............................................................................................7.2, 15.8false (константа)....................................................................... ..............................................................................................7.2, 14.3142
ГОСТ Р ИСО 10303-11-2000fixed (зарезервированное слово)................................................................................................................................... 7.2. 8.1. 9.2 for ( зарезервированное слово)............................................................................................................................................ 7.2. 13.2 format (функция)......................................................................................................................................................................7.2, 15.9 from (зарезервированное слово)................................................................................................................. „ 7 .2 , приложение С function (зарезервированное сл ово)............................................................................................7.2, 9.5, 10.3, 13. 13.10, D.2generic (заре зервированное сл ово)................................................................................................................... 7.2, 8.5, 9.5. 12.2hibound (функция)............................................................................................................................................................... 7.2. 15.10 hiindex (функция)..........................................................................................................................................................7.2. 9.5, 15.11 if (зарезервированное слово)........................................................................................................................................ 7.2. 13. 13.7 in (зарезервированное слово)...............................................................................................................7.2, 12.1. 12.2. 12.5. 12.6 insert (процедуре)...................................... ................................... ...............................................................................7.2, 13.8, 16.1integer (зарезервированное слово)....................................................................................................... 7.2, 8.1, 9.2. 12.1, 15.25inverse (зарезервированное сл о в о )....... .............................................................................................. 7.2, 9.2. приложение G length (функция)......................................................................................................................................................... 7.2, 12.2. 15.12 like (зарезервированное слово)........................... .................................................................................................... 7.2, 12.1, 12.2 list (зарезервированное слово).................................................................. 7.2. 8.2. 9.2. 9.5, 12.6. 15.10 — 15.25, D .5, G.1 lobound (функция)........................................................................................................................................................7.2. 9.5, 15.13 local (зарезервированное слово)........................................................................................................................................... 7.2, 9.5 log (ф ункция)................................................................................................................................................................ 7.2, 9.5, 15.14 loglO (функция)....................................................................................................................................................................... 7.2, 15.16 Ipg2 (функция)..........................................................................................................................................................................7.2. 15.15 logical (зарезервированное слово)......................................................... 7.2, 8, 9.2, 9.5, 12. 12.2, 12.6, 13.7 — 14.7, 15.25 loindex (функция).......................................................................................................................................................... 7.2. 9.5, 15.17 mod <зарезервированное сл ово)......................................................................................................................................... 7.2, 12.1 not (зарезсрвированнос слово)................................................................................................................................ 7.2. 12.1. 12.3 number (зарезервированное слово).............................................................................7.2, 8.1. 9.2. 12.1, 15.23 — 15.25. D.5nvl (функции)................................................................................................................................................................ 7.2. 9.2, 15.18 odd (ф ункция)....................................................................................................................7.2, 15.19o f ( заре зсрвированнос слово)............................................................................................................................................... 7.2. 11.4 oneof (зарезервированное сл о в о ).........................................................................7.2. 9.2. В.2, приложение С, D.5 — D.7 oneof: символ EXPRESS-G..........................................................................................................................................................D.5 optional (зарезервированное сл о в о )............................................................................................. 7.2, 8.2, 9.2. 12.6. 15.7, G.I or (зарезервированное слово)................................................................................................................................... 7.2. 12.1. 12.4 otherwise ( зарезервированное слово)...................................................................................................................................7.2, 13.4 pi (констазгга)............................................................................................................................................................................. 7.2, 14.4 procedure (зарезервированное слово)......................................................................................... 7.2, 9.5. 10.3, 13. 13.10. D.2 query (зарезервированное слово).................................................................................................................. 7.2, 10.3. 12.5. 12.6real (зарезервированное с л о в о ).......................................................................................... 7.2, 8. 8.4, 9.2. 12.1, 14, D.5, G.1 reference (зарезервированное слово)..............................................................................7.2. II. 15.20, 15.25, D.4. D.5, D.7 remove (процедура)....... ......................................................................................................................................................... 7.2, 16.2 repeat (зарезервированное слово)..... ...................................................................................... 7.2, 10.3, 12.6. 13, 13.6 — 13.9 return (зарезервированное слово).................................................................................................................... 7.2. 9.5, 13. 13.10 rolcsof (функция)........................................................................................................................................................ 7.2. 10.3, 15.20 rule (зарезервированное сл о в о )..................................................................................... 7.2, 9.5, 9.6. 10.3. 13, D.2. D.5, D.7schema (зарезервированное слово).................................................................................................................. 7.2, 9.3. 10.3. D.2 select ( зарезервированное слово)............................................................................................................ 7.2. 8.4. 11.4. D.2, D.5 self (консланла).........................................................................................................................................................7.2, 9.1. 9.2. 14.5 set (зарезервированное слово).......................................................7.2, 8.2. 9.2. 9.5, 12.6, 15.10 — 15.17, 15.25. D.5. G.I sin (функция)..........................................................................................................................................................7.2, 15.21sizeof (функция)..............................................................................................................................................7.2, 12.2, 15.22, 15.26skip (зарезервированное слово)................................................................................................................................ 7.2. 13. 13.11 sqrt (ф ункция)..........................................................................................................................................................................7.2, 15.23 string (зарезервированное слово)................................. .................................................7.2, 8. 8.1, 9.1. 9.2, 11.4. 12.5. 15.25 subtype (зарезервированное слово).......................................................................................................................................7.2. 9.2 supertype (зарезервированное слово)................... .................................................................................................... 7.2, 9.2. 11.4 tan (функция)........................................................................................................................................................................... 7.2, 15.24 then (зарезервированное сл о в о ).....................................7.2, 13.7to (зарезсрвированнос слово)........................................................................................................................................................ 7.2 true (консганга).......................7.2, 14.6type (зарезсрвированнос слово)................................................................................................................7.2. 8.3. 9.1. 10.3, D.2 tvpcof (функция)...... .............7.2. 15.25unique (зарезервированное слово)........................................................................................................... 7.2. 8.2. 9.2. 12.2, D.5 unknown (консганга).............................................................................................................................................................. 7.2. 14.7143
ГОСТ I* ИСО 10303-11-2000until (зарезервированное слово)...... 7.2. 13.9use (зарезервированное сл ово)..7.2, 10.3, 15.20. 15.25. D.4. О.6. D.7used in (функция)..............7 .2 . 15.26value (функция).........................................................7.2, 15.27value_in (функция).......................................................... 7.2. 12.2. 15.28valuc_uniquc (функция).........................................7.2, 8.2, 12.2. 15.29var (зарезервированное сл о в о ).................................. 7.2. 9.5, 12.7when: (зарезервированное слово)........................7.2. 9.1, 9.2, 13, D.5while (зарезервированное слово)...........................7.2, 13.9хог (зарезервированное сл ово)................................... 7.2. 12.1, 12.4абстрактный супертип: символ EXPRESS-GD.5вилимоезь...................................................................10выбор: символ EXPRESS-G.0 .2 . D.5вычисление: символ EXPRESS-G......... D.5диаграмма: абстрактная........................... D.7диаграмма: полная..................................... D.7диаграмма: уровень объекта.D.5. D.7диаграмма: уровень схемы..........0 .6 , D.7инверсия: символ EXPRESS-G......... D.5интерфейс между схемами........ D.5количество элементов.........D.5, G .Iконкретизация........................... 9, 9.2набор символов EXPRESS,.7.1необязательный атрибут: символ EXPRESS-G. D.2неопределенное значение........................................14.2нотация......................................................................................... .........область действия......................................................................................................................... 9.2, 10. 10.1объект: символ EXPRESS-G ........................................................................................................ 0 .2 , 0 .5ограничение: символ EX PR ESS-G ............................................................................................ 0 .2 , 0 .5апреле ленный тип: символ EXPRESS-G0 2 0 .5отношение между схемами: символ EXPRESS-G0 3отношение наслелоияния" символ FXPRESS-G0 3 0 5переименование' символ EXPRESS-G0 4 0 5переобъя влен не атрибута.........................................................................................................................0 .5нсрсобъянлснный атрибут........................................................................................................................ 9.2переобъявленный атрибут: символ EXPRESS-G........................................................................... D.5перечисление: символ EXPRESS-G........................................................................................... 0 .2 . 0 .5правило: символ EXPRESS-GО 2нронелура' символ EXPRESS-GО 2символ....................................................................................................................................... Приложение Осовместимость по присваиванию........................................................................................;................. 13.3ссылка.............................................................................................................................................................0 .5ссылка между схемами: символ E X PR E SS-G ........................................................................0 .4 . 0 .5стили линий: EX PR ESS-G ...........................................................................................................0 .2 . О.Зстраничная ссылка: символ EXPRESS-G0 4 0 7схема: символ EXPRESS-G....................................................................................................................0 .2функция: символ EXPRESS-G..............................................................................................................D.2144
ГОСТ Р ИСО 10303-11-2000У Д К 656.072:681.3:006.354О К С 2 5 .0 4 0 .4 0П 87О К С Т У 4002Ключевые слова: автоматизация, средства автоматизации, прикладные автоматизированные сис­темы. промышленные изделия, данные, представление данных, обмен данными, искусственныеязыки, язык EXPRESS, описаниеРедактор В.П. ОгурцовТехнический редактор О.И. ВласоваКорректоры В. С. Черная, В. И. КануркинаКомпьютерная верстка А.С. Юфина И м . л и п . S t 0 2 3 5 4 a t 1 4 .0 7 .2 0 0 0 . С д а н а в н а б о р 2 3 .1 1 . 2 0 0 0 . П о д п и с а н о и п е ч а т ь 0 5 . 0 2 .2 0 0 1 . У с л . н е ч л . 1 7 . 2 1 . У ч . - м з д л . 1 7 .0 0 . Т и р а ж 3 0 0 а к з . С 3 3 1 . З а к . 2 S 3 . И П К И з д а т е л ь с т в о с т а н д а р т а в . 1 0 7 0 7 6 . М о с к в а , К о л о д е з и и й п е р . . 1 4 . Н а б р а н и в И з д а т е л ь с т в е н а П Э В М . К а л у ж с к а я т и п о т р д ф и я с т а н д а р т о в . 2 4 К 0 2 1 . К а л у г а , у д . М о с к о в с к а я , 2 5 6 П Л Р Ti- 0 4 0 1 3 8145ГОСТ Р ИСО 10303-11-2000

ГОСТ Р ИСО 10303-11-2000 Г О С У Д А Р С Т В Е Н Н Ы Й С Т А Н Д А Р Т Р О С С И Й С К О Й Ф Е Д Е Р А Ц И И Системы автоматизации производства и их интеграция П Р Е Д С Т А В Л Е Н И Е Д А Н Н Ы Х О Б И З Д Е Л И И И О Б М Е Н Э Т И М И Д А Н Н Ы М ИЧ а с т ь 1 1 Методы описания Справочное руководство по языку EXPRESSИздание официальное77 /1 00 20 - 7 З БГОССТАНДАРТ РОССИИМ о с к в арыночная стоимость недвижимости
ГОСТ Г ИСО 10303-11-2000Предисловие1 РАЗРАБОТАН Всероссийским научно-исследовательским институтом стандартизации(ВНИИстандарт) совместно с НИЦ CALS-технологий «Прикладная логистика»ВНЕСЕН Техническим комитетом по стандартизации ГК 431 «CALS-технологии*2 ПРИНЯТ И ВВЕДЕН В ДЕЙСТВИЕ Постановлением Госстандарта России от 14 ноября2000 г. № 293-ст3 Настоящий стандарт представляет собой аутентичный текст международною стандартаИСО 10303-11-94 «Системы автоматизации производства и их интеграция. Представлеиие данныхоб изделии и обмен этими данными. Часть 11. Методы описания. Справочное руководство поязыку EXPRESS* с учетом поправки 1—994 ВВЕДЕН ВПЕРВЫЕ© ИНК Издательство стандартов, 2001Настоящий стандарт не может быть полностью или частично воспроизведен, тиражировани распространен в качестве офи пиалы «ото издания без разрешения Госстандарта РоссииII
ГОСТ Р ИСО 10303-11-2000Содержание1 Область применения............................................................................................................................................. 12 Нормативные ссылки........................................................................................................................................... 1 3 Определения........................................................................................................................................................... 13.1 Термины, определенные в ГОСТ Р ИСО 10303-1..................................13.2 Термины, определенные в ИСО/МЭК 10646-1..................................................................................... 2 3.3 Другие определения..................................................................................................................................... 24 Требования соответствия................................................................................................................................... 24.1 Формальные спецификации, написанные на EXPRESS..................................................................... 2 4.2 Реализации E X PR E SS................................................................................................................................. 35 Фундаментальные принципы .........................46 Синтаксис определения язы ка.......................46.1 Синтаксис спецификации......................................................................................................................... 5 6.2 Специальная символьная нотация.......................................................................................................... 57 Основные элементы языка................................................................................................................................. 67.1 Набор символов............................................................................................................................................. 6 7.2 Зарезервированные слова ............................................................................................................................ 8 7.3 Знаки (symbols)............................................................................................................................................... 9 7.4 Идентификаторы.............................................................................................................................................10 7.5 Литералы............................................................................................................................................................ 108 Типы данных............................................................................................................................................................ 128.1 Простые типы данных................................................................................................................................... 12 8.2 Агрегатные (сборные) типы данных..........................................................................................................15 8.3 Поименованные типы данны х....................................................198.4 Созданные типы данных.............................................................................................................................. 20 8.5 Обобщенные типы данных........................................................228.6 Классификация использования типов данных......................................................................................229 Объявления................................................................................................................................................................239.1 Объявление т и п а ...........................................................................239.2 Объявление объекта...................................................................................................................................... 24 9.3 С хем а..................................................................................................................................................................39 9.4 Константа..........................................................................................................................................................40 9.5 Алгоритмы........................................................................................................................................................40 9.6 Правило..............................................................................................................................................................45Ю Область действия и видимость.........................................................................................................................4710.1 Правила областей действия.......................................................................................................................47 10.2 Правила видимости...................................................................................................................................... 48 10.3 Явные правила для элем ентов.................................................................................................................4911 Спецификация интерфейса...............................................................................................................................5411.1 Спецификация интерфейса U SE ............................................................................................................. 5411.2 Спецификация интерфейса REFERENCE............................................................................................. 5411.3 Взаимодействие USE и REFERENCE................................................................................................... 5511.4 Неявные интерфейсы.................................................................................................................................. 5512 Выражение.............................................................................................................................................................. 5712.1 Арифметические операторы .....................................................................................................................58 12.2 Операторы отнош ен и й ...............................................................................................................................59 12.3 Двоичные операторы.................................................................................................................................. 66 12.4 Логические операторы................................................................................................................................ 6712.5 Строковые операторы.................................................................................................................................6812.6 Агрегатные операторы............. ................................................................................................................. 69 12.7 Ссылки..............................................................................................................................................................74 12.8 Обращение к функции................................................................................................................................ 76 12.9 Инициализатор агрегатов...........................................................................................................................77 12.10 Оператор конструирования экземпляра сложного объекта............................................................7812.11 Совместимость типов................................................................................................................................ 7813 Исполняемые операторы.................................................................................................................................... 7913.1 Пустой оператор............................................................................................................................................ 80 13.2 Оператор псепдоимени...............................................................................................................................80III
ГОСТ I* ИСО 10303-11-200013.3 Оператор присваивания.............................................................................................................................80 13.4 Оператор C A S E ............................................................................................................................................ 81 13.5 Составной оператор.................................................................................................................................... 82 13.6 Оператор выхода.......................................................................................................................................... 82 13.7 Оператор I f ... Then ... Else...............................................................................8213.8 Оператор вызова процедуры.....................................................................................................................83 13.9 Оператор ц икла.............................................................................................8313.10 Оператор возврата...................................................................................................................................... 85 13.11 Оператор пропуска.................................................................................................................................... 8514 Встроенные константы...................................................................................................................................... 8614.1 Константа е ................................................................8614.2 Неопределенная...................................8614.3 Л ож ь..................................................................................................................................................................8614.4 П и ......................................................................................................................................................................8614.5 Self......................................................................................................................................................................86 14.6 Истина..............................................................................................................................................................8614.7 Неизвестная.................................................................................................................................................... 8615 Встроенные ф ункции.......................................................................................................................................... 8615.1 Abs — арифметическая функция............................................................................................................. 86 15.2 ACos — арифметическая ф ункция........................................................................................................86 15.3 ASin — арифметическая функция..........................................................................................................87 15.4 АТап — арифметическая ф ункция........................................................................................................87 15.5 Blengih — двоичная ф ункция................................................................................................................. 87 15.6 Cos — арифметическая функция.............................................................................. ............................87 15.7 Exists — общая функция........................................................................................................................... 87 15.8 Ехр — арифметическая функция............................................................................................................87 15.9 Format — общая ф ун к ци я ....................................................................................................................... 88 15.10 HiBound — арифметическая функция................................................................................................ 90 15.11 Hilndex — арифметическая функция................................................................................................... 90 15.12 Length — строковая функция............................................................................................................... 90 15.13 LoBound — арифметическая функция............ ................................................................................... 91 15.14 Log — арифметическая функция..........................................................................................................91 15.15 Log2 — арифметическая функция........................................................................................................91 15.16 Log 10 — арифметическая функция......................................................................................................91 15.17 Lolndex — арифметическая функция..................................................................................................91 15.18 NVL — функция нулевого значения..................................................................................................92 15.19 Odd — арифметическая ф ункция......................................................................................................... 92 15.20 RolesOf — общая функция.......................................................................................................................92 15.21 Sin — арифметическая ф ункция........................................................................................................... 93 15.22 SizeOf — агрегатная функция.................................................................................................................93 15.23 Sqrt — арифметическая функция........................................................................................................... 94 15.24 Tan — арифметическая функция........................................................................................................... 94 15.25 TypeOf — общая ф ункция.......................................................................................................................94 15.26 Usedln — общая ф ункция.......................................................................................................................95 15.27 Value — арифметическая функция....................................................................................................... 96 15.28 Value_in — функция принадлежности................................................................................................. 97 15.29 Value_unique — функция уникальности............................................................................................. 9716 Встроенные процедуры...................................................................................................................................... 9716.1 Insert..................................................................................................................................................................97 16.2 Remove..............................................................................................................................................................98Приложение А Синтаксис языка EXPRESS....................................................................................................99А. 1 Лексемы.................................................................................................................................. 99А.2 Грамматические правила..................................................................................................102 A. З Список перекрестных ссылок....................................................................................106Приложение В Определение разрешенных экземпляров объектов.......................................................112B . 1 Формальный подход..................................................................................................... 112В.2 Операторы супертипов..................................................................................................... 113 В.З Интерпретация возможных типов данных сложных объектов.............................ИЗIV
ГОСТ Р ИСО 10303-11-2000Приложение С Ограничения на экземпляры, налагаемые спецификацией интерфейса................119 Приложение D EXPRESS-G. Графическое подмножество EX PR ESS................................................. 122D. I Введение и обзор............................................................................................................... 122D.2 Символы определения..................................................................................................... 123D.3 Символы отнош ений..............................................................124D.4 Символы компоновки..................................................................................................... 125 D.5 Диаграммы уровня объекта............................................................................................126 [З.бДиафаммы уровня схемы................................................................................................128D . 7 Полные диаграммы E X PR E SS-G ............................................................................129Приложение Е Заявка о соответствии реализации протоколу (З С Р П )................................................131E. 1 Синтаксический анализатор языка EXPRESS...................................................... 131 Е.2 Инструментальное средство редактирования EX PR ESS-G ................................. 131Приложение F Регистрация информационного объекта.......................................................................... 132 Приложение G Отношения.................................................................................................................................133G.1 Отношения через атрибуты............................................................................................133 G . 2 Отношения подтип/супертип....................................................................................137Приложение Н Модели EXPRESS для иллюстрации примеров EXPRESS-G....................................138H . 1 Пример модели единичной схем ы .......................................................................... 138 Н.2 Шаблон отнош ения......................................................................................................... 139Н.З Простое дерево подтнп/супергип................................................................................ 139Н.4 Переобъявление атрибута................................................................................................140 Н.5 Многосхемные м одели....................................................................................................140Приложение J Библиография............................................................................................................................. 142 Предметный указатель.............................................................................................................................................142 V
ГОСТ Р ИСО 10303-11-2000ВведениеСтандарты серии ГОСТ Р ИСО 10303 распространяются на машинно-ориентированноепредставление данных об изделии и обмен этими данными. Целью является создание механизма,позволяющего описывать данные об изделии на протяжении всего жизненного цикла изделиянезависимо от конкретной системы. Характер такого описания делает его пригодным не толькодля обмена инвариантными файлами, но также и для создания баз данных об изделиях, коллек­тивного пользования этими базами и архивации соответствующих данных.Стандарты серии ГОСТ Р ИСО 10303 представляют собой набор отдельно издаваемых стан­дартов (частей). Части данной серии стандартов относятся к одной из следующих тематическихгрупп: методы описания, интегрированные ресурсы, прикладные протоколы, комплекты абст­ рактных тестов, методы реализации и аттестационное тестирование. Группы стандартов даннойсерии описаны в ГОСТ Р ИСО 10303-1. Настоящий стандарт входит в группу методов описания.Настоящий стандарт описывает элементы языка EXPRESS. Каждый элемент языка пред­ставлен в собственном контексте с примерами. Сначала следуют простейшие примеры, ддтее снарастающей сложностью раскрываются более сложные положения.Обзор языкаEXPRESS — это название формального языка описания информационных требований.EXPRESS применятся дзя определения информационных требований других стандартов серииГОСТ Р ИСО 10303. Цели создания языка EXPRESS:-объем и сложность стандартов серии ГОСТ Р ИСО 10303 требуют наличия возможностейкак дзя машинной интерпретации содержащейся в них информации, так и для интерпретацииданной информации человеком. Представление элементов информации из стандартов серииГОСТ Р ИСО 10303 в не строго формализованном виде позволит игнорировал, возможностиприменяемых средств автоматизации дзя проверки несоответствий в процессе представления илисоздания вторичных отображений, включая отображения реализации;-язык EXPRESS разрабатывался таким образом, чтобы обеспечить возможности структури­рования радзичных материалов, относящихся к стандартам серии ГОСТ Р ИСО 10303. В данномязыке EXPRESS-схема является основой дзя структурирования и взаимосвязи элементов пред­ ставления данных об изделии;- язык основан на определении объектов, представляющих формализованные описания мо­делируемых реальных объектов. Определение объекта дается через его свойства, которые характе­ризуются путем определения области их значений и ограничений, накладываемых на областьзначений;- при создании языка ставилась задача избежать, насколько это возможно, влияния особен­ностей реализации. Тем не менее, имеется возможность создания отображений реализации (такихкак статический файл обмена) как автоматически, гак и непосредственно.В языке EXPRESS объекты определяются через их атрибуты - особенности или характери­стики. имеющие важное значение дзя понимания и использования обз>ектов. Представление ат­рибутов может иметь простой тип данных (такой как целый) или являться другим объектом. Гео­ метрическая точка, например, определяется гремя действительными числами. Имена, которыеданы атрибутам, дополняют определение объекта. Так, для геометрической точки использующие­ся в ее определении три действительных числа имеют имена X. Y и Z. В языке устанавливаетсясвязь между определяемым объектом и атрибутами, которые его определяют, а также связь междуатрибутом и его представлением.П р и ме ча н и я.1 При разработке языка EXPRESS были использованы несколько языков, в частности, Ada, Algol, С,С**, Euler, Modula-2, Pascal. PL/I и SQL. В языке EXPRESS добавлены некоторые возможности, которыеделают язык более подходящим для задач описания информационной модели.2 В настоящем стандарте примеры текстов на языке EXPRESS нс соответствуют никакому конкретно­му стилю. Напротив, для того, чтобы сэкономить место зз показать гибкость языка, иногда используется не­ корректный стиль. Приведенные примеры нс отражают содержание информационных моделей, описанных вдругих стандартах серии ГОСТ Р ИСО 10303. Примеры создавались для ТОГО, чтобы показать конкретныеособенности языка EXPRESS. Необходимо игнорировать любые сходства между примерами, приведеннымив настоящем стандарте, и нормативными информационными моделями, содержащимися в других стандартахсерии ГОСТ Р ИСО 10303.3 Приложения А. В. С, D, Е и F являются обязательными и составляют неотъемлемую часть настоя­щего стандарте. Приложения G, Н и J являются справочными.4 В тексте настоящего стандарте объекты и конструкции языка EXPRESS в ряде случаев выделены по­лужирным шрифтом (например. filo_descript»on).VI
ГОСТ Р ИСО 10303-11-2000 Г О С У Д А Р С Т В Е Н Н Ы Й С Т А Н Д А Р Т Р О С С И Й С К О Й Ф Е Д Е Р А Ц И ИСистемы автоматизации производства и их интеграцияПРЕДСТАВЛЕНИЕ ДАННЫХ ОБ ИЗДЕЛИИ И ОБМЕН ЭТИМИ ДАННЫМИЧ а с т ь 11.Методы описания. Справочное руководство по языку EXPRESS Industrial automation systems and integration. Product data representation and exchange.Part 11. Dcscnption methods. The EXPRESS language reference manual Дата введения 2001—07—01 1 Область примененияВ настоящем стандарте определен язык, с помощью которого могут быть описаны аспектыданных об изделии. Данный язык называется EXPRESS.В стандарте также определено графическое представление для подмножества конструкций вязыке EXPRESS. Это графическое представление называется EXPRESS-G.В ГОСТ Р ИСО 10303-1 EXPRESS описан как язык определения данных. Данный язык со­стоит из элементов, которые позволяют однозначно определять данные и устанашшпать ограни­ чения на эти данные.Область применения настоящего стандарта охватывает:- типы данных; - ограничения на экземпляры типов данных.Область применения настоящего стандарта не охватывает:- определение форматов баз данных; - определение форматов файлов; - определение форматов передачи; - управление процессом; - обработку информации; - обработку особых ситуаций.Язык EXPRESS не является языком программирования. 2 Нормативные ссылкиВ настоящем стандарте использованы ссылки на следующие стандарты: ГОСТ Р ИСО 10303-1—99 Системы автоматизации производства и их интеграция. Пред­ставление данных об изделии и обмен этими данными. Часть I. Общие представления и осново­полагающие принципы.ИСО/МЭК 8К24-1—95' Информационная технология. Взаимосвязь открытых систем. Абст­рактная синтаксическая нотация версии один (АСН.1). Часть I. Требования к основной нотацииИСО/МЭК 10646-1—93’ Информационная технология. Универсальный многобайтный коди­рованный набор символов (UCS). Часть 1: Архитектура и основной многоязычный уровень3 О п р ед ел ен и я3.1 Термины, определенные в ГОСТ Р ИСО 10303-1В настоящем стандарте использованы следующие термины:- контекст; - данные; - язык определения данных; - информация.’ Оригинал стандарта ИСО/МЭК — во ВНИИКИ Госстандарта России. Издание официальноеI
ГОСТ I* ИСО 10303-11-20003.2 Термины, определенные в ИСО/М ЭК 10646-1- графический символ.П р и м е ч а н и е — Данное определение охватывает только те символы из ИСО/МЭК 10646-1, кото­рые имеют определенное визуальное представление; тем самым исключаются любые пустые илизаштрихованные ячейки.3.3 Другие определенияВ настоящем стандарте использованы следующие термины с соответствующими определе­ниями:3.3.1 тип данных сложного объекта (complex entity data type): Представление объекта. Типданных сложного объекта устанавливает область значений, определяемую общими атрибутами иограничениями допустимой комбинации типов данных объекта внутри конкретного графа под-тип/супертип.3.3.2 экземпляр сложного объекта (типа данных) (complex entity (data type) instance]: Обозна­ченный блок данных, который представляет блок информации внутри класса, определенногообъектом. Он принадлежит области значений, установленной типом данных сложного объекта.3.3.3 константа (constant): Обозначенный блок данных из определенной области значений.Значение этого блока данных не может быть изменено.3.3.4 тип данных (data type): Область значений. 3.3.5 объект (entity): Класс информации, определенный общими свойствами. 3.3.6 тип данных объекта (entity data type): Представление объекта. Тип данных объекта ус­танавливает область значений, определяемую общими атрибутами и ограничениями.3.3.7 экземпляр объекта (типа данных) (entity (data type) instance!: Обозначенный блок дан­ных, который представляет блок информации внутри класса, определенного объектом. Он при­надлежит области значений, установленной типом данных объекта.3.3.8 экземпляр (instance): Обозначенное значение. 3.3.9 частный тип данных сложного объекта (partial complex entity data type): Потенциальноепредставление объекта. Частный тип данных сложного объекта является группировкой типовданных объекта внутри графа подтип/супертип, которая может образовывать тип данных сложно­го объекта целиком или частично.3.3.10 частное значение сложного объекта (partial complex entity value): Значение частноготипа данных сложного объекта. Оно не имеет собственного смысла и должно комбинироваться сдругими частными значениями сложного объекта и обозначением для формирования экземплярасложного объекта.3.3.11 совокупность (population): Множество экземпляров типа данных объекта. 3.3.12 экземпляр простого объекта (типа данных) |simple entity (data type) instance!:Обозначенный блок данных, который представтяет блок информации внутри класса, определен­ного объектом. Входит в область значений, установленную единственным типом данных объекта.3.3.13 граф подтин/супертип (subtype/supertype graph): Объявленный набор типов данныхобъекта. Типы данных объекта, объявленные внутри графа подтип/супертип, связаны через вы­ражение подтипа. Граф подтип/супертип определяет один или несколько сложных типов данныхобъекта.3.3.14 лексема (token): Не подлежащий декомпозиции лексический элемент языка. 3.3.15 значение (value): Блок данных. 4 Требования соответствия4.1 Формальные спецификации, написанные на EXPRESS 4. 1. ( Л е к с и ч е с к и й я з ы к Формальная спецификация, написанная на EXPRESS, должна быть согласована с заданнымуровнем, как указано ниже. Формальная спецификация согласована с заданным уровнем, когдавсе проверки, установленные для этого уровня и всех нижних уровней, удовлетворены для этойспецификации.Уровни проверкиУровень I: проверка ссылок. Данный уровень состоит из проперки формальной специфика­ции. гарантирующей ее синтаксическую и ссылочную корректность. Формальная спецификациясинтаксически корректна, если она соответствует синтаксису, полученному расширением пер- 2
ГОСТ Р ИСО 10303-11-2000пичних синтаксических правил (синтаксиса), установленных п приложении Л. Формальная спе­ цификация корректна в отношении ссылок, если все ссылки на каждый элемент описания языкаEXPRESS соответствуют области применения и правилам видимости, установленным в разделах10 и II.Уровень 2: проверка типов. Данный уровень состоит из проверки формальной специфика­ции, гарантирующей ее соответствие следующему: - выражения должны удовлетворять правилам, установленным в разделе 12;* присваивания должны удовлетворять правилам, установленным в 13.3; - объявления инверсных атрибутов должны удовлетворять правилам, устано&пенным в 9.2.1.3;- переобъявления атрибутов должны удовлетворять правилам, установленным в 9.2.3.4.Уровень 3: проверка значения. Данный уровень состоит из проверки формальной специфи­кации. гарантирующей ее соответствие утверждениям вида «Л должно быть больше В», как уста­ новлено в разделах 7—16. Проверка справедлива для тех положений, в которых А и В могут бытьвыражены литералами и/или константами.Уровень 4: полная проверка. Данный уровень состоит из проверки формальной специфика­ции. гарантирующей ее соответствие всем формулировкам требований, установленным в настоя­щем стандарте.П р и м е р I — В настоящем стандарте установлено, что функция должна иметь операторвозврата («return») для каждой из возможных ветвей, по которым может пойти процесс после вы­зова данной функции. Это должно быть проверено.4.1.2 Г р а ф и ч е с к а я ф о р м аФормальная спецификация, написанная на EXPRESS-G, должна быть согласована с задан­ным уровнем, как указано ниже. Формальная спецификация согласована с заданным уровнем,когда все проверки, установленные для этого уровня и всех нижних уровней, удовлетворены дляэтой спецификации.Уровни проверки Уровень 1: проверка символов и области применения. Данный уровень состоит из проверкиформальной спецификации, гарантирующей ее соответствие как требованиям к уровню объекта,так и требованиям к уровню схемы, как определено в D.5 и D.6. Это охватывает проверку того,что в формальной спецификации символы используются в соответствии с D .2—D.4. Формальнаяспецификация также должна быть проверена на соответствие страничных ссылок и персобъяв-ленных атрибутов требованиям D.4.I и D.5.5.Уровень 2: полная проверка. Данный уровень состоит из проверки формальной специфика­ции для установления тех мест, которые не соответствуют требованиям к полному уровню объек­та или полному уровню схемы, определенным в приложении D. и требованиям, установленным вразделах 7—16.4.2 Реализации EXPRESS 4.2.1 С и н т а к с и ч е с к и й а н а л и з а т о р я з ы к а E X P R E S SРеализация синтаксического анализатора языка EXPRESS должна выполнять синтаксиче­ский разбор любой формальной спецификации, написанной на EXPRESS, в соответствии с огра­ничениями, установленными в приложении Е и связанными с этой реализацией. Синтаксическийанализатор языка EXPRESS будет считаться соответствующим конкретному уровню проверки(как установлено в 4.1.1), если он может применять псе проверки, требуемые для данного уровня(и любых нижележащих уровней), к формальной спецификации, написанной на EXPRESS.Разработчик синтаксического анализатора языка EXPRESS должен установить любые огра­ничения, которые реализация накладывает на число и длину идентификаторов, на диапазон об­ рабатываемых чисел и на максимальную точность действительных чисел. Такие ограничениядолжны быть документально оформлены в виде, установленном в приложении Е. с целью прове­ дения аттестационного тестирования.4.2.2 С р е д с т в о г р а ф и ч е с к о г о р е д а к т и р о в а н и яРеализация редактора EXPRESS-G должна обеспечивать возможности создания и отображе­ния формальных спецификаций па EXPRESS-G, в соответствии с ограничениями, установлен­ ными в приложении Е и связанными с этой реализацией. Редактор EXPRESS-G будет считатьсясоответствующим конкретному уровню проверки, если он может создавать и отображать фор­мальные спецификации на EXPRESS-G, которые соответствуют указанному уровню проверки (илюбому нижележащему уровню).3
ГОСТ Г ИСО 10303-11-2000Разработчик редактора EXPRESS-G должен установить любые ограничения, которые реали­зация накладывает на число и длину идентификаторов, на число доступных символов на страни­цу модели и на максимальное число страниц. Такие ограничения должны быть документальнооформлены в виде, установленном в приложении Е, с целью проведения аттестационного тести­рования. 5 Фундаментальные принципыПредполагается, что читатели настоящего стандарта знакомы с нижеуказанными концеп­циями.Схема, написанная на языке EXPRESS, описывает набор условий, которые устанавливаютобласть ее определения. Экземпляры могут быть оценены для определения их принадлежности кданной области значений. Если экземпляры отвечают всем условиям, тогда они объявляютсяпринадлежащими к данной области. Если экземпляры противоречат любому из условий, тогдаони нарушают условия и поэтому не принадлежат данной области. В случае, когда экземпляры неимеют значений для необязательных атрибутов, а некоторые условия содержат в себе эти необя­зательные атрибуты, то не всегда возможно определить, отвечают ли экземпляры всем условиям.В таком случае считается, что экземпляры входят в данную область.Многим элементам языка EXPRESS присвоены имена. Имя позволяет другим элементамязыка ссылаться на связанное с этих» именем представление. Использование имени в определе­нии других элементов языка вводит в силу ссылку на исходное предстаатенне. Так как синтаксисязыка использует идентификатор для имени, то исходное представление должно быть исследова­но для понимания его структуры.Определение типа данных объекта в языке EXPRESS описывает область его значений.Предполагается, что отдельные элементы области различаются некоторыми связанными с нимиуникальными идентификаторами. В EXPRESS не установлены содержание или представлениеэтих идентификаторов.Объявление постоянного экземпляра объекта определяет идентифицируемый элемент облас­ти, описанной типом данных объекта. Такие экземпляры объектов не будут изменены или унич­ тожены операциями, выполняемыми в дайной области.Процедурные описания ограничений в EXPRESS могут объявлять или делать ссылки на д о­полнительные экземпляры объекта как на локальные переменные, которые, как предполагается,будут временными идентифицируемыми элементами области. Данные процедурные описания мо­гут изменять эти дополнительные экземпляры объекта, но не могут изменять постоянные эле­менты данной области. Эти временные элементы области доступны только в пределах действияпроцедурного описания, в котором они объявлены, и прекращают существование за пределамиэтого описания.Язык EXPRESS не описывает среду реализации. В частности EXPRESS не определяет:- как разрешены ссылки на имена: - какие другие схемы известны; - как и когда проверяются ограничения; - что должна делать реатизация. если ограничение не удовлетворено: - имеют или нет право на существование в реализации экземпляры, которые не соответст­вуют EXPRESS-схеме;- как и где в реализации создаются, изменяются и удатяются экземпляры. 6 Синтаксис определения языкаВ настоящем разделе определена нотация, используемая для представления синтаксиса язы­ка EXPRESS. Полный синтаксис для языка EXPRESS приведен в приложении Л. Части этих син­таксических правил воспроизведены в различных разделах настоящего стандарта для иллюстра­ции синтаксиса конкретного оператора. Эти части не всегда полны. Поэтому иногда необходиморуководствоваться приложением А для недостающих в данном примере правил. Части синтаксисав тексте настоящего стандарта представлены в рамке. Каждое правило внутри синтаксическойрамки слева имеет уникальный номер для использования его в перекрестных ссылках на другиесинтаксические правила.4
ГОСТ Р ИСО 10303-11-20006.1 Синтаксис спецификацииСинтаксис EXPRESS определен как производная от Синтаксической Нотации Вирта (СНВ).П р и м е ч а й и с — См. ссылку в приложении J |3).Соглашение по нотации и самооп ределе иная СНВ приведены ниже. syntax= { production } .production = identifierexpression V .expression = tenn | '|' term } .term= factor { factor ) .factor= identifier | literal | group | option | repetition .identifier = character { character } . literal=character { character }.group= '(' expression ')* -option= 'I' expression j* .repetition = *{' expression '}* . - Знак равенства '= ' указывает логическое заключение. Элемент слева от знака определяет­ся комбинацией элементов справа. Любые пробелы, появляющиеся между элементами логическо­го заключения, не входящие в пределы литерала, не имеют значения. Логическое заключение за­ вершается точкой 'Л- Использование идентификатора внутри коэффициента означает нетерминальный символ,который появляется слева от другого логического заключения. Идентификатор состоит из букв,цифр и символа подчеркивания. Ключевые слова языка предстаазяются логическими заключе­ ниями. идентификаторы которых состоят только из заглавных букв.-Литерал используется для обозначения терминального символа, который не может бытьрасширен далее. Литерал является последовательностью любых символов, заключенной в апост­ рофы. Символ, в данном случае, может быть любым символом, определенным по ИСО/МЭК10646-1 в позициях 21-7Е группы 00, плоскости 00. сгроки 00. Чтобы апостроф был включен влитерал, он должен быть записан дважды.Семантика скобок определена ниже:- фигурные скобки '{}’ указывают нулевое или большее количество повторений; - квадратные скобки ' | | ' указывают необязательные параметры; - круглые скобки '()' указывают, что группа логических заключений, включенных в круглыескобки, должна быть использована как единое логическое заключение;- вертикальная линия 'Г указывает, что в выражении должен быть выбран только один эле­мент.П р и м е р 2 — Синтаксис для строкового типа:Синтаксис:293 string type = STRING ( width_spec | .318 width_spec = ’(' width ')' | FIXED | . 317 width = nuineric_expression .Полное определение синтаксиса (приложение А) содержит определения для STRING,numeric_expression и FIXED.П р и м е р 3 — Учитывая синтаксис, данный в примере 2, возможны следующие вариа!гты:a) string b) string (22) c) string (19) fixedПравило для numeric_expression яачяется сложным и позволяет описать много других вари­антов.6.2 Специальная символьная нотация Следующая нотация используется для представления целых символьных наборов и некото­рых специальных символов, которые сложно отобразить:- \ а — представляет символы в позициях 21-7Е строки 00, плоскости 00, группы 00ИСО/МЭК 10646-1;- \ п — представляет символ «новая строка (newline)* (системно зависимый) (см. 7.1.5.2); - \ q — символ кавычки (апострофа) С ) и содержится внутри \а; - \s — символ пробела; - \х 8 , \х9, \хА. \хВ, \хС , \x D — предстаачяет символы в позициях 8—13 строки 00. плоско­сти 00, группы 00 ИСО/МЭК 10646-1.5
ГОСТ I* ИСО 10303-11-2000 7 Основные элементы языкаВ настоящем разделе определены основные элементы, из которых составляется EXPRESS-схема: набор символов, комментарии, знаки, зарезервированные слова, идентификаторы и лите­ралы.Основные элементы языка компонуются в текст, разделяемый обычно на физические стро­ки. Физическая строка является любым числом (включая нулевое) символов, заканчивающимсясимволом «новая строка* (см. 7.1.5.2).П р и м е ч а н и е — Схема более удобна для «пения, когда операторы разделены на строки, а для ком­поновки различных конструкций используется пробел (whitespace).П р и м е р 4 - Следующие записи эквивалентны:entity point; х, v, z:real; end entity;ENTITY point;x, У, z : REAL;END_ENTITY:7.1 Набор символовВ схемах, написанных на языке EXPRESS, должны использоваться только символы из сле­дующего набора: символы, расположенные в 08—0D. графические символы, лежащие в диапазоне20—7Е из ИСО/МЭК 10646-1. а также специальный символ \п , означающий новую строку. Дан­ ный набор называется набором символов EXPRESS. Элемент этого набора ссылается на позиннюсоответствующего стандарта, в которой расположен данный символ; номера этих позиций опре­делены в шестнадцатеричной системе. Печатаемые символы данного набора (позиции 21—7Е изИСО/МЭК 10646-1) объединяются для фюрмнровання лексем языка EXPRESS. ЛексемамиEXPRESS являются ключевые слова, идентификаторы, знаки или литералы. Дальнейшая класси­фикация набора символов EXPRESS приведена ниже.Данный набор символов определен как абстрактный набор символов: он не зависит от егопредставления в реализации.П р и м е ч а н и е — В ИСО/МЭК 6429 (см. 111 из приложения J) установлены семантики символов по­зиций 08—0D из ИСО/МЭК 10646-1. В настоящем стандарте нс требуются семантики, установленные вИСО/МЭК 6429.7.1.1 Ц и ф р ыВ EXPRESS используются арабские цифры 0—9 (позиции 30—39 из набора символовEXPRESS).____________________________________________________________________________________ Синтаксис:120 digit = *0* | I' р 2 ’ | ^ | *4' [ '5' | '6' | '7' \ 'X' \ '9' .____________________________________7.1.2 Б у к в ыВ EXPRESS используются строчные и прописные буквы английского алфавита (позиции4 1 - 5 А и 61—7А набора символов EXPRESS). Регистр букв имеет значение только в явных стро­ковых литералах.П р и м е ч а н и е — Текст на языке EXPRESS может быть написан с использованием верхних, нижнихили смешанных регистров (заглавных, строчных или и тех и других букв — см. пример 4).Синтаксис: 124 letter = ’а ’ | ' Ь ’ | ’с ' | ' d ' | ’е' | Т | ' g ' | ' h ' | Т | ' j ' | ' к ' | * 1' | “т ‘ | 'п* | *о' |7.1.3. С п е ц и а л ь н ы е с и м в о л ы Специальные символы (выводимые на печать символы, которые не являются ни буквами,ни цифрами) используются главным образом для пунктуации и в качестве операторов. Специаль­ ные символы соответствуют позициям 21—2F. ЗА—3F. 40. 5В— 5Е, 60 и 7В—7Е набора символовEXPRESS. 6
ГОСТ Р ИСО 10303-11-2000Синтаксис:134 special - not_paren_star,quote_special | ( | ) 1'* | **" .128 not_paren_star_quote_special = '!'| '# ' | 'S' | '%' || '+* ||V | 7 T : T ; T < T = T > 4, e , m, vm,AT. T‘ , iTT I T I7.1.4 Г1 о л ч е р к и и а и и еСимвол подчеркивания— ячейка 5F набора символов EXPRESS) может использоватьсяв идентификаторах и ключевых словах, за исключением использования его в качестве первогосимвола.7.1.5 Г1 р о б е лПробел (whitespace) определен 7.1.5.1—7.1.5.3 и 7.1.6. Пробел должен использоваться дляразделения лексем в EXPRESS-схемах.П р и м е ч а н и е — Свободное и последовательное использование пробела может улучшить структуруи удобочитаемость схемы.7.1.5.1 Символ пробелаОдин или несколько пробелов (позиция 20 из набора символов EXPRESS) могут распола­гаться между двумя лексемами. Нотация '\s ' может быть использована для представления симво­ла пробела в синтаксисе языка.7.1.5.2 Новая строкаСимвол «-новая строка (newline)» отмечает физическое окончание строки внутри формальнойспецификации, записанной на языке EXPRESS. Обычно новая строка трактуется как пробел, но су­ществует разница между завершением заключительного комментария и неправильным окончаниемстрокового литерала. В синтаксисе языка символ ноюи строки представляется нотацией \п.Конкретное представтение повой строки определяется спецификой реализации.7.1.5.3 Другие символыСимволы из позиций 08—0D должны рассматриваться как пробел (whitespace), кроме случаев,когда они встречаются внутри строкового литерала. Ятя представления этих символов в синтаксисеязыка должна быть использована нотация \хп, где п является одним из символов: 8, 9. А, В. С и D.7.1.6. К о м м е н т а р и иКомментарий используется при документировании описания и должен быть интерпретиро­ван синтаксическим анализатором языка EXPRESS как пробел (whitespace). Существует два видакомментариев: вложенный и заключительный.7.1.6.1 Вложенный комментарийПара символов '(*’ обозначает начало вложенного комментария, а пара символов '*)' обо­значает его окончание. Вложенный комментарий может располагаться между двумя любыми лек­семами.Синтаксис:142 embedded remark = '(* ’ { not_lparen_star | Iparen_not_star | star_not_rparen |embedded_renuirk } ' * ) ' •126 not_lparen_star = not_paren_star Г ) ' .127 not paren. star = letter | digit | not„paren_star_special.124 letter = V | *b" | 'c' | d ' | V | T | 'g' | 'h ‘ | T | T | 'k* | ’ Г |m ’ | *n' | o' I p’ | V | V | 's’ | V | V | V | *w* | 'x' |V I ' z ‘ -120 digit = 'O' | 'Г | '2' | '3' | '4- | '5 ‘ | '6' | '7' | '8' | '9' . 129 not paren_.star .special = not_paren_star_quote_special | " " . 128 not_paren_star_quoie_special =f *“* | *#' | 'S' | '%' \ '| '+* ||125 lparen_not_star = '( ' not_star. 132 not_star = not_paren_star | '(' | ')' .135 star_not_rparen =not_rparen .131 not rparen = not_paren_.star | '• ' | *(’ .7
ГОСТ Р ИСО 10303-11-2000Любой символ из набора символов EXPRESS может быть вставлен между началом и концомвложенного комментария, включая символ «новая строка (newline)», поэтому вложенные коммен­тарии могут охватывать несколько физических строк.Вложенные комментарии могут вкладываться друг в друга.П р и м е ч а н и е — При вложении комментариев необходимо обращать большое внимание на согласо­вание пар символов.П р и м е р 5 — Пример вложенных комментариев.<• Символ '(*' начинает комментарий, а символ ' • ) “ его заканчивает •).7.1.6.2 Замючительпый комментарийЗаключительный комментарий записывается в конце физической строки. Два последова­тельных дефиса‘ начинают заключительный комментарий, а первый встреченный символ«новая строка* заканчивает его.Синтаксис:144 tail_remark - '-{ \а | \s | \.\8 | \х9 | \хА | \хВ | \хС | \ х Р } \п .П р и м е р 6 ------Этот текст является комментарием, который заканчивается символом «но­вая строка (newline)».7.2Зарезервированные словаЗарезервированными словами языка EXPRESS являются ключевые слова, а также именавстроенных констант, функций и процедур. Зарезервированные слова не должны использоватьсяв качестве идентификаторов. Зарезервированные слова языка EXPRESS описаны ниже.7.2.1 К л ю ч е в ы е с л о в аКлючевые слова языка EXPRESS показаны в таблице 1.П р и м е ч а н и я1 Ключевые слова представляются литералом, состоящим из символов заглавных букв (верхнего реги­стр*!). Это облегчает чтение синтаксических конструкций.2 Ключевые слова CONTEXT (КОНТЕКСТ), END_CONTEXT (КОНЕЦ_КОНТЕКСТА). MODEL(МОДЕЛЬ) и END_MODEL (КОНЕЦ_МОДЕЛИ) зарезервированы для использования в последующих ре­дакциях настоящего стандарта.Та б л и и а I — Ключевые слова язык*! EXPRESSABSTRACTAGGREGATEALIASARRAYASBAGBEGINBINARYBOOLEANBYCASECONSTANTCONTEXTDERIVEELSEENDEND_ALIASEND_CASEEND_CONSTANTEND_CONTEXTEND.ENTITYEND_ FUNCTIONENDJFEND_LOCALEND_MODELEND_PROCEDUREEND.REPEATEND_RULEEND.SCHEMAEND_TYPEENTITYENUMERATIONESCAPEFIXEDFORFROMFUNCTIONGENERICIFINTEGERINVERSELISTLOCALLOGICALMODELNUMBEROFON EOFOPTIONALOTHERWISEPROCEDUREQUERYREALREFERENCEREPEATRETURNRULESCHEMASELECTSETSKIPSTRINGSUBTYPESUPERTYPETHENTOTYPEUNIQUEUNTILUSEVARWHEREWHILE8
ГОСТ Р ИСО 10303-11-20007.2.2 З а р е з е р в и р о в а н н ы е с л о в а - о п е р а т о р ы Операторы, определенные зарезервированными словами, приведены в таблице 2. Определе­ния этих операторов см. в разделе 12.Т а б л и н а 2 — Зарезервированные слова EXPRESS-опсраторыANDAN DORDIVINLIKEMODNOTORXOR7.2.3 В с т р о е н н ы е к о н с т а н т ыИмена встроенных констант приведены в таблице 3. Определения этих констант см. в раз­деле 14.Т а б л и ц а 3 — Зарезервированные слова EXPRESS-комсганты0SELFCONST_EPIFALSETRUEUNKNOWN7.2.4 В с т р о е и н ы е ф у н к ц и иИмена встроенных функций приведены в таблице 4. Определения этих функций см. в раз­деле 15.Т а б л и ц а 4 — Зарезервированные стона EXPRESS-имена функцийABSACOSASINATANBLENGTHCOSEXISTSEXPFORMATIII BOUNDHIINDEXLENGTHLOBOUNDLOGLOG 2LOG 10LOINDEXNVLODDROLESOFSINSIZEOFSQRTTANTYPEOFIJSEDINVALUEVALUEJNVALUE_UNIQLE7.2.5 В с т р о е н и ые п р о ц е д у р ыИмена встроенных процедур приведены в таблице 5. Определения этих процедур см. в раз­деле 16.Т а б л и ц а 5 — Зарезервированные слова EXPRESS—имена процедур|INSERT|REMOVE|7.3 Знаки (symbols) Знаки являются специальными символами или группами специальных символов, которыеимеют специальное значение в языке EXPRESS. Знаки используются в языке EXPRESS как раз­делители и операторы. Разделитель используется для начала, выделения или окончания смежныхлексических или синтаксических элементов. Интерпретация этих элементов была бы невозможнабез разделителей. Операторы обозначают, что функции должны выполняться па операндах, кото­рые связаны с оператором, описания этих операторов см. в разделе 12. EXPRESS-знакн приведе­ ны в таблице 6.Т а б л и ц а 6 — EXPRES-знакиt+-%*\t<>11(»c()<=<>> -<*II■*-<■*>*<>'9
ГОСТ I* ИСО 10303-11-20007.4 ИдештификаторыИдентификаторы являются именами, заданными элементам, объявленным в схеме (см. 9.3).включая саму схему. Идентификатор не должен был, таким же, как зарезервированное словоязыка EXPRESS.Синтаксис:140 sim pleJd = letter { letter | digit |}■124 letter = ‘а’’b' | V | d ' | VI T | ' g ' | ' h ' | T• j ' l ' k ' l ' l ' l’ n ’ | 'o' | p' | 'q' 1 T ’ | 's' | ' t 'v'v' I 'w' 1 'x' 1'У*120 digit = 'O' | ' Г | *2' | '3' | ’4 ‘ | • 5 ' | ' 6 ' | ' 7 ''8'' 9 ' .Первый символ идентификатора должен быть буквой. Остальные символы, при их наличии,могут являться любой комбинацией букв, цифр и символа «подчеркивание®.Разработчик синтаксического анализатора языка EXPRESS, в соответствии с приложениемЕ. должен определить максимальное число символов идентификатора, которое может распозна­ваться данной реализацией.7.5 ЛитералыЛитерал имеет самооп ределе иное постоянное значение. Тип литерала зависит от компози­ции символов, формирующих лексему. Литерал может иметь один из следующих типов: двоич­ный, целочисленный, действительный, строковый и логический.Синтаксис:238 literal =* binary „literal | integerjiteral | logical Jiteral | real Jiteral |____________stringjiteral ._____________________________________________________________________7.5.1 Д в о и ч н ы й л и т е р а лДвоичный литерал представляет значение двоичного типа данных и состоит из знака %, закоторым следует один или более битов (1 или 0).Синтаксис:136 binary literal = '%' bit { bit } .119 bit = 'O' | ' Г .___________________________________________________________________________Разработчик синтаксического анализатора языка EXPRESS, в соотвезсгвии с приложением Е,должен определить максимальное число битов в двоичном литерале, которое может распозна­ваться данной реализацией.П р и м е р 7 — Правильный двоичный литерал.&0I01001100 7.5.2 Ц е л о ч и с л е н н ы й л и т е р а лЦелочисленный литерал представляет собой значение целого типа данных, состоящее изодной или более цифр.Синтаксис:138 integerjiteral = digits .121 digits = digit | digit ) .120 digit = ’(Г | ' ! ' 1 *2' | '3' \ '4' | '5' \ 6' \ '7' \ '8' \ '9' .____________________________________П р и м е ч а н и е — Знак целочисленного литерала нс используется в синтаксисе, так как EXPRESSиспользует концепцию унарных операторов внутри синтаксиса выражения.Разработчик синтаксического анализатора языка EXPRESS, в соответствии с приложением Е.должен определить максимальное значение целого для целочисленного литерала, которое можетраспознаваться данной реализацией.П р и м е р 8 — Допустимые целочисленные литералы4016387. 5. 3Д е й с т в и т е л ь н ы й л и т е р а лДействительный литерал представляет собой значение действительного типа данных, с о ­стоящее из мантиссы и необязательного показателя экспоненты; мантисса должна включать деся­ тичную точку.10
ГОСТ Р ИСО 10303-11-2000Синтаксис:139 realJiteral = digits V | digits |v| sign | digits | .121 digits = digit { digit ) . 120 digit = 'O' I T | *2' | '3' | '4'’5'2X6 sign = ’+* I.П р и м е ч а н и е — Знак действительного литерала нс смоделирован в пределах синтаксиса, так какEXPRESS использует концепцию унарных операторов внутри синтаксиса выражения.Разработчик синтаксического анализатора языка EXPRESS, и соответствии с приложениемЕ. должен определить максимальную точность и максимальный показатель экспоненты действи­тельного литерала, которые могут распознаваться данной реализацией.П р и м е р ы9 — Допустимые действительные литералы1.Е6«Е* может быть записано как строчной, так и прописной буквой3.5е-5359.6210 — Недопустимые действительные литералы.001По крайней мере одна цифра должна предшествовать десятичной точке,le i0Десятичная точка должна быть частью литерала.I. еЮ Пробел не является частью действительного литерала.7. 5. 4С т р о к о в ы й л и т е р а л Строковый литерал представляет собой значение строкового типа данных. Существуют двеформы строкового литерала: простой и кодированный. Простой строковый литерал состоит изпоследовательности символов из набора символов EXPRESS (см. 7.1), заключенной в апострофы( '). Апостроф внутри простого строкового литерала представляется двумя последовательнымиапострофами. Кодированный строковый литерал состоит из чстырехоктетного кодированногопредставления каждого символа из последовательности символов ИСО/МЭК 10646-1. заключен­ ного в кавычки ("). Кодирование определяется следующим образом:- первый октет = группа ИСО/МЭК 10646-1. в которой определен символ; - второй октет = плоскость ИСО/М ЭК 10646-1, в которой определен символ: - третий октет = строка ИСО/МЭК 10646-1, в которой определен символ: - четвертый октет = ячейка ИСО/МЭК 10646-1, в которой определен символ.Последовательность октетов должна определять один из символов по ИСО/МЭК 10646-1.Строковый литерал строки никогда не должен выходить за границу физической строки; тоесть символ «новая строка* не должен встречаться между апострофами, в которые заключенстроковый литерал.Разработчик синтаксического анализатора языка EXPRESS, в соответствии с приложениемЕ. должен определить максимальное число символов простого строкового литерала, которое мо­жет распознаваться данной реализацией.Синтаксис:292 string Jiteral = simple_string Jiteral | encoded .string Jiteral .141 simple string literal = \q { ( \q \q ) | not quote | \s | \xX | \x9\xA | \xB| \ x C | \ x D } \ q .130 not^quote = not paren_star quote__specia! | letter | digit | '(' | Т Г - . 128 not paren star quote special = T ||| ’ S' | '%' \I ’+ ’ I V 1I V I T | V I T г < * Г = ' ! ' > ■ |Т Г ® Т П ’\ Т 1 Т Я , 1Т 1 Т Г Г Г - .124 letter = V | 'b' | 'c' | *d' | V | T | 'g' | 'h' | T | *j’ | *k' | T |'m* I *n' | 'o' I p' I 'q' I ’г* I 's' 1 't' 1 ’u' 1 'v' 1 *w' 1 V I У 1 v.120 digit = 'O' Г l' | ' 2 ' | '3' | '4' | '5' | '6' | '7' | '8' | '9' . 137 encoded „string Jiteral =encoded character { encoded character).122 ei3Coded_character = octet octet octet octet . 133 octet = hex_digit hex digit . 123 hex_digit = digit | 'a'- ) 'b' | 'c' | ' d ' | 'e' | T .II
ГОСТ Р ИСО 10303-11-2000Разработчик синтаксического анализатора языка EXPRESS, в соответствии с приложениемЕ, должен также определить максимальное число октетов (которое должно быть кратно четырем)кодированного строкового литерала, которое может распознаваться данной реализацией.П р и м е р ы11 — Допустимые простые строковые литералыРебенку нужна новая пара обуви!'Читается как: ...Ребенку нужна новая пара обуви!‘ Ed' 's Computer Store'Читается как: ...Ed's Computer Store12 — Недопустимые простые строковые литералыEd's Computer Store'Всегда должно быть четное число апострофов. 1 E d "s ComputerStore'Выходит за границы физической строки13 — Допустимые кодированные строковые литералы4100000041*Читается Л«ООООООС5*Читается А«0000795Е00006238» Это японские иероглифы в нотации Кобе14 - Недопустимые кодированные строковые литералы«000041* Октеты должны быть сгруппированы по четыре«00000041 ООООООС5*Между «» разрешены только шестнадцатеричные символы.7. 5. 5Л о г и ч е с к и й л и т е р а лЛогический литерал представляет собой значение логических или булевых типов данных иявляется одной из встроенных констант TRUE, FALSE или UNKNOWN.П р и м е ч а н и е — UNKNOWN не совместим с булевым типом данных.Синтаксис:242 logical_literal = FALS | TRUE | UNKNOWN . 8 Типы данныхВ настоящем разделе предстаазены типы данных как часть языка. Каждый атрибут, локаль­ная переменная или формальный параметр имеет связанный с ними тип данных.Типы данных подразделяются на простые, сборные (агрегатные), поименованные, создан­ные и обобщенные. Также типы данных подразделяются в соответствии с их использованием наосновные, параметрические и исходные. Взаимоотношения между двумя этими классификациямиописаны в 8.6.Операции, которые могут быть выполнены над значениями этих типов данных, определеныв разделе 12.8.1 Простые типы данныхПростые типы данных определяют области элементарных единиц данных в EXPRESS. Тоесть они не могут быть далее декомпозированы на элементы, которые распознает EXPRESS.Простыми типами данных являются: NUMBER (ЧИСЛОВОЙ). REAL (ДЕЙСТВИТЕЛЬНЫЙ),INTEGER ( ЦЕЛОЧИСЛЕННЫЙ) , STRING(СТРОКОВЫЙ),BOOLEAN(БУЛЕВСКИЙ).LOGICAL ( ЛОГИЧЕСКИЙ) И BINARY ( ДВОИЧНЫЙ).8.1.1 Ч и с л о в о й т и п д а н н ы х Областью значений числового ( NUMBER) типа данных являются все числовые значения вязыке. Числовой тип данных должен использоваться, когда не имеет значения более определен­ное числовое представление. 12
ГОСТ Р ИСО 10303-11-2000Синтаксис:248 numhcrjype = NUMBER ._______________________________________________________________П р и м е р 15 — Так как мы можем не знать контекста размера (size), мы не знаем, какимтипом данных его представить, например размер толпы на футболе представляет собой целоечисло, тогда как площадь области подачи — действительное.size : NUMBER ;П р и м е ч а н и е — В последующих редакциях настоящего стандарта может быть проведена дальней­шая специализация числового типа данных, например комплексные числа.8.1.2 Д е й с т в и т е л ь н ы й т и п д а н н ы хОбластью значений действительного (REAL) типа данных являются все рациональные, ир­рациональные и действительные научные числа. Данный тип яаляется конкретизацией числовоготипа данных.Синтаксис:265 геаМуре = REAL | *(' precision, spec ')' I - 255 piecision_spec = numeric_expression .Рациональные и иррациональные числа имеют бесконечное представление и точность. На­учные числа представляют физические единицы, которые известны лишь с определенной точно­ стью. Объект precislon_spec устанавливается в границах значащих цифр.Литерал действительного числа представляется мантиссой и необязательным показателемэкспоненты. Число цифр, составляющих мантиссу, не считая нулей, стоящих впереди первойзначащей цифры до десятичной точки, является числом значащих цифр. Известная точность зна­чения является числом первых цифр, которые необходимы для конкретного приложения.Правила и ограничения:a)Объект precision_spec задает минимальное число требуемых цифр представления дейст­вительного числа. Это выражение должно иметь целое положительное значение.b)Когда представление не определено, точность действительного числа не ограничена.8.1.3 Ц е л о ч и с л е н н ы й т и п д а н н ы хОбластью значений целочисленного (INTEGER) типа данных являются осе целые числа.Данный тип является конкретизацией действительного типа данных.Синтаксис:227 integer_type = INTEGER .П р и м е р 16 — В данном примере целочисленный тип данных используется для представ­ления атрибута, названного nodes. Областью значений данного атрибута являются все целые чис­ла без дальнейших ограничений.ENTITY foo:nodes : INTEGER;END ENTITY;8. 1. 4Л о г и ч е с к и й т и п д а н н ы хОбластью значений логического (LOGICAL) типа данных являются три литерала: TRUE,FALSE и UNKNOWN. ________________________________________________________________________Синтаксис:243 logical..type = LOGICAL .________________________________________________________________Для значений логического типа данных установлен следующий порядок: FALSE << UNKNOWN < TRUE. Логический тип данных совместим с булевским типом данных, за ис­ключением того, что булевской переменной не может быть присвоено значение UNKNOWN.8.1.5 Б у л е в с к и й т и п д а н н ы хОбластью значений булевского (BOOLEAN) типа данных являются два литерала: TRUE иFALSE. Булевский тип данных является конкретизацией логического типа данных.Синтаксис:173 boolean_type = BOOLEAN .
ГОСТ I* ИСО 10303-11-2000Для значений булевского типа данных установлен тот же порядок, что и для значений логи­ческого типа данных: FALSE < TRUE.П р и м е р 17 — В этом примере, атрибут, названный planar, представлен булевским типомданных. Значением для planar, связанным с экземпляром surface, может быть TRUE или FALSE.ENTITY surface;planar: BOOLEAN;E N D , ENTITY;8.1.6 С т р о к о в ы й т и п д а н н ы хОбластью значений строкового типа данных являются последовательности символов. Символа­ми, допустимыми в строковых значениях, являются символы из ИСО/МЭК 10646-1, расположенныев позициях 08—0D, и графические символы, лежащие в диапазонах 20—7Е и АО— I0FFFE.Синтаксис:293 string type = STRING | width_spec | .318 w idtlfspec =width ')* | FIXED | .317 width = numeric_expression .Строковый тип данных может иметь как фиксированную, так и переменную ширину (числосимволов). Если специально не установлено, что имеется фиксированная ширина (используя за­резервированное слово FIXED в определении), то строка имеет переменную ширину.Областью значений строкового типа данных с фиксированной шириной является набор всехпоследовательностей символов с шириной, точно указанной в определении типа.Областью значений строкового типа данных с переменной шириной является набор всехпоследовательностей символов с шириной не большей максимальной ширины, указанной в оп­ ределении.Если ширина не указана, то областью значений будет набор всех последовательностей сим­волов без ограничений по ширине этих последовательностей.Подстрочные и отдельные символы могут быть адресованы, используя подстрочные индек­сы. как описано в 12.5. Имеет значение регистр букв (верхний или нижний) в пределах строки.Правила и ограничения Выражение ширины должно иметь целое положительное значение.П р и м е р ы18 - Следующее выражение определяет строку переменной дайны, значения которой неимеют определенной максимальной длины.stringI : STRING;19 — Следующее выражение определяет строку, имеющую длину максимум десять симво­лов, значения которой могут измениться по фактической длине от нуля до десяти символов.string2 : STR1NGG0);20 — Следующее выражение определяет строку, имеющую длину точно десять символов,значения которой должны содержать десять символов.string3 : STRING! 10) FIXED:8.1.7 Д в о и ч н ы й т и п д а н н ы хОбластью значений двоичного (BINARY) типа данных являются последовательности битов,а каждый бит представляется 0 или 1.Синтаксис:172 binary type = BINARY | width spec | .318 w id th jp ec = '( ' width ')' | FIXED | .317 width = niimeric_expression ,______________________________________________________________Двоичный тип данных может иметь как фиксированную, так и переменную ширину (числобитов). Если специально не определено, что ширина фиксирована (используя зарезервированноеслово FIXED в определении), то двоичный тип данных имеет переменную ширину.Областью значений двоичного типа данных с фиксированной шириной является набор всехпоследовательностей битов с шириной, точно установленной в определении типа.14
ГОСТ Р ИСО 10303-11-2000Областью значений двоичного типа данных с переменной шириной является набор всех по­следовательностей битов с шириной, меньшей или равной максимальной ширине, указанной вопределении типа. Если ширина не определена, то областью значений является набор всех по­ следовательностей битов, без ограничения по ширине этих последовательностей.Подстроки и отдельные биты могут быть адресованы, используя подстрочные индексы, какописано в 12.3.Правила и ограничения Выражение ширины должно иметь целое положительное значение.П р и м е р 21 — Следующее выражение может быть использовано для представления ин­формации о шрифте символа.ENTITY character;representation : ARRAY |I:2<)| OF BINARY (8) FIXED;END_ENTITY;8.2 Агрегатные (сборные) типы данных Областями значений сборных (агрегатных) типов данных являются множества значений за­данного основного типа данных (см. 8.6.1). Эти значения основного типа данных называютсяэлементами сборного (агрегатного) множества. В EXPRESS устаноатено определение четырех ви­дов сборных типов данных: ARRAY (МАССИВ). LIST (СПИСОК), BAG (МУЛЬТИМНОЖЕСТ­ВО) и SET (НАБОР). Каждый вид сборного ш ла данных приписывает различные свойства длясвоих значений.Тип ARRAY яатяется упорядоченным множеством фиксированного размера. Оно проиндек­сировано последовательностью целых чисел.П р и м е р 22 — Матрица преобразований (в геометрии) может быть определена как массивмассивов (чисел).Тип LIST является последовательностью элементов, к которым можно обращаться согласноих позиции. Число элементов в списке может изменяться и быть ограничено исходя из определе­ния типа данных.П р и м е р 23 — В виде списка могут быть представлены операции плана процесса. Опера­ции упорядочены и могут быть добавлены или удалены из плана процесса.Тип BAG является неупорядоченным множеством, в котором разрешены повторяющиесяэлементы. Число элементов в мультимножестве может изменяться и быть ограничено исходя изопределения типа данных.П р и м е р 24 — Множество крепежных деталей, используемых при сборке, может бытьпредставлено как мультимножество. В состав его элементов может входить некоторое число оди­ наковых болтов, но неважно, который из них используется в конкретном отверстии.Тип SET яатяется неупорядоченным множеством элементов, в котором нет двух элементов,являющихся эквивалентными экземплярами. Число элементов в наборе может изменяться и бытьограничено исходя из определения типа данных.П ри м е р 25 — В качестве набора может быть представлено население всего мира.П р и м е ч а н и е — Сборки (агрегаты) в языке EXPRESS являются одномерными. Объекты, обычнорассматриваемые как многомерные (например, маге магические матрицы), могут быть представлены сбор­ным типом данных, чей основной тип является в свою очередь сборным типом данных. Таким образом,сборные типы данных могут быть вложенными до произвольной глубины, позволяя представлять любыеразмерности.П р и м е р 26 — Можно представить LIST [1:3] OF ARRAY |5:10| OF INTEGER, который вдействительности имеет размерность, равную двух!.8.2.1 Т и п д а н н ы х A R R A YОбластью значений типа данных ARRAY является индексирование фиксированного размерамножества подобных элементов. Нижние и верхние границы, значения которых выражаются це­лыми числами, определяют диапазон значений индекса и, таким образом, размер каждого мно­жества массива. Определение типа данных ARRAY может факультативно устанавливать, что зна­ чения массива не могут содержать повторяющихся элементов. Также может быть установлено,что значения массива не обязательно содержат элементы в каждой проиндексированной позиции.15
ГОСТ Р ИСО 10303-11-2000Синтаксис:165 arrayjype = ARRAY bound_spec OF [ OPTIONAL | | UNI QUE | b asejype . 176 bound_spec = 'Г bound Ib o u n d j T •174 b o u n d j = numeric_expression . 175 bound_2 = numeric_expression . 171 basejype = aggregationjypes | sim plejypes | nam edjypes .Допустим, что m является нижней границей, а л — верхней, тогда в массиве имеется точноп - т + I элементов. Эти элементы проиндексированы от т до п включительно (см. 12.6.1).П р и м е ч а н и е I — Гранины могут быть положительными, отрицательными или нулевыми, но нсмогут быть неопределенными (?) (см. 14.2).Правила и ограниченияa) Оба выражения в спецификации границы, b o u n d j и bound_2. должны выражаться цело­численными значениями. Ни одно из них не должно иметь неопределенного (?) значения.b) Выражение b o u n d j задает нижнюю границу массива. Оно должно иметь наименьшийиндекс, при котором имеется значение массива для этого типа данных.c) Выражение bound_2 задает верхнюю границу массива. Оно должно иметь наибольшийиндекс, при котором имеется значение массива для этого типа данных.d) Выражение b o u n d j должно быть меньшим или равным bound_2. e) Если указано ключевое слово OPTIONAL, то значение массива этого типа данных можетиметь неопределенное (?) значение в одной или нескольких проиндексированных позициях.0 Если ключевое слою OPTIONAL не указано, значение массива этого типа данных недолжно содержать неопределенных (?) значений ни в одной проиндексированной позиции.g) Если указано ключевое слово UNIQUE, то каждый элемент значения массива этого типаданных должен отличаться (то есть не быть эквивалентным экземпляром) от каждого другогоэлемента в том же самом значении массива.П р и м е ч а н и е 2 — Оба ключевых слова OPTIONAL и UNIQUE могут использоваться в одном и томже определении типа данных ARRAY. Это нс исключает многократного появления неопределенных (?) зна­ чений в отдельных элементах массива. Эго происходит потому, что сравнен не двух неопределенных (?) зна­ чений дает результат UNKNOWN, поэтому условие уникальности нс нарушается.П р и м е р 27 — Данный пример показывает, как объя&зяется многомерный ARRAY.sectors : ARRAY | 1 : 10 | OF—первое измерениеARRAY | И : 14 1 O F—второе измерениеUNI QUE something:Мерный массив содержит 10 элементов типа ARRAY |11:14| OF UNIQUE something. Всего 40 элементов типа данных something в атрибуте, названном sectors. Внутри каждогоARRAY 111:14] не могут появляться повторяющиеся элементы, однако тот же экземплярsomething может появляться в двух различных значениях ARRAY 111:14] внутри единственногозначения для атрибута названного sectors.8.2.2 Т и п д а н н ы х L I S T Областью значений типа данных LIST являются последовательности подобных элементов.Необязательные нижние и верхние границы, значения которых выражаются целыми числами,определяют минимальное и максимальное число элементов, которые могут содержаться во мно­ жестве. определенном типом данных LIST. В определении типа данных LIST может быть факуль­ тативно установлено, что значение списка не может содержать повторяющихся элементов.Синтаксис:237 list j v p e = LIST | bound_spec 1 OF | UNI QUE | basejype .176 bound_spec = *|* b o u n d jb o u n d j.174 b o u n d j = numeric_expression . 175 b o u n d j = numeric_expression .171 b asejype = aggregation jy p e s | simple jy p e s | named Jypes.Правила и ограниченияа)Выражению b o u n d j должно быть присвоено целочисленное значение, большее или рав­ное нулю. Оно задает нижнюю границу, определяющую минимальное число элементов, которое16
ГОСТ Р ИСО 10303-11-2000может входить в значение списка этого типа данных. Выражение bound_l не должно иметь неоп­ ределенного (?) значения.b) Выражению bound_2 должно быть присвоено целочисленное значение, большее или рап­ное bound_l, или неопределенное (?) значение. Оно задает верхнюю границу, определяющуюмаксимальное число элементов, которое может входить в значение списка этого типа данных.Если данное значение является неопределенным (?), то число элементов в значении спискаэтого типа данных не ограничено сверху.c) Если выражение bound_spec опущено, то пределы — |0:?|.d) Если указано ключевое слово UNI QUE, каждый элемент в значении списка этого типаданных должен отличаться (то есть не являться эквивалентным экземпляром) от любого другогоэлемента в том же самом значении списка.П р и м е р 28 — Данный пример определяет список массивов. Список может содержать отнуля до десяти массивов. Каждый массив из десяти целых чисел должен отличаться от всех дру­ гих массивов в конкретном списке.com plexjist : L1ST|0:!0| OF UNI QUE ARRAY!I:10| OF INTEGER;8.2.3 Т и п д а н н ы х B A G Областью значений типа данных BAG являются неупорядоченные множества подобныхэлементов. Необязательные нижние и верхние границы, которые выражаются целочисленнымизначениями, определяют минимальное и максимальное число элементов, которые могут содер­жаться в множестве, определяемом типом данных BAG.Синтаксис;170 bag. type = BAG | bound „spec | OF base_type . 176 bound_spec = '[' b ou n d jbound 2 4Г .174 bound_l = numeric_expression .175 bound_2 = numeric_expression . 171 base_type = aggregation_types | simple_types | named_types .Правила и ограниченияa) Выражению hound_l должно быть присвоено целочисленное значение, большее или рап­ное нулю. Оно задает нижнюю границу, определяющую минимальное число элементов, котороеможет входить в значение мультимножества этого типа данных. Выражение bound_I не должноиметь неопределенного (?) значения.b) Выражению bound_2 должно быть присвоено целочисленное значение, большее или равноеbound_I. или неопределенное (?) значение. Оно задает верхнюю границу, определяющую макси­мальное число элеме1ггов, которое может входить в значение мультимножества этого типа данных.Если данное значение является неопределенным (?), то число элементов в значении муль­тимножества этого типа данных не ограничено сверху1.c) Если выражение bound_spec пропущено, то пределы — |0:?|.П ри м е р 29 — Данный пример определяет атрибут как мультимножество точки (где точка —поименованный тип данных, описанный в другом месте).a_bag_of_points : BAG OF point;Значение атрибута, названного a_bag_of_points, может содержать ноль или более точек. Тотже экземпляр точки может появиться более одного раза в значении a_bag_of_points.Если требуется, чтобы значение содержало по крайней мере один элемент, го в специфика­ции может быть проставлена нижняя граница:a_bag..of_points : BAG |1:?| OF point:Значение атрибута, названного a_bag_of_points, теперь должно содержать, по крайней мере,одну точку.8.2.4 Т и п д а н н ы х S E T Областью значений типа данных SET япляются неупорядоченные множества подобныхэлементов. Тип данных SET является конкретизацией типа данных BAG. Необязательные ниж­ние и верхние границы, выраженные целочисленными значениями, определяют минимальное имаксимальное число элеметгов. которые могут содержаться во множестве, определенном типомданных SET. Множество, определенное типом данных SET, не должно содержать повторяющихсяэкземпляров.17
ГОСТ Р ИСО 10303-11-2000 Синтаксис:285 set_type = SET | bound_spec | OF base_type .176 bound_spec =bound_lbound_2 T .174 bound_l = numeric_expression . 175 bound_2 = numeric_expression . 171 base_type = aggregation_types | simple_lypes | named_types .Правила и ограниченияa) Выражению bound_l должно быть присвоено целочисленное значение, большее или рав­ное нулю. Оно залает нижнюю границу, определяющую минимальное число элементов, котороеможет входить в значение набора этого типа данных. Выражение bound_l не должно иметь неоп­ределенного (?) значения.b) Выражению bound_2 должно быть присвоено целочисленное значение, большее или рав­ное bound_l, или неопределенное (?) значение. Оно задает верхнюю границу, определяющуюмаксимальное число элементов, которое может входить в значение набора этого типа данных.Если данное значение является неопределенным (?), то число элементов в значении набораэтого типа данных не ограничено сверху.c) Если выражение bound_spec пропущено, то пределы — |0:?|.d) Каждый элемент при появлении в типе данных set должен отличаться (то есть, не яв­ляться эквивалентным экземпляром) от любого другого элемента в том же самом значении на­бора.П р и м е р 30 — Этот пример определяет атрибут как набор точек (где точка — поименован­ный тип данных, описанный в другом месте).a_set_of points : SET OF point;Атрибут, названный a_set_ofjoin ts, может содержать ноль или более точек. Требуется, что­бы каждый экземпляр точки (в значении набора) отличатся от каждой другой точки в наборе.Если требуется, чтобы значение содержало не более 15 точек, в спецификации должна бытьустановлена верхняя граница:a_set_of points : SET |0:15| OF point;Значение атрибута а_ set_of j o i n t s теперь должно содержать не более 15 точек.8.2.5 У н и к а л ь н о с т ь з н а ч е н и я в с о в о к у п н о с т я х ( а г р е г а т а х )Уникальность между элементами совокупности (агрегата) основана на сравнении экземпля­ра (см. 12.2.2). Совокупность (агрегат) может быть ограничена уникальными значениями своихэлементов при помощи использования функции VALUE_UNIQUE (см. 15.29).П р и м е р 31 — Набор, ограниченный значением уникальности.TYPE value unique set = SET OF a;WHEREwrl : value unique(SELF);E N D J T P E ;П р и м е ч а й и с — Определяемая модельщиком уникальность значения может быть установлена черезпару функций, называемых, например, my equal и myjnique. как показано в следующем псевдокоде.FUNCTION myjequal (* Returns TRUE if vl equals' v2 •)END_ FUNCTION;FUNCTION my_unique(c: AGGREGATE OF GEMRIC) : LOGICAL;(* Returns FALSE if two elements o f c have the same 'value' Else returnsUNKNOWN if any element comparison is UNKNOWN Otherwise returns TRUE *)LOCALresult: LOGICAL;unknownp : BOOLEAN := FALSE;END_ LOCAL; IF (SIZEOF(c) = 0) THENRETURN(TRUE); END IF;18
ГОСТ Р ИСО 10303-11-2000REPEAT i := LOINDEX(c) ТО (HIINDEX(c) - 1);REPEAT j := (i+1) TO H llND EX(c);resul t:= mv_equal(c |i| , c|j|);IF (result = TRUE) THENRETURN(FALSE); END IF;IF (result = UNKNOWN) THENUnknownp := TRUE; E N D JF ;END REPEAT;END„REPEAT; IF unknownp THENRETURN( UN KNOWN);ELSERETURN(TRUE);END IF; END_FU NOTION;Функция my_equal должна иметь ряд свойств, позволяющих формировать классы эквива­лентности. В следующем примере S — набор рассматриваемых объектов, a my_equal (I, j), где i и jпринадлежат S, возвращает одно из значений |FALSE, UNKNOWN, TRUE).a) my_equal(l, 1) имеет значение TRUE для всех i в S (так как неопределенность (?) не при­надлежит S, то не требуется, чтобы my_equal (?,?) имело значений TRUE);b) my_equal(i, j) = my_equal(j, i) для всех i, j в Л'; c) (my_equal(i, j) = TRUE) AND для всех i, j. k в S.8.3 Поименованные типы данныхПоименованными типами данных являются типы, которые могут быть объявлены в фор­мальной спецификации. Существуют два вида поименованных типов данных: объекта и опреде­ленный. В настоящем разделе описаны ссылки на поименованные типы данных; объявление этихтипов данных описано в разделе 9.8.3.1 Т и п д а н н ы х о б ъ е к т а Типы данных объекта устанавливаются в соответствии с объявлениями ENTITY (см. 9.2).Тип данных объекта устанавливается пользователем путем присвоения идентификатора объекту.На тип данных объекта ссылаются по его идентификатору.Синтаксис:147 entity_ref = entity id .Правила и ограничения Выражение entity_ref должно быть ссылкой на объект, видимый в активной области (см.раздел 10).П р и м е р 32 — В данном примере тип данных объекта point использован для представленияего атрибута.ENTITY point;х, v, z : REAL;END^ENTITY;ENTITY line;pO. pi : point;END_ENTITY;Объект line имеет два атрибута, названных р0 и pi. Типом данных каждого из этих атрибу­тов является point.8.3.2 О п р е д е л е н н ы й т и п д а н н ы хОпределенные типы данных назначаются объявлениями TYPE (см. 9.1). Определенный типданных устанавливается пользователем путем присвоения идентификатора типу. На определен­ный тип данных ссылаются по его идентификатору.Синтаксис;154 tvpe_ref = tv p ejd .19
ГОСТ Р ИСО 10303-11-2000Правила и ограничения Выражение type_ref должно быть именем определенного типа данных, видимого в активнойобласти (см. раздел 10).П р и м е р 33 — Следующая спецификация является определенным типом данных, исполь­зуемым для указания единиц измерения, связанных с атрибутом.TYPE volume = REAL;EN D TYPE; ENTITY PART;bulk : volume;END.ENTITY;Атрибут, названный bulk, предстаазяется действительным числом, но использование опре­деленного типа данных volume помогает разъяснить смысл и контекст действительного числа; на­пример, оно определяет volume в отличие от другого объекта, иредстаазяемого типом REAL.8.4 Созданные типы данных Существуют два вида созданных типов данных в EXPRESS: ENUMERATION (перечисляе­мые) типы данных перечня и SELECT (выбираемые) типы данных выбора. Эти типы данныхимеют подобные синтаксические структуры и используются для обеспечения исходных представ­лений определенных типов данных (см. 9.1).П р и м е ч а н и е — Созданные типы данных в EXPRESS могут быть использованы только как пред­ставления для определенных типов данных.8.4.1 П е р е ч и с л я е м ы й т и п д а н н ы х Областью значений типа данных ENUMERATION (перечисляемого) яазяется упорядочен­ный набор имен. Имена представляют собой значения перечисляемого типа данных. Эти именаобозначаются как enumerationjd, и на них ссылаются как на перечисляемые элементы.Синтаксис:201 enumerationjype = ENUMERATION OF '(' enumeration_id {enumerationjd } ')' .Два различных типа данных ENUMERATION могут содержать тот же самый enumerationjd.В этом случае любая ссылка на enumerationjd (например, в выражении) должна быть переопре­делена в соответствии с идентификатором типа данных для обеспечения однозначности ссылки.Ссылка затем появляется как typejd.enumerationjd.П р и м е ч а н и е — Значение typejd всегда доступно, потому что EXPRESS допускает тип данныхENUMERATION только как исходное представление определенного типа данных.Правила и ограниченияa)В целях сравнения, упорядочение значений перечисляемого типа должно быть опреде­лено их относительной позицией в списке enumerationjd. первый встречающийся элемент дол­жен быть меньше, чем второй; второй — меньше, чем третий, и тл.b)Сравнение между значениями различных типов данных ENUMERATION не определено.c)Перечисляемый тип должен быть использован только как исходный тип определенноготипа данных.П р и м е р 34 — В данном примере типы данных ENUMERATION использованы для того,чтобы показать, как движутся различные виды транспортных средств. TYPE car_can_move = ENUMERATION OF(left, right, backward, forward):END_TYPE;TYPE p!ane_can_move = ENUMERATION OF(left, right, backward, forward, up, down);END_TYPE;Элемент перечисления left имеет два независимых определения, они задаются каждым ти­пом. являющимся компонентом. Между двумя этими определениями идентификатора left не име­ется никакой взаимосвязи. Ссылка на left или right сама по себе яазяется неоднозначной. Чтобыразрешить эту неоднозначность, ссылка на любое из этих значений должна быть квалифицирова­ на именем типа, например, car_can_move.left.20
ГОСТ Р ИСО 10303-11-20008.4.2 В ы б и р а е м ы й т и п д а н н ы х Областью значений типа данных SELECT является объединение областей значений поиме­нованных типов данных в соответствующем списке выбора. Тип данных SELECT является обоб­щением каждого из поименованных типов данных в списке выбора.Синтаксис:284 selectjyp e = SELECT '(' named_types {named_types } ')' .Правила и ограничения: Каждый элемент в списке выбора должен быть типом данных объекта или определеннымтипом данных.Тип данных SELECT должен использоваться только как исходный тип определенного типаданных.П р и м е ч а н и е — Значение тина данных SELECT может быть значением более чем одного из по­именованных типов данных, определенных в списке выбора для данною выбираемою типа данных. Эта си­туация возникает только тогда, когда соответствующие поименованные типы данных яазяются частью об­щего графа наследования (9.2.3).П р и м е р 35 — Если а и b являются подтипами с и они связаны выражением AN DOR. исуществует тип. определенный SELECT (а, Ь); то можно получитъ значение типа данныхSELECT, которое может быть равным а и b одновременно.П р и м е р 36 — В данном контексте должен быть сделан выбор среди нескольких типовпредметов.TYPEattachment_method = S£LECT(permanent attachment, temporary .attachment);END.TYPE;TYPE permanent_attachment = SELECT(glue, weld);END_TYPE;TYPE temporary attachment = SELECT(nail. screw);END.TYPE;ENTITY nail;bodyjength : REAL;head area: REAL;EN D . ENTI TY;ENTITY screw;body_length : REAL;pitch: REAL;END_ENTITY:ENTITY glue;composition : material_composition;solvent: material_composition;END_ENTITY:ENTITY weld;composition : material_composition;END_ ENTITY;ENTITY wall_mounting;mounting : product;on; wall;using: attachment method;END_ENTITY:Объект walI_mounting включает изделие в границы, используя постоянный или временныйметод присоединения, оба из которых подразделяются далее. Значение wall_mounting будет иметьатрибут using, который является значением одного nail (гвоздя), screw (винта), glue (клея) илиweld (сварного шва).21
ГОСТ I* ИСО 10303-11-2000К.5 Обобщенные типы данныхСинтаксис:211 generalized_types = aggregatejype | general_aggregation_types [ generic_type ._____________Обобщенные типы данных используются для установления обобщения некоторых другихтипов данных и могут быть использованы в конкретных и очень специфических контекстах. ТипGENERIC яиляется обобщением всех типов данных. Агрегатный тип данных AGGREGATE яатя-ется обобщением всех сборных (агрегатных) типов данных. Общие сборные (агрегатные) типыданных являются обобщениями сборных (агрегатных) типов, которые ослабляют некоторые огра­ничения, обычно налагаемые на сборные (агрегатные) типы данных. Все эти типы данных опре­делены в 9.5.3.8.6 Классификация использования типов данныхВ языке EXPRESS типы данных используются тремя различными способами: основные ти­пы данных используются в качестве представления атрибутов и сборных (агрегатных) элементов;параметрические типы — как представления <]юрмальных параметров для функций и процедур; аисходные типы — как представления определенных типов данных. Некоторые классы типов дан­ ных м о т быть использованы любым из этих способов, в то время как другие могут быть ис­ пользованы только в определенном контексте. Эти рахзичня показаны в таблице 7.Т а б л и ц а 7 — Использование типов данныха) Основные типы данных — представление атри-Типаb сбута или элементов совокупности.Простые (simple) типы данныхСборные (aggregation) типы данныхЬ) Параметрические тины данных — прсдставлс-Поименованные (named) типы данныхние формального параметра, локальной перс-Созданные (constructed) типы данныхменной или функционального результатаОбобщенные (generalized) типы данныхс) Исходные типы данных — представление опре­деленного типа (см. 9.1).8.6.1 О с н о в н ы е т и п ы д а н н ы х Основные типы данных используются в качестве представления атрибутов или как основ­ные типы сборных (агрегатных) типов данных.Основными типами данных являются простые, сборные (агрегатные) и поименованные ти­пы данных.Синтаксис:171 base_type = aggregation, types | sim plejypes | nam edjypes . 8.6.2 П а р а м е т р и ч е с к и е т и п ы д а н н ы хПараметрические типы данных используются в качестве представления формальных пара­метров для алгоритмов (функций и процедур). Параметрические типы данных также могут такжеиспользованы для представления возвратных типов функций и локальных переменных, объяв­ленных в алгоритмах.Параметрическими типами данных являются простые, поименованные и обобщенные типыданных.Синтаксис:253 parameterjype = generalized.types | nam edjypes | simple_types .8.6.3 И с х о д н ы е т и п ы д а н н ы хИсходные (underlying) типы данных используются в качестве представления определенныхтипов данных.Исходными типами данных являются простые, сборные (агрегатные), созданные и опреде­ленные типы данных.Синтаксис:309 underlying_type = constructed types | aggregation „types | siniple_types |type_ref. 22
ГОСТ Р ИСО 10303-11-2000 9 ОбъявленияВ настоящем разделе определены различные объявления, доступные в языке EXPRESS.EXPRESS-объянленне создает новый EXPRESS-элемент и связывает с ним соответствующийидентификатор. На EXPRESS-элемент можно ссылаться в другом месте путем описания связан­ ного с ним имени (см. раздел 10).Принципиальные возможности языка EXPRESS установлены в следующих объявлениях:- типа; - объекта; - схемы; - константы; - функции; - процедуры; - правила. Объявления могут быть или явными или неявными. В настоящем разделе полностью описа­ны явные объявления. Неявные объявления описаны в настоящем и последующих разделах,включая их элементы и условия, при которых они устанавливаются.9.1 Объявление типа Объявление типа создает определенный тип данных (см. Н.3.2) и объявляет идентификатордля ссылки на этот тип. Конкретно typ ejd объявляется как имя определенного типа данных.Представлением этого типа данных является underlyingjype. Область значения определенноготипа данных совпадает с областью значений underlying^)ре. далее ограниченного where_clau.se(если оно есть). Определенный тип данных является конкретизацией исходного типа и, следова­тельно. совместим с исходным типом.П р и м е ч а н и е 1 — Октавные определенные липы данных могул быть связаны с тем же самымпредставлением. Имена могут помочь читателю в понимании назначения (или контекста) примененияu«deriying_ty рс Синтаксис:304 type_decl = TYPE ty p e jdunderlying, type| where_clause | END_TYPE.309 underlyingjype = constructed_tvpes | aggregationjypes | simple_types |type_ref.П р и м е р 37 — Следующее объявление указывает определенный тип данных, названныйperson_name. с исходным представлением типа STRING. Определенный тип person_name далеедоступен для использования в качестве представления атрибутов, локальных переменных и фор­мальных параметров. Это придает ему большее количество значений, чем простое использованиетипа STRING.TYPE person name = STRING;END..TYPE;Правила о б л а е т значений (оператор WHERE) Правила области значений устанавливают ограничения, которые лимитируют область значе­ний определенного типа данных. Область значений определенного типа данных является обла­стью значений их исходного представления, ограниченного правилом(ами) области значений.Правила области значений следуют за ключевым словом WHERE.Синтаксис:315 \vhere_clause = WHERE domain_rule{ domain_mle} .Каждому domain_rule может быть задана метка правила. Ссылки на метки правил не описа­ны в настоящем стандарте.П р и м е ча н и е 2 — В случае их задания, метки правил могут быть использованы в реализациях, на­пример для документации, сообщений об ошибких и обязательных спецификаций. Для этого желательноиспользование разметки правил.Правила и ограниченияа) Каждому правилу области значений должно присваиваться логическое (TRUE. FALSEили UNKNOWN) или неопределенное (?) значение.23
ГОСТ I* ИСО 10303-11-2000b) Ключевое слово SELF (см. 14.5) должно появляться по меньшей мере один раз в каждомправиле области значений. Правило области значений должно выражаться конкретным значени­ем в области значений исходного типа путем замены обнаруженной в правиле лексемы SELF со­ ответствующим значением.c) Правило области значений будет выполнено, если выражению будет присвоено значениеTRUE, и будет нарушено, если выражению будет присвоено значение FALSE, и не будет ни вы­полненным ни нарушенным, если выражению будет присвоено неопределенное (?) значение илизначение UNKNOWN.d) Область значений определенного типа данных состоит из всех значений области значе­ний исходного типа, которые не нарушают ни одно из правил области.e) Метки правила области значений должны быть уникальны внутри заданного объявленияTYPE.П р и м е р 38 — Может быть создан определенный тип данных, который ограничивает ис­ходный целочисленный тип только положительными целыми числами.TYPE positive = INTEGER; WHEREnotnegative ; SELF > 0;END.TYPE;Любой атрибут, локальная переменная или формальный параметр, которые объявлены какпринадлежащие к положительному типу, могут иметь только положительные целочисленныезначения.9.2 Объявление объекта Объявление ENTITY создает тип данных объекта и объявляет идентификатор для ссылки нанего.Каждый атрибут представляет свойство объекта и может быть связан со значением каждогоэкземпляра объекта. Тип данных атрибута устанавливает область его возможных значений.Каждое ограничение представляет одно из следующих свойств объекта:-ограничения на число, вид и организацию значений атрибутов. Они определяются в объ­явлениях атрибута;- требуемые отношения между значениями атрибута или ограничениями на допустимые зна­чения атрибутов для данного экземпляра. Они представлены в настоящем разделе и на них ссы­лаются как на правила области значений;-требуемые отношения между значениями атрибутов для всех экземпляров типа данныхобъекта. Они появляются в:отдельном разделе, где на них ссылаются как на уникальные ограничения,другом разделе, где на них ссылаются как на основные ограничения,глобальных правилах (см. 9.6);- требуемые отношения между экземплярами нескольких типов объекта. Они не появляютсяв объявлении объекта непосредственно, а проявляются как глобальные правила (см. 9.6).Синтаксис:196 entity_decl = entity_head entity J>ody END_ENTITY *;* .197 entityJtead = ENTITY entity J d | subsuper j.194 entity_body = { explicit_attr) | derive_clause | | inverse_clause || unique „clause | | where„clause | .Правила и ограничения:a) Каждый идентификатор атрибута и метка, указанная в объявлении объекта, должны бытьуникальными внутри объявления.b) Подтип не должен объявлять атрибут, имеющий тот же самый идентификатор в качествеатрибута одного из супертипов, за исключением того, когда подтип переобъянляет атрибут, унас­ледованный из одного из его супертипов (см. 9.2.3.4).9.2.1 А т р и б у т ы Атрибуты типа данных объекта предстаатяют важные черты, свойства или характеристикиобъекта. Объяатение атрибута устанавливает отношение между типом данных объекта и типомданных, вызванным атрибутом.24
ГОСТ Р ИСО 10303-11-2000Имя атрибута иредстаатяет роль, играемую связанным с ним значением, и контексте объек­та. в котором оно появляется.Существуют три вида атрибутов: - явный — атрибут, чье значение должно быть обеспечено реализацией для создания экзем­пляра объекта;- вычисляемый — атрибут с вычисляемым значением; - инверсный — атрибут, чье значение состоит из экземпляров объекта, которые используютобъект в конкретной роли.Каждый атрибут устанавливает отношения между экземпляром объяазенного типа данныхобъекта и некоторым другим экземпляром или экземплярами. Атрибут, представляемый несбор­ным (неагрегатным) типом данных устанавливает простое отношение с этим типом данных. Ат­ рибут, представляемый сборным (агрегатным) типом данных, устанавливает как коллективныеотношения для объединения значений, гак и раздельные отношения с элементами этих сборныхзначений. Кроме того, каждый атрибут устанаативает неявное инверсионное отношение междуосновным и объяазенным типом данных объекта.П р и м е ч а н и е — Дальнейшее обсуждение этих отношений см. в приложении G.9.2.1.1 Явный атрибутЯвный атрибут представляет свойство, значение которого должно быть обеспечено реализа­цией для создания экземпляра. Каждый явный атрибут определяет отдельное свойство. Объявле­ ние явного атрибута создает один или несколько явных атрибутов, имеющих указанную областьзначений, присвоенную каждому из них его идентификатором.Синтаксис:203 explicit.attr = attribute_decl { Y attribute.decl )| OPTIONAL |b asejype.167 attribute^ decl = attributejd | qualified.attribute .171 base.type = aggregation „types | simple.types | named.types .П р и м е ч а н и е 1 — Синтаксис для qualifkd_attributc предусматривает переопределение атрибута, ко­торое описано в 9.2.3.4.Правила и ограниченияa) Если явный атрибут не объявлен как OPTIONAL, каждый экземпляр типа данных объек­та должен иметь значение для этого атрибута.b) Ключевое слово OPTIONAL указывает на то. что в данном экземпляре объекта атрибутне обязан иметь значение. Если атрибут не имеет значения, то считается, что его значение будетнеопределенным (?).Ключевое слово OPTIONAL указывает на то. что атрибут всегда имеет смысл для экземпля­ров этого типа объекта, но для некоторых экземпляров может не быть такого значения, котороеиграло бы роль, определенную атрибутом. OPTIONAL не указывает па то, что атрибут не имеетзначения для некоторых экземпляров типа данных объекта.П р и м е ч а н и я 2 Случай, когда атрибут нс имеет значения для некоторых экземпляров, правильно моделируется пу­тем определения подтипа (см. 9.2.3).3 Необходимо обратить внимание на ссылки к необязательным атрибутам, особенно в правилах, таккак они могут нс иметь никакого значения. Встроенная функция EXISTS может быть использована для оп­ределения существования значения или встроенная функция NVL может быть использована для обеспече­ния вычислении значения но умолчанию. Если ни одна из них нс используется, могут быть получены не­ожиданные результаты.Г1 ри м е р 39 — Следующие объявления эквивалентны:ENTITY point;х. у, z : REAL;END ENTITY:ENTITY point;x : REAL:v : REAL:z : REAL;END ENTITY;25
ГОСТ I* ИСО 10303-11-20009.2.1.2 Вычисляемый атрибутВычисляемый атрибут представляет собой такое свойство, значение которого вычисляетсяпутем присвоения численного значения выражению. Вычисляемые атрибуты объяатяются послеключевого слова DERIVE. Объявление состоит из идентификатора атрибута, типа его представ­ления и выражения, используемого для вычисления значения атрибута.Синтаксис:190 derived_attr = attribute_decl *:* basejypeexpression *;* .167 attribute_dcel = anributejd | qualified_attribute . 171 base_type = aggregation., types | simple j y p e s | named.,types .П р и м е ч а н и е — Синтаксис для qualificd atlributc предусматривает переопределение атрибута, кото­рое описано в 9.2.3.4.Выражение может ссылаться на любой атрибут, константу (включая SELF) или идентифика­тор функции, который находится в области применения.Правила и ограниченияa) Выражение должно быть совместимо по присваиванию (см. 13.3) с типом данных атрибута. b) Ятя конкретного экземпляра объекта значение вычисляемого атрибута определяется при­своением значения выражению путем замены каждого обнаруженного SELF на текущий экземп­ляр. а каждой ссылки на атрибут — на соответствующее значение атрибута.П р и м е р 40 — В данном примере, круг (circle) определяется центром (centre), осью (axis) ирадиусом (radius). В дополнение к этим явным атрибутам необходимо учесть важные свойства,такие как плоша,ть (area) и периметр (perimeter). Это выполняется путем определения их как вы­ числяемых атрибутов, задающих значения в виде выражений.ENTITY circle;centre: point;radius: REAL;axis: vector;DERIVEarea: REAL := Pl*radius*-2;perimeter : REAL := 2.0-Pl-radias:END ENTITY:9.2.1.3 Инверсный атрибутЕсли другой объект устанавливает отношение с данным объектом посредством явного атри­бута, инверсный атрибут может быть использован, чтобы описать это отношение в контекстеданного объекта. Этот инверсный атрибут может также быть использован для дальнейшего огра­ничения отношения.Инверсные атрибуты объявляются после ключевого слова INVERSE. Каждый инверсный ат­рибут должен быть определен отдельно.Основные ограничения инверсного отношения устанавливаются спецификацией границыинверсного атрибута таким же обра зом, как для явных атрибутов.П р и м е ч а н и е I — Подробная информация об отношении между явными и инверсными атрибута­ми приведена в приложении G.Инверсный атрибут представляется типом данных объекта или типами BAG и SET, яатяю-шимися основным типом типа данных объекта. На тип данных объекта ссылаются как на ссы­лочный объект.Объявление инверсного атрибута также называет явный атрибут ссылочного объекта. Ятяконкретного экземпляра типа данных данного объекта значение инверсного атрибута состоит изэкземпляра или экземпляров типов данных ссылочного объекта, которые используют данный эк­ земпляр в определенной роли.Каждое из трех возможных предстаатений типов для инверсии налагает некоторые ограни­чения на отношение между двумя объектами.Тип данных BAG. Указание границ, при его наличии, определяет минимальное и макси­мальное число экземпляров ссылочного объекта, которое может использовать экземпляр данногообъекта. Так как мультимножество может содержать отдельный экземпляр несколько раз, то не­ сколько экземпляров могут ссылаться на данный экземпляр, а конкретный экземпляр можетссылаться на данный экземпляр более одного раза.26
ГОСТ Р ИСО 10303-11-2000П р и м е ч а н и я2 Если ишкртированный атрибут представлен нсуникальиым сборным (агрегатным) типом данных, тоесть списком или массивом, для которых не установлено ключевое слово UNIQUE, или мультимножеством,конкретный экземпляр данного объекта может быть использован конкретным экземпляром ссылочного объ­екта несколько раз.3 Если инвертированный атрибут представлен уникальным сборным (агрегатным) типом данных, напримерсписком или набором, которые определены ключевым словом UNIQUE, или набором, конкретный экземплярданного объекта может быть использован только алии раз конкрелным экземпляром ссылочного объекта.Факультативно инверсный атрибут выражается определением нижней границы равным ну­лю. показывающим, что на заданный экземпляр данного объекта не обязан ссылаться ни одинэкземпляр ссылочного объекта.Тип данных SET. Как и для BAG, но с дополнительным ограничением, что ссылочные эк­земпляры должны быть уникальными. Это ограничение также означает, что конкретный ссылоч­ ный экземпляр может использовать данный экземпляр в инвертированной роли только одни раз.11 ри м еча н не 4 — Если инвертированный атрибут представлен уникальным сборным (агрегатным)типом данных, например списком или массивом, которые определены ключевым словом UNIQUE, или на­бором, инверсия не добавляет новых ограничений относительно уникальности.Тип данных объекта. Инверсный атрибут точно указывает, что имеется один экземпляр типаданных ссылочного объекта, который использует данный экземпляр в конкретной роли. В этомслучае мощность связи инверсного отношения 1:1.Синтаксис:234 inverse_attr = attributc_decl| ( SET | BAG ) | bound.spec | OF | entity_refFOR a t t r i b u t e _ r e f .167 attribute _decl = attributeJd [ qualified^ attribute . 176 bound_spec = T bound_lbound_2 ’ |' •174 bound. 1 = numeric.expression .175 bound_2 = numeric.expression .Правила и ограниченияa)Объект, определяющий объявление прямого отношения с данным объектом, должен де­лать это так же, как и явный атрибут.b)Тип данных явного атрибута в объекте, определяющем объявление прямого отношения,должен быть объявлен данным объектом через один из его супертипов или сборным (агрегатным)типом данных, используя данный объект или один из его супертипов как основной тип.П р и м е р 41 — Предполагается, что мы имеем следующее объявление для дверного блока(door assembly):ENTITY door;handle : knob; hinges : SET |1:?| OF hinge;END.ENT1TY;Затем мы можем пожелать ограничить объявление кнопок (knob) так. чтобы кнопки моглиприсутствовать только, если они использованы в роли handle в одном из экземпляров двери.ENTITY knob;INVERSEopens : door FOR handle;END_ENTITY:С другой стороны, мы можем просто пожелать определить, чтобы кнопка использовалась водной или не в одной двери (например, она либо уже на двери или еще только должна быть кней присоединена).ENTITY knob;INVERSEopens : SET [0:l| OF door FOR handle;END ENTITY;27
ГОСТ Р ИСО 10303-11-20009.2.2 Л о к а л ь н ы е п р а в и л аЛокальные правила утверждаются для области значений экземпляров объекта и таким образомдействуют для всех экземпляров типа данных этого объекта. Существуют два вида локальных пра­вил. Правила уникальности контролируют уникальность значений атрибутов среди всех экземпля­ ров типа данных заданного объекта. Правила области значений описывают другие ограничения пазначения атрибутов каждого экземпляра типа данных заданного объекта или между ними.Каждому из локальных правил может быть присвоена метка правила. Ссылки на метки пра­вил в настоящем стандарте не определены.П р и м е ч а н и е — Метки правил, при их наличии, мшуг быть использованы для обозначения правилв реализациях, например в документации, сообщениях об ошибках и технических заданиях. Присвоениеметок правилам предполагается использовать именно для этой пели.9.2.2.1 Правило уникальностиВ правиле уникальности может быть определено ограничение уникальности для отдельныхатрибутов или комбинаций атрибутов. Правила уникальности следуют за ключевым словомUNIQUE и определяют или одиночное имя атрибута, или список имен атрибута. Правило, кото­рое определяет имя одиночного атрибута, называемое простым правилом уникальности, устанав­ливает. что никакие два экземпляра типа данных объекта в области значений не должны исполь­зовать тот же самый экземпляр для поименованного атрибута. Правило, которое определяет д мили несколько имен атрибутов, называемое совместным правилом уникальности, определяет, чтоникакие два экземпляра типа данных объекта не должны иметь ту же самую комбинацию экзем­пляров для поименованных атрибутов.П р и м е ч а н п е — Проверяется эквивалентность экземпляров, а нс равенство значений (см. 12.2.2).Синтаксис:310 tmique_clau.se = UNIQUE unique_rule{ unique_rule} .311 unique rule = | labelJ refercnced_attribute { Y referenced_attribute } .266 referenced_attribuie = attribuie_ref| qualilled_attribute .Правила и ограничения Когда явный атрибут, который отмечен как OPTIONAL (см. 9.2.1.1), появляется в правилеуникальности, и если при этом атрибут не имеет значения для конкретного экземпляра объекта,правило уникальности ни нарушено, ни утверждено и, следовательно, экземпляр объекта являет­ся элементом области значений.П р и м е р ы42 — Если объект имел три атрибута, называемые а. b и с, мы могли бы получить:ENTITY е;a, b. с : INTEGER;UNIQUEurl : а;ur2 : b;игЗ : с;END_ ENTITY;Это означает, что два экземпляра объявляемого типа данных объекта не могут иметь одно итоже значение для а. b или с.43 — Объект person_name может выглядеть следующим образом:ENTITY person„name;last: STRING;first: STRING;middle: STRING;nickname: STRING;ENDJENTITY;и может быть использован как:ENTITY employee;28
ГОСТ Р ИСО 10303-11-2000badge -.NUMBER;name : person_name;UNIQUEurl : badge, name;ENDJENTITY;В этом примере два экземпляра объекта person_name могли бы иметь тот же самый наборзначений для четырех атрибутов. В случае служащего (employee), однако, имеется требование,чтобы признак (badge) и имя (паше) вместе были уникальными. Таким образом, два экземпляраemployee могут иметь то же самое значение или badge, или name. Однако никакие дна экземпляраemployee не могут иметь одинаковых экземпляров badge и name вместе, так как эта комбинацияэкземпляров должна быть уникальна (см. 9.6 для метода уникальности значения описываемогоатрибута).9.2.2.2 Правша области значений (оператор WHERE)Правила области значений ограничивают значения отдельных атрибутов или комбинацийатрибутов для каждого экземпляра объекта. Все правила области значений следуют за ключевымсловом WHERE.Синтаксис: 315 \vhere_clause = WHERE domainjrule{ domain_rule *;* J .Правила и ограниченияa)Каждому выражению правила области значений должно присваиваться логическое(TRUE, FALSE или UNKNOWN) или неопределенное (?) значение.b)Каждое выражение правила области значений должно включать ссылку на SELF илиатрибуты, объявленные внутри объекта или любого из его супертипов.c)Пояатение ключевого слова SELF должно означать ссылку на экземпляр объявляемогообъекта.d)Правило области значений будет верным, когда выражению присвоено значение TRUE,будет нарушенным, когда выражению присвоено значение FALSE, и будет ни верным, ни нару­шенным. если выражению присвоено неопределенное (?) значение или значение UNKNOWN.e) Для того чтобы экземпляр объекта был верным (в области значений) не должно бытьнарушено ни одного правила.П р и м е р 44 — Дзя объекта unit_vector требуется, чтобы длина вектора была точно равнаединице, ^го ограничение может быть определено следующим образом:ENTITY unit_vecior;a. b, с : REAL;WHERElength.. 1 : a**2 + b**2 + c**2 = 1.0:END_ENTITY;Необязательные атрибуты в правилах области значений Правило области значений, которое содержит необязательный атрибут, должно трактоватьсяследующим образом.Правила и ограниченияa)Когда атрибут имеет значение, правилу области значений должно быть присвоено зна­чение как любому другому правилу области значений.b )Когда атрибут не имеет значения, неопределенное (?) значение используется как значе­ние атрибута при определении выражения правила области значений. Значения выражений, со­держащих неопределенное (?) значение, принимаются в соответствии с разделом 12.Г1 ри м е р 45 — Рассмотрим вариант примера 44.ENTITY unit_vector:a. b : REAL;с: OPTIONAL REAL;WHERE29
ГОСТ Р ИСО 10303-11-2000length.. 1 : а**2 + Ь**2 + с**2 = 1.0;END_ENT1TY:Целью правила области значений является обеспечение того, чтобы объект unit_vector былединичным. Однако когда с имеет неопределенное (?) значение, правилу области значений всегдаприсваивается значение UNKNOWN, независимо от значений а и Ь.Стандартная функция NVL ( см. 15.18) может быть использована для обеспечения приемле­мого значения, когда необязательный атрибут имеет неопределенное (?) значение. Когда необяза­тельный атрибут имеет значение, функция NVL возвращает данное значение; в противоположномслучае она возвращает заменяющее значение.ENTITY unit_vector;a. b : REAL;с; OPTIONAL REAL;WHERElength_l : a**2 + b**2 + NVL(c, 0.0)**2 = 1.0;END_ENT1TY;9.2.3 П о д т и п ы и с у п е р т и п ы Язык EXPRESS допускает определение объектов как подтипов других объектов, где подтипобъекта является конкретизацией его супертипа. Тем самым устанавливается наследование (на­пример. подтип/супертнп) отношения между объектами, в которых подтип наследует свойства(например, атрибуты и ограничения) соответствующего супертипа. Последовательные отношенияподтип/супертип устанавливают граф наследования, в котором каждый экземпляр подтипа явля­ется экземпляром его супертнпа(ов).Граф наследования, установленный отношениями подтип/супертип, должен быть ацикличе­ским.Объявление объекта, которое полностью определяет все важные свойства данного объекта,объявляет простой тип данных объекта. Объявление объекта, которое устанавливает наследуемыеотношения с супертипами, объявляет сложный тип данных объекта. Сложный тип данных объек­ та внутри граф;» наследования также использует характеристики соответствующего супертипа(ов).Сложный тип данных объекта может иметь дополнительные характеристики, не содержащиесявнутри супертипа(ов).Следующие факты относятся к отношениям подтип/супертип. Эти факты ссылаются награф подтип/супертип. Граф подтип/супертнп является многомерным направленным ацикличе­ским графом, в котором узлы представляют типы объекта, а связи представляют отношения под-типа/супертнпа. Следующие за SUBTYPE OF связи ведут к супертипам, тогда как следующие заSUPERTYPE OF связи ведут к подтипам. Синтаксис:294 subsuper = | supertype_constraint | | subtype _declaration | . 297 supertype_consiraint = absiract_supenype_declaration | supertype_rule .156 abstract j5upertype_declaration = ABSTRACT SUPERTYPE |subtype_constraint 1.295 subtype_constraint = OF '(* supenype_expression ')* . 298 supertype_expression = supertype_factor { AN DOR supertype_factor } . 299 supertype_factor = supertvpejerni { AND supertype_temi } . 301 supertype_temi = entity_ref | one_of | '(' supertype_expression ' ) ’ . 250 one_of = ONEOF ' ( ’ supertype_expression | *,* supertype_exprcssion. } *)' .300 supertype_nile = SUPERTYPE subtvpe_constraint . Правила и ограниченияa)Раздел супертипа (при его наличии) должен предшествовать разделу подтипа (при егоналичии).b)Подтип может иметь более одного супертипа.c)Супертип может иметь более одного подтипа.d)Супертип может сам быть подтипом одного или нескольких других типов объекта. Тоесть ветви в графе подтип/супертип могут пересекать несколько узлов.e)Отношение подтип/супертип должно быть транзитивным. То есть, если Л является под­типом В, а В является подтипом С. то А является подтипом С. Объекты, которые являются су-30
ГОСТ Р ИСО 10303-11-2000пертипами конкретного типа объекта, должны быть объектами, для которых возможно пересече­ ние связей, начиная с типа объекта и перечисленых после SUBTYPE OF.0Подтип не должен быть супертипом любого типа в списке всех его супертипов, то естьграф подтип/супертнп является ациклическим.9.2.3.1 Определение подтиповОбъект является подтипом, если он содержит объявление SUBTYPE. Объявление подтипадолжно определять весь (все) непосредственныи(е) супертип(ы) объекта.Синтаксис:296 subtype_declaration = SUBTYPE OF ' ( ’ entity_ref | Y entity_ref }.9.2.3.2 On/>ede.ienue супертиповОбъект может проявиться как супертип посредством явного или неявного определения.Объект явно определяется как супертип, если в нем содержится объявление ABSTRACTSUPERTYPE и неявно, если он назван в объявлении подтипа по крайней мере одного другогообъекта.Синтаксис:297 supertype^constraint = abstract juipeitype_declaration | supcrtype_ru!e .156 abstract_supertype_declaration = ABSTRACT SUPERTYPE | subtype_constraint | .295 subtype_constraint = OF ' ( ’ supenype_expression ')' . 298 supertype_expression = supertype_factor | ANIX)R supertype_factor } . 299 supenype_factor = .supertype jerrn { AND supertype^term ) .3 0 1 supertype_term = entity_ref | o n e o f | ' ( ’ supertype_expression ')' .250 o n e_ o f= ONEOF ' ( ’ supertype_expression { Y supertype_expression } ')* . 300 supertype _rule = SUPERTYPE subtype_constraint . Правила и ограниченияВсе подтипы, упоминаемые в выражении супертипа, должны содержать объяатение подти­па, которое определяет данный объект как супертип.П р и м е р 46 — Нечетные числа являются подтипом целых чисел, следовательно, целыечисла являются супертипом нечетных чисел.ENTITY integer number;v a l.: INTEGER:END^ENTITY:ENTITY odd_numberSUBTYPE OF (integer number);WHEREnot even : ODD(val);END_ENTITY;9.2.3.3 Наследование атрибутаИдентификаторы атрибута в супертипе видимы внутри области применения подтипа (см.раздел I0). Таким образом, подтип наследует все атрибуты данного супертипа. Это позволяетподтипам определять ограничения или свои собственные атрибуты с использованием унаследо­ ванного атрибута. Если подтип имеет несколько супертипов, то подтип наследует все атрибуты изсоответствующих супертипов. Это называется составных! наследованием. Правила и ограниченияОбъект не должен объявлять атрибут с таким же именем, как у атрибута, унаследованного отодного из супертипов, если он не переобъяапяст унаследованный атрибут (см. 9.2.3.4).Когда подтип наследует атрибуты из двух супертипов, являющихся непересекаюшнмися,возможно, что в них есть различные атрибуты, имеющие одинаковый идентификатор атрибута.Неоднозначность в наименовании должна быть разрешена путем прибавления к идентификаторуимени супертипа объекта, из которого унаследован каждый из атрибутов.П р и м е р 47 — В данном примере показано, как объект е12 наследует два атрибута, на­званные attr, а для того, чтобы определить, какой из двух атрибутов будет ограниченным, к егоимени прибавляется префикс.31
ГОСТ Г ИСО 10303-11-2000ENTITY el;a ttr: REAL;EN IDENTITY;ENTITY e2;attr: BINARY;END_ENTITY;ENTITY el2SUBTYPE OF (el,e2);WHEREpositive : SELF\el.attr > 0.0;— attr как объявлено в elEND_ENT1TY:Подтип может наследовать гот же самый атрибут из различных супертипов, которые в своюочередь унаследовали его из одного супертипа. Это называется повторным наследованием. В этомслучае подтип наследует атрибут только один раз, то есть имеется только одно значение этогоатрибута в экземпляре этого типа данных объекта.9.2.3.4 Чераобъявление атрибутаАтрибут, объявленный в супертипе, может быть пере объявлен в подтипе. Атрибут остается всупертипе, но разрешенная область значений для этого атрибута задается переобъяаленнем. за­данным в подтипе. Первоначальное объявление может быть изменено тремя основными спосо­бами:-тип данных атрибута может быть изменен для конкретизации первоначального типа дан­ных (см. 9.2.6);П р и м е р 4Х — Атрибут типа данных NUMBER может быть изменен на тип данных IN­TEGER или REAL;- необязательный атрибут в супертипе в подтипе может быть заменен обязательным; - явный атрибут в супертипе в подтипе может быть заменен определенным атрибутом.Синтаксис:262 qualified_attribute = SELF group._qualifier attribute..qualifier . 219 group_qualifier = *\* entity_ref.169 attribute ..qualifier = V attribute.ref,_______________________________________________________Правила и ограниченияa)Атрибут, пере объявленный в подтипе, должен быть конкретизацией атрибута с тем жеименем в супертипе.b)Имя переобъявленного атрибута должно быть задано с использованием синтаксисаqualificd_attribute.c)Если атрибут супертипа переобъявлен в двух не взаимно исключающих подтипах, экземп­ляр. содержащий оба подтипа, будет иметь единственное значение для этого атрибута, которое яв­ ляется допустимым для обоих переобъявленнй. Реализация синтаксического анализатора языкаEXPRESS, которая претендует на соответстоие уровню 4. должна быть протестирована на наличиепротиворечий в переобъяпленнях подтипов, которые могут сосуществовать в одном экземпляре.П р и м е р ы49— В некоторых геометрических системах используют координаты с плавающей точкой, вто время как в других работают в целочисленном координатном пространстве.ENTITY point;х ; NUMBER;у : NUMBER;END_ENTITY;ENTITY integer point32
ГОСТ Р ИСО 10303-11-2000SUBTYPE OF (point);SELF\point.x : INTEGER:SELF\point.y : INTEGER:END_ENTHY:50 — Этот пример показывает изменение элементов в сборном (агрегатном) типе данных вцелях указания их уникальности, уменьшения числа элементов в сборном типе данных и заменынеобязательного атрибута обязательным.ENTITY super:things: LIST |3:?| OF thing;items: BAG [0:?| OF widget:may be: OPTIONAL stuff;END.ENTITY;ENTITY subSUBTYPE OF (super) ; SELF\super.things: LIST |3:?| OF UNIQUE thing;SELF\super.itenis: SET (1:10| OF widget;SELF\super.may_be : stuff;END_ENTITY:51 — В следующем примере круг определен центром, осью и радиусом. Вариант круга опре­делен центром и двумя точками, через которые он проходит. Эти три точки предстаатяют дан­ные. которыми определен этот тип круга. В дополнение к этим данным необходимо описать идругие важные черты — радиус и ось. Это выполняется переобъяалением их как вычисляемыхатрибутов путем задания значений их выражениям.FUNCTION distanced I, р2 : p o in t): REAL;(* Найти кратчайшее расстояние между двумя точками •)END_ FUNCTION;FUNCTION normal(pl, p2. p3 : point) : vector;(’ Вычислить нормаль к плоскости, заданной тремя точками на плоскости *)END_FUNCTION;ENTITY circle;centre: point;radius: REAL;axis: vector;DERIVEarea: REAL := Pl*radius»*2;END_ENTITY:ENTITY circle by_pointsSUBTYPE OF (circle);p2 : point;p3 : point;DERIVESELF\circle.radius: REAL := distance(centre, p2);SELF\circle.axis: vector := nomiaI(centre, p2, p3);WHEREnot coincident: (centre <> p2) AND(p2 <> p3) AND(p3 <> centre):is_circle: distance(centre, p3) =distance^centre, p2):END_ENTITY;В подтипе три определяющие точки (centre, р2. и рЗ) являются явными атрибутами, в товремя как radius (радиус), axis (ось) и area (площадь) являются вычисляемыми атрибутами. Зна-
ГОСТ Р ИСО 10303-11-2000чемия этих вычисляемых атрибутов вычисляются с помошыо выражения следующего за операто-ром присвоения. Значения radius и axis получаются посредством вызова функции; значение areaвычисляется в строке.9.2.3.5 IIрае т о маыедоеанияКаждое локальное или глобальное правило, применимое к супертипу, применимо и к егоподтнпу(ам). Таким образом, подтип наследует все правила своего(их) супертипа(ов). Если под­тип имеет несколько супертипов, то подтип должен наследовать все правила, ограничивающиесупертипы.Невозможно изменить или удалить ни одно из правил, связаных с подтипом, через правилонаследования, но возможно добавить новые правила, которые еще более ограничивают подтип.Правила и ограниченияЭкземпляр объекта должен быть ограничен всеми ограничениями, установленными для ти­пов данных этого объекта. Если ограничения, установленные в двух (или более) типах данныхобъекта, противоречат друг другу, тогда не существует допустимого экземпляра, содержащего этитипы данных объекта. Реализация синтаксического анализатора языка EXPRESS, которая пре­ тендует на соответствие уровню 4, должна быть протестирована на наличие конфликтующих ог­раничений в типах данных объекта, которые могут сосуществовать в одном экземпляре.П р и м е р 52 — В следующем примере a graduate (дипломант) является a person (лично­стью), которая и учит, и учится. Дипломант наследует и атрибуты, и ограничения из супертипов|teacher (преподаватель) и student (студент)) вместе с атрибутами и ограничениями из их общегосупертипа (person). Дипломанту (graduate), в отличие от пре подавателя (teacher), не позволенопреподавать па курсах для дипломантов.SCHEMAS;ENTITY person:ss_no : INTEGER:born : date;DERIVEage : INTEGER := years since(born);UNIQUEun 1 : ss no;END_ENTITY;ENTITY teacherSUBTYPE OF (person);teaches : SET ( I;?) OF course;WHEREold : age >= 21;EN IDENTITY;ENTITY studentSUBTYPE OF (person);takes : SET | l:?j OF course;WHEREvoung : age >= 5;END_ENT1TY:ENTITY graduateSUBTYPE OF (student, teacher);WHERElimited : NOT (GRAD LEVEL IN teaches);END_ ENTITY;TYPE course = ENUMERATION OF (.... GRAD_LEVEL, ...);34
ГОСТ Р ИСО 10303-11-2000END.TYPE;END_SCHEMA; -- конец схемы S11 р и м е ч а н и с — Если подтип наследует взаимно противоречащие ограничения из супергнпов, то нссуществует соответствующего экземпляра этого подтипа, поскольку любой экземпляр нарушает одно из ог­раничений.9.2.4 О г р а н и ч е н и я п о д т и п а / с у п е р т и п аЭкземпляр типа данных объекта, являющийся подтипом, является экземпляром каждого изего супертипов. Экземпляр типа данных объекта, явно или неявно объявленный как супертип(см. 9.2.3.2), также может быть экземпляром одного или нескольких его подтипов (см. G.2).Синтаксис:294 subsuper = | supertype_constraint | | subtype _declaration | . 297 supertype.constraint = abstract_supertype_declaration | supertype_rule .156 abstract jsupeftype declaration = ABSTRACT SUPERTYPE | subtype constraint | .295 subtype_constraint = OF '(' supertype_expression ' ) ’ . 298 supertype_expression = supertype_factor { AN DOR supertypejactor | . 299 supertype_factor = supertype. temi { AND supenype_lerm } . 301 supertype_term = entity_rcf | on e_of| f supertype_expression ')' . 250 o n e jo f = ONEOF *(’ supertype_expression { Y supertype_expression } ')' .300 supertype_rule = SUPERTYPE subtype_constraint .Имеется возможность для установления ограничений, по которым могут был, реализованыграфы полтипов/супертинов. Эти ограничения задаются в супертипе посредством ограниченияSUPERTYPEВ приложении В описан формальный пояход к определению возможных комбинаций под-типов/супертнпов, экземпляров сущностей с учетом всех ограничений, которые описаны ниже.9.2.4.1 Абстрактные супертипыЯзык EXPRESS позволяет объявлять супертнпы. которые не предназначаются ятя непосред­ственного создания экземпляров. С этой целью в ограничение суп ер л та, определяющее типданных объекта, должна быть включена фраза ABSTRACT SUPERTYPE. Абстрактный супертнпне должен быть ограничен созданием экземпляра, связанного только с одним из подтипов.П р и м е ч а н и е — Эго означает, что схема, содержащая абстрактный супертнп, не имеющий каких-либо полтиной, является неполной и нс может быть использована для создания экземпляров без объявленияполтипов в ссылочной схеме.П р и м е р 53 — В транспортной модели транспортное средство (vehicle) может быть пред­ставлено абстрактным супертипом, поскольку все экземпляры этого типа данных объекта должныбыл, представлены его подтипами (например, наземное, водное транспортное средство и тд.).Тип данных объекта язя транспортного средства не должен образовывать независимых экземпля­ров объекта.ENTITY vehicleABSTRACT SUPERTYPE;END_ENTITY:ENTITY land basedSUBTYPE OF (vehicle);END_ENT1TY:ENTITY water basedSUBTYPE OF (vehicle);END_ENT1TY:9.2.4.2 ONEOFОграничение ONEOF устанавливает, что элементы списка ONEOF являются взаимоисклю­чающими. Ни для одного из элементов не может быть создан экземпляр с другим элементом из3S
ГОСТ Р ИСО 10303-11-2000данного списка. Каждый элемент должен быть выражением супертипа, которое относится кединственному подтипу типа данных объекта.___________________________________________________Синтаксис:250 one_of = ONEOF '(' supertype_expression { *,* supertype_expression } ')' . 298 supertype „expression = supertype „factor {AN DOR supertvpe_factor } . 299 supenype_factor = supertype, term { A ND supertype_temi} .301 supertype_term = entity_ref | one_of | '(' supertype_expression *)’ .Ограничение ONEOF может комбинироваться с другими ограничениями супертипа, что по­зволяет описывать сложные ограничения.П р и м е ч а н и е — На естественном языке фраза ONEOF(a, b, с) читается как: «экземпляр объектадолжен состоять из одного и только одного из типом данных объекта — а, Ь. с.П р и м е р 54 — Экземпляр супертипа может быть установлен посредством определения эк­земпляра только одного из его подтипов. Данное ограничение объявляется с использованием ог­ раничения ONEOF. Существуют различные виды домашних животных (pet), но ни одно из кон­ кретных домашних животных не может одновременно принадлежать к двум и более видам.ENTITY petABSTRACT SUPERTYPE OF (ONEOF(cat,rabbit, dog....) );name : pet_name;E NONENTITY;ENTITY catSUBTYPE OF (pet);END_ENTITY;ENTITY rabbitSUBTYPE OF (pet);END_ ENTITY;ENTITY dogSUBTYPE OF (pet);END_ENTITY;9.2.4.3 AN DORЕсли подтипы не являются взаимоисключающими, это означает, что экземпляр супертипаможет быть одновременно экземпляром более чем одного из его подтипов, отношение междуподтипами должно быть определено ограничением AN DOR.П р и м е ч а н и е — На естественном языке фраза b ANDOR с читается как: «экземпляр должен содер­жать типы b н/кли с».П р и м е р 55 - Личность (person) может быть одновременно и сотрудником (employee), истудентом (student) или только одним из них.ENTITY personSUPERTYPE OF (employee ANDOR student);END_ENTITY:ENTITY employeeSUBTYPE OF (person);END_ ENTITY:36
ГОСТ Р ИСО 10303-11-2000ENTITY studentSUBTYPE OF (person);END_ENTITY;9.2.4.4 ANDЕсли экземпляры супертипа классифицируются в несколько групп взаимоисключающихподтипов (то есть несколько группировок ON EOF), указывающих, что для полной классифика­ ции супертипа используется несколько признаков, отношение между группами должно быть оп­ ределено с использованием ограничения AND. Ограничение A N D используется только .тля соот­ ветствующих группировок, определенных другими ограничениями подтип/супертип.П р и м е ч а н и е — На естественном яиакс фраза b AND с читается как: «экземпляр должен одновре­менно состоять из типов Ь и с».П р и м е р 56 — Личность (person) может быть классифицирована как лицо мужского (male)или женского (female) пола, или как гражданин данного (citizen) или иностранного (alien) госу­дарства.ENTITY personSUPERTYPE OF (ONEOF(male, female) ANDONEOF(citizen, alien));ENDJENTITY;ENTITY maleSUBTYPE OF (person);ENDJENTITY;ENTITY femaleSUBTYPE OF (person);END_ENTITY:ENTITY citizenSUBTYPE OF (person);ENDjENTITY:ENTITY alienSUBTYPE OF (person);ENDjENTITY:9.2.4.5 Приоритет операторов супертиповПрисвоение значений выражениям супертипов производится слева направо, высший при­оритет имеют операторы, выполняемые первыми. В таблице X представлены правила приоритет­ности для операторов выражений супертипов. Операторы в одной строке имеют равный приори­тет. а строки упорядочиваются по мере понижения приоритета.Т а б л и ц а 8 — Приоритет оператора выражении супертипа П р и о р и т е т О п е р а т о р ы 1 ( ) O N E O F 2 A N D 3 A N D O RП р и м е р 57 — Следующие два выражения неэквивалентны:ENTITY хSUPERTYPE OF (a ANDOR b AND c);END_ENTITY;37
ГОСТ Р ИСО 10303-11-2000ENTITY хSUPERTYPE OF ((a AN DOR b) A N D c);END .ENTITY:9.2.4.6 Ограничения между подтипами no умолчаниюЕсли п объявлении объекта не упомянуто никакого ограничения супертипа, подтипы (приих наличии) должны использоваться одновременно, то есть как если бы все подтипы были быупомянуты в конструкция AN DOR.В случае ограничения супертипа, которое установлено для подмножества подтипов данногообъекта, ограничение должно быть установлено для этих подтипов по умолчанию, а для другихподтипов — через AN DOR.П р и м е р 58 — Модель из примера 55 эквивалентна данной модели, в которой использу­ются конструкции по умолчанию.ENTITY personEN IDENTITY:EN TITY employeeSUBTYPE OF (person);END_ ENTITY;ENTITY studentSUBTYPE OF (person);END_ENTITY:9.2.5 Н е я в н ы е о б ъ я в л е н и яКогда объявляется объект, одновременно с этим неявным образом объявляется конструктор(constructor). Идентификатор конструктора такой же как и идентификатор объекта и видимостьобъявления конструктора такая же, как и объявления объекта.Конструктор после своего вызова должен возвращать в точку вызова частное значениесложного объекта для данного типа данных объекта. Каждый атрибут этого частного значениясложного объекта задается фактическим параметром, передаваемым в вызов конструктора, еслифактический параметр является экземпляром объекта, а данный экземпляр объекта играет роль,описываемую атрибутом в частном значении сложного объекта. Конструктору должны переда­ваться только те атрибуты, которые явно определены в объявлении конкретного объекта.Синтаксис:195 entity_constructor = cntity_ref '(' | expression { V expression ) | ')' .Когда создается экземпляр сложного объекта (экземпляр объекта, встречающийся в графеподтип/супертип), конструкторы для каждого компонента объектов должны комбинироваться спомощью оператора 11 (см. 12.10).Правила и ограниченияa)Конструктор должен иметь один формальный параметр для каждого явного атрибута,объявленного в соответствующем типе данных объекта. Этим не охватываются атрибуты, насле­дуемые от супертипов и переобъявляемые в этом типе данных объекта.b)Порядок формальных параметров должен соответствовать порядку объявления явныхатрибутов в объекте.c)Параметрический тип данных для каждого формального параметра должен быть иден­тичен типу данных соответствующего атрибута.d)Если объект не имеет явных атрибутов, конструктору передается пустой список пара­метров (то есть круглые скобки должны присутствовать всегда).П р и м е ма нне — Это отличается от явно объявленных функций.e)Необязательным (OPTIONAL) атрибутам при неявном вызове конструктора могут при­сваиваться неопределенные (?) значения. Это означает, что явное значение таким атрибутам неприсвоено.38
ГОСТ Р ИСО 10303-11-20000Если в экземпляре сложного объекта имеется подтип, содержащий вычисляемые атри­буты. переобъявленные из явных атрибутов в супертипе, конструктору супертипа должны бытьзаданы значения для этих переопределенных атрибутов. Эти значения игнорируются в вычисляе­ мом значении.П р и м е р 59 — Допустим следующее объявление объекта:ENTITY point;х. у, z : REAL;END_ENTITY:неявно объявленный конструктор этого объекта может быть таким:FUNCTION point(x,y.z : REAL) :point;конструктор может использоваться для присвоения значений экземпляру этого типа данных объ­екта:CONSTANTorigin : point := point(0.0, 0.0, 0.0);END_CONSTANT;9.2.6 К о н к р е т и з а ц и я ( с п е ц и а л и з а ц и я )Конкретизация (специализация) является наиболее ограниченной формой исходного объяв­ления. Следующие случаи являются определенными конкретизациями:- объект-подтип является конкретизацией любого из его супертипов; -типы INTEGER и REAL являются двумя конкретизациями типа NUMBER: - тип INTEGER является конкретизацией типа REAL; - тип BOOLEAN является конкретизацией типа LOGICAL; - выражение LIST OK UNIQUE item является конкретизацией выражения LIST OF item: - выражение ARRAY OF UNIQUE item является конкретизацией выражения ARRAY OF item: - выражение ARRAY OF item является конкретизацией выражения ARRAY OF OPTIONALitem:- выражение SET OF item является конкретизацией выражения BAG OF item; -допустим, что сокращение AGG обозначает один из типов: ARRAY, BAG, LIST или SET,тогда выражение AGG OF item является конкретизацией выражения AGG OF original при усло­вии, что item является конкретизацией original;-допустим, что сокращение AGG обозначает один из типов: BAG, LIST или SET, тогда вы­ражение AGG |Ь : (| является конкретизацией выражения AGG [I : и| при условии, что b й 1 и/:» b <, и и / й t й и\-допустим, что сокращение BSR обозначает один из типов данных: BINARY. STRING илиREAL, тогда выражение BSR (length) является конкретизацией BSR;-выражение BSR (short) является конкретизацией BSR (long) при условии, что short мень­ше, чем long:-ти п BINARY, использующий в определении ключевое слово FIXED, является конкретиза­цией типа BINARY переменной длины;- тип STRING, использующий в определении ключевое слово FIXED, является конкретиза­цией типа STRING переменной длины;-определенный тип данных является конкретизацией исходного типа данных, используемо­го для объявления определенного типа данных.9.3 СхемаОбъявление SCHEMA определяет общую область действия для множества взаимосвязанныхобъявлений объектов и других типов данных.П р и м е р 60 — Геометрия (Geometry) может быть именем схемы, содержащей объявленияточек, кривых, поверхностей и других, связанных с ними, типов данных.Объявления могут появляться в объявлении схемы в произвольном порядке. Объявления, сделанные в одной схеме, могут стать видимыми в области действия другойсхемы посредством определения интерфейса, описанного в разделе II.39
ГОСТ I* ИСО 10303-11-2000Синтаксис:2X1 schema j le c l = SCHEMA schema,id *;* schema_body END_SCHEMA Y .280 schema_body = { interface_specification | | constant j le c l |{ declaration | rule j le c l } .228 interface_specification = referencejdause | usejdause .189 declaration = entity_decl | function decl | procedure_decl | type_decl. 9.4 КонстантаОбъявление константы используется для объявления поименованных констант. Областьюдействия идентификатора константы должна быть функция, процедура, правило или схема, в ко­торых встречается объявление константы. Поименованная константа, появляющаяся в объявле­ нии CONSTANT, должна иметь явную начальную загрузку (инициализацию), значение которойпоявляется в результате вычисления выражения. Поименованная константа может появляться вобъявлении другой поименованной константы. Синтаксис:185 constant_decl = CONSTANT constant_bodv { constant body } END_CONSTANT.184 constant body = constant J d Y base „typeexpression Y .171 base_type = aggregationjypes | sim plejypes | named_types . Правила и ограниченияa)Значение константы не должно изменяться после начальной загрузки.b)Любое пояаление поименованной константы вне пределов объяалення константы рав-иозначно пояалению начального значения конста1ггы.c)Выражение должно возвращать значение установленного основного типа.П р и м е р 61 — Следующие объявления констант яаляются правильными:CONSTANTthousand: NUMBER := 1000:million : NUMBER := thousand**2;origin: point:= point(0.0, 0.0, 0.0);EN D_CONSTANT; 9.5 Алгоритмы/Алгоритм является последовательностью операторов, выполнение которых приводит к неко­торому требуемому конечному состоянию. Существуют два вида алгоритмов, которые могут бытьопределены как функции и процедуры.Формальные параметры определяют исходные данные для алгоритма. В момент вызова ал­горитма фактические параметры обеспечивают фактические значения или экземпляры. Фактиче­ские параметры должны быть согласованы с формальными параметрами по типу, порядку и ко­личеству (числу).При необходимости локальных объяалений в алгоритме, они задаются непосредственно зазаголовком алгоритма. Такими объявлениями могут быть типы, локальные переменные, другиеалгоритмы и т.д.За локальными объявлениями следует тело алгоритма.9.5.1 Ф у н к ц и я Функиня является алгоритмом, который обрабатывает параметры и выдает единственное ре­зультирующее значение устаиоалеиного типа данных. При вызове функции (см. 12.8) в выраже­ нии вычисляется результирующее значение в точке вызова.Функция должна прерываться (завершаться) при выполнении оператора RETURN. Значе­ние выражения, связанное с оператором RETURN, определяется результатом, полученным привызове функции. Синтаксис:208 function,decl = function_head | algorithm_hcad | stmt 1 stmt ) END_FUNCTION.209 function_head = FUNCTION functionjd | T formal_parameter{ V formal parameter 1 *)' | Y parameterjype.206 formal^ parameter * parameterjd { *,* parameter J d } Y parameterjype . 253 parameterjype = generalizedjypes | nam edjypes | sim plejypes .163 algorithm,head = { declaration} | constant_dec! | | local decl | .189 declaration = entity j l e c l | function_decl | procedure.decl | type_decl.40
ГОСТ Р ИСО 10303-11-2000Правила и ограниченияa)В теле функции должен быть определен оператор RETURN для каждой из возможныхветвей проиесса обработки, выбираемых при обращении к данной функции.b)Каждый оператор RETURN в пределах функции должен определять выражение, по ко­торому вычисляется значение, возвращаемое в точку вызова.c)Выражение, определяемое в каждом из операторов RETURN, должно быть совместимопо присваиваемому значению с обьявленным возвращаемым типом функции.d) Функции не имеют побочных эффектов. Поскольку формальные параметры функции немогут быть определены как VAR, изменения этих параметров внутри функции не отражаются вточке вызова функции.e)Функция может изменять локальные переменные или параметры, которые обьявленыво внешней области действия, то есть если данная функция объявлена в заголовке(RULE).9.5.2 П р о ц е д у р аПроцедура является алгоритмом, который принимает параметры из точки вызова и обраба­тывает их некоторым образом для получения требуемого конечного состояния. Изменения пара­метров внутри процедуры отражаются в точке вызова только в том случае, если перед определе­нием формального параметра стоит ключевое слово VAR (изменяемый).Синтаксис:258 procedurc_decl = procedure_head | algorithmjiead | { stmt ) END .PROCEDURE.259 procedure_head = PROCEDURE procedure_id | ' ( ’ | VAR ) formal_parameter{| VAR | formal_parameter } ' ) ’ | Y .206 formal„parameter = parameter_id { Y parameter_id }parameter_type .253 parameter „type = generalized_types | named_types | simple_types .163 algorithm „head = { declaration } | constantdecl | | IocaI_decl | .189 declaration = entity_decl | function_decl | procedure_decl j type_decl .Правила и ограничения Процедуры могут изменять локальные переменные или параметры, которые обьявлены вовнешней области действия, то есть если данная процедура обьявлена в заголовке (algorithm_head)какой-либо функции (FUNCTION), процедуры (PROCEDURE) или правила ( RULE ).9.5.3 П а р а м е т р ыФункция или процедура могут иметь форм&тьные параметры. Каждый формальный пара­метр устанавливает имя и тип параметра. Имя яатяется идентификатором, который должен бытьуникальным в области действия функции или процедуры. Формальный параметр процедуры так­ же может быть обьяатен как VAR (изменяемый), чем устанаачивается. что если такой параметризменяется внутри процедуры, то изменение распространится и на точку вызова процедуры. Па­ раметры, не объяатенные как VAR. также могут быть изменены, но такое изменение не будетвидимым после передачи упраазения в точку вызов;! процедуры.Синтаксис:206 formal parameter = parameterjd { Y parameterjd 1parameterjype .253 parameterjype = generalized_types | named_types | simple_types .П р и м е р 62 — Следующие обьяатения показывают, как могут быть обьяатены формаль­ные параметры.FUNCTION dist(pl. р2 : point) : REAL;PROCEDURE midpt(pl. p2 : point; VAR result : point);Для обобщения типов данных, используемых для предстаатения формальных параметровфункций и процедур, применяются обобщенные типы данных (AGGREGATE и GENERIC) .Обобщенные сборные (агрегатные) типы данных также могут быть использованы для обобщенияисходных типов данных, допустимых для конкретных сборных (агрегатных) типов данных.41
ГОСТ I* ИСО 10303-11-20009.5.3.1 Агрегатный (сборный) тип данныхТип данных AGGREGATE является обобщением всех сборных (агрегатных) типов данныхКогда вызывается процедура или функция, формальный параметр которой определен каксборный (агрегатный) тип данных, переданный процедуре или функции фактический параметрдолжен быть одного из типов: ARRAY, BAG, LIST или SET. Тогда выполняемые действия долж­ны зависеть от типа данных фактического параметра.Для обеспечения того, чтобы два или более переданных параметра имели одинаковый типданных или чтобы возвращаемый тип данных был таким же. как у одного из переданных пара­метров. независимо от переданных фактических типов данных (см. 9.5.3.3), могут быть использо­ ваны метки типов.Синтаксис:161 aggregate j y p e = AGGREGATE |typejabel | OF parameter j y p e .306 typejabel = type labelJd | type J a b el_ r ef. 253 parameterjvpe * generalized j y p e s | named jy p e s | sim plejypes .Правила и ограниченияa)Тип данных AGGREGATE должен использоваться только как тип формального пара­метра функции или процедуры, или в соответствии с правилом (Ь).b)Тип данных AGGREGATE может также использоваться в качестве типа результатафункции или типа локальной переменной внутри функции или процедуры. Для такою примене­ния требуются ссылки на метки типов и необходимо ссылаться на метки типов, объявленныеформальными параметрами (см. 9.5.3.3).П р и м е р 63 — Данная функция написана для приема агрегата чисел. Функция должнавозвращать тот же тип, что и у переданного агрегата, содержащий масштабированные числа.FUNCTION scale(input:AGGREGATE : intvpe OF NUMBER:scalar : NUMBER) : AGGREGATE : intype OF NUMBER;LOCALresult : AGGREGATE : intype OF NUMBER:END_LOCAL;REPEAT i := LOINDEX(input) TO HllNDEX(input);result|i| := scalar ♦ input |i|;END.REPEAT:RETURN(result);E N D_FU N CTION;9.5.3.2 Обобщенный тип данныхТип данных GENERI C является обобщением исех других типов данных.Когда вызывается процедура или функция с обобщенным параметром, переданный факти­ческий параметр может не иметь тип данных GENERIC. Выполняемые операции зависят от типаданных фактического параметра.Для обеспечения того, чтобы два или более переданных параметра имели одинаковый типданных или чтобы возвращаемый тип данных был таким же, как у одного из переданных пара­метров. независимо от переданных фактических типов данных (см. 9.5.3.3), могут быть использо­ ваны метки типов.Синтаксис:218 genericjype = GENERI C |typejabel | .306 typejabel = ty p e ja b e ljd | typeJabel_ref.Правила и ограниченияa)Тип данных GENERI C должен использоваться только как тип формального параметрафункции или процедуры, или в соответствии с правилом (Ь).b )Тип данных GENERIC может также использоваться в качестве типа результата функцииили типа локальной переменной внутри функции или процедуры. Для такого применения требу­ ются ссылки на метки типов и необходимо ссылаться на метки типов, объявленные формальны­ми параметрами (см. 9.5.3.3).42
ГОСТ Р ИСО 10303-11-2000П р и м е р 64 — В этом примере показана обобщенная функция, которая складывает числаили вектораFUNCTION add(a,b:GENERlC:intype):GENER!C:intvpe;LOCALn r : NUMBER; — целое или действительноеvr : vector,END_ LOCAL;IF ( NUMBER* IN TYPEOF(a)) A ND ( NUMBER IN 7YPEOF(b)) THENnr ;= a+b;RETURN (nr);ELSEIF ( THIS SCHEMA.VECTOR* IN TYPEQF(a)) AND(*THJS_SCHEMA. VECTOR* IN TYPEOF(b)) THENvr := vector( a.i + b.i,a.j + b.j,a.k + b.k):RETURN(vr);END IF;E N D JF ; RETURN (?); — если мы получаем неправильные исходные данные, тогда возвращается неоп­ределенное значениеEND_ FUNCTION;9.5.3.3 Метки типовМетки типов должны использоваться для установления отношения между типом данныхфактического параметра п точке вызова с типами данных других фактических параметров, ло­кальных переменных или возвращаемого типа функции. Метки типов объявляются для типовданных AGGREGATE и GENERIC внутри объявления формального параметра функции илипроцедуры и на них могут быть даны ссылки типами данных AGGREGATE или GENERI C вобъявлении формального параметра, локальной переменной или возвращаемого типа функции.Синтаксис:306 type_Iabel = type_label_id | type_label_ref.Правила и ограниченияa)Первое появление метки типа в объявлении формального параметра объявляет меткуданного типа, все последующие появления метки данного типа являются ссылками на первуюметку.b)Параметры, переданные функции или процедуре, использующей ссылку на метку типа,должны быть совместимы с типом данных переданного параметра, в котором объявтена меткатипа.c)Типы данных локальных переменных и возвращаемых типов функций, которые ссыла­ются через метку типа на тип данных параметра, должны быть идентичными типу данных пара­метра, в котором объявлена метка типа.П р и м е р 65 - В этом примере показано, как метки типов могут использоваться при опре­делении функции и проверке совместимости результирующего типа вызываемой функции.ENTITY а;E*ND_ ENTITY;ENTITY b SUBTYPE OF (a);END_ENTITY:ENTITY c SUBTYPE OF (b);END_EN'I'ITY;43
ГОСТ I* ИСО 10303-11-2000FUNCTION test ( p i : GENERICx; p2 : GENERIC:x):GENERIC:x; л л л... —объявлениессылкассылкаEND_ FUNCTION;LOCALv_a : a := a(...); v_b : b := a(...)j |b(...); — 11 оператор, описанный в 12.11 v_c : C : = a(...)| |b(...)| |c(...); v_x : b;E N D . LOCAL;v_x := test(v_b. v_a); -- неверный v_a не совместим с типом b. v_x := test(v„a, v_b); — неверное присваивание, функция вернет тип а.В разделе 15 приведены другие примеры использования меток типов.9.5.3.4 Общие агрегатные (сборные) типы данныхОбщие сборные (агрегатные) типы данных образуют часть класса типов, называемых обоб­щенными типами данных. Они представляют собой конкретный сборный (агрегатный) тип дан­ ных (ARRAY, BAG, LIST и SET) с ослабленными ограничениями, которые обычно налагаютсяпри определении этот сборного (агрегатного) типа данных (то есть general_llst_type являетсяобобщением list_type).Синтаксис:212 general _aggregation_types = general.array_tvpe | general_bag type |general list type | general set type .213 general_array_type = ARRAY | bound_.spec | OF | OPTIONAL | ] UNI QUE |parameter_type .176 bound_spec =bound_lbound._2 *|* .174 bound_l = numeric. expres.sion . 175 bound_2 = numeric_expression .253 parameter „type = generalized_types | named_types | simple_types . 214 general. b agjype = BAG | bound, spec | OF parameter type . 215 general_list_type = LIST | bound_spec | OF | UNI QUE | parameter_type . 217 general_set_type = SET | bound_spec | OF parameter_type .Когда общие сборные (агрегатные) типы данных используются как тип данных формальногопараметра, допускаются следующие фактические параметры функций и процедур:- массивы, безотносительно к диапазону значений индексов. Это означает, что в определе­нии формального параметра для массива не определено bound_spec.П р и м е ч а н и с — Ятя того чтобы определить действительные границы массива, в алгоритме должныиспользоваться функции I1IINDEX и LOINDEX;-агрегации, у которых исходными типами могут быть GENERIC, AGGREGATE или общийсборный (агрегатный) тип данных.П р и м е р 66 — В этом примере показано, как SET может быть записан в объявлении фор­мального параметра; это не может быть описано в объявлении атрибута, поскольку исходный типдля SET не может включать GENERIC.FUNCTION dimensions(input:SET |2:3J OF GEN ERIC):INTEGER:9.5.4 Л о к а л ь н ы е п е р е м е н н ы еПеременные, локальные по отношению к данному алгоритму, обьяазяются после ключевогослова LOCAL. Локальная переменная видима только в области действия алгоритма, в которомона объявлена. Локальным переменным могут быть присвоены значения, и эти переменные мо­гут присутствовать в выражениях.44
ГОСТ Р ИСО 10303-11-2000 Синтаксис:239 localjdecl = LOCAL local„variable { local,variable ) END,LOCAL.240 local_variable = variable, id {variable J d }parameter,type| *:=’ expression ).253 parameterjype = generalized_types | named_types | simple_types .Инициализация (начальная загрузка) локальных переменных В момент вызова алгоритма псе локальные переменные имеют неопределенное (?) значениедо тех пор. пока явно не залам инициализатор. Если инициализатор залам, то локальной пере­менной при вызове алгоритма присваивается начальное значение.П рн м е р 67 — Переменной r_result присвоено начальное значение 0.0LOCALг result : REAL := 0.0; i result: INTEGER;E N D , LOCAL;EXISTS(r_result) - TRUE EXISTS(i_result) — FALSE подразумевается, что присвоенных значений нет9.6 ПравилоПравила позволяют определить ограничения, накладываемые внутри области действия схе­мы на один или более типов данных объекта. Локальные правила (то есть правила уникальностиограничений и области значений в объявлении объекта) объявляют ограничения, налагаемые от­дельно на каждый экземпляр типа данных объекта. Объявление RULE позволяет определить ог­раничения. налагаемые совокупно на всю область значений типа данных объекта или на экземп­ляры нескольких типов данных объекта. Одним из применений RULE яатяется согласованноеограничение значений атрибутов, присутствующих в различных объектах.При объявлении правила ему присваивается имя и определяется, к каким объектам оно от­носится.Синтаксис:277 rule_decl = rule, head 1 algorithm „head | { stmt } \vhere_clause END_RULE.278 iule_head = RULE ru lejd FOR '( ' entity_ref {entity_ref} ')'163 algorithm_head = { declaration } | constant_decl | | Iocal_dec! | .189 declaration = entity_decl | function_dcc! | procedure_decl | type_decl.Тело правила состоит из локальных объявлений, исполняемых операторов и правил облас­тей значений. Окончательная формулировка правила показывает, должно ли быть удовлетвореноили нет некоторое глобальное ограничение. Правило оценивается посредством исполнения опе­ раторов с последующей оценкой каждого из правил областей значений. Если правило нарушенодля набора экземпляров типов данных объекта, переданных в качестве параметров, то экземпля­ры не соответствуют EXPRESS-схеме.Правила и ограниченияa)Каждое правило области значений должно определяться логическим (LOGICAL) илинеопределенным (?) значением.b)Выражение верно, когда ему присвоено значение TRUE; выражение неверно, когда емуприсвоено значение FALSE: и оно ни верно, ни неверно, когда ему присвоено неопределенное (?)значение или значение UNKNOWN.c)Правило области значений не должно быть нарушено для верного набора экземпляровобъектов типов данных объекта, определенных в заголовке правила.П р и м е р 68 — Следующее правило требует, чтобы в первом и седьмом октантах находи­лось равное количество точек.RULE point match FOR (point); LOCALfirstjo ct, seventh_oct: SET OF POINT := ||; -- пустой набор точек (see 12.9)45
ГОСТ I* ИСО 10303-11-2000END_ LOCALfirst.oct := QUERY(temp <• point | (temp.x > 0) AND(temp.у > 0) AND(temp.z > 0) ) ;seventh_oct := QUERY(temp <* point | (temp.x < 0) AND(temp.y < 0) AND(temp.z < 0) );WHERESlZEOF(first_oct) = SIZEOF(seventh oct) ;END_RULE;П р и м е р 69 — Правило может быть использовано для установления общего значения,уникального для атрибутов объекта.ENTITY Ь;а! : с;а2 : d;аЗ : f;UNI QUEurl : al. a2;EN D. ENTITY:Общее ограничение уникальности в Ь применяется к экземплярам с и d. Следующее прави­ло еще более ограничивает основное значение общей уникальности.RULE yu FOR (b);ENTITY temp;a l : c;a2 : d;END ENTITY;LOCALs : SET OF temp := ||;END LOCAL; REPEAT i := I TO SIZEOF(b);s := s + tem p(b|i).al, b|i|.a2);END REPEAT;WHEREwrl : VALUE UNIQUE(s);EN D . RULE;Неявное объявление Внутри RULE каждая совокупность неявно объявляется как локальная переменная, содер­жащая набор всех экземпляров поименованного объекта в области значений, то есть набор эк­ земпляров объекта, подчиняющихся данному правилу.Синтаксис:254 population = en tity_ief.Правила и ограниченияСсылки на конкретную совокупность < population) могут быть даны только в глобальном пра­виле, которое содержит ссылку на соответствующий тип данных объекта в заголовке правила.П р и м е р 70 — Рассмотрим следующее объявление:RULE coincident FOR (point);неявное объяатение выглядело бы:LOCALpoi nt : SET OF point:END_ LOCAL;46
ГОСТ Р ИСО 10303-11-2000 10 Область действия и видимостьEXPRESS-объя олеине образует идентификатор, который может быть использован для ссыл­ки на объявленный элемент из других частей данной схемы (или из других схем). Некоторыеконструкции EXPRESS неявно объявляют элементы языка EXPRESS, присваивая им идентифи­ каторы. В тех областях, из которых можно ссылаться на идентификатор объявленного элемента,считают объявленный элемент видимым в этой области. Ссылки на элемент могут появлятьсятолько там, где видимым является его идентификатор. Правила видимости приведены в 10.2.Подробная информация о ссылках на элементы с использованием их идентификаторов приведенав 12.7.Некоторые элементы EXPRESS образуют фрагмент (блок) текста, называемый областьюдействия элемента. 'Эта область действия ограничивает видимость идентификаторов, объявленныхвнутри нее. Области действия могут быть вложенными, то есть элемент языка, образующий о б ­ласть действия, может входить в область действия другого элемента. Существуют ограничения,при которых элементы могут появляться в области действия конкретного элемента языкаEXPRESS. Эти ограничения, как правило, определяются синтаксисом EXPRESS (см. приложение А).Для каждого из элементов, указанных в таблице 9, в последующих подразделах установленыграницы образованной области действия, при ее наличии, и видимость объявленного идентифи­катора как в общих терминах, так и с конкретными деталями.Т а б л и ц а 9 — Области действия и идентификаторы определенных элементовЭлементОбласть действииИлсмтификигарalias statementattributeconstantenumerationentityfunctionparameterprocedurequery expression• >>repeat statement*1). 2)rule,3»rule labelschematypetype labelvariable>> Идентификатором является неявно объявленная переменная в области действия объявления.2> Переменная объяатястся неявно только тогда, когда установлен инкрементный контроль.J) Неявное объявление переменной проводится для всех объектов, которые ограничены правн-лом.10.1 Правила областей действияНиже приведены общие правила, применяемые ко всем формам областей действия, сущест­вующим в языке EXPRESS; список элементов языка, образующих области действия, приведен втаблице 9.Правила и ограниченияa)Все объявления должны присутствовать в пределах области действия.b)В пределах единственной области действия идентификатор может быть объявлен илиявно импортирован (см. раздел 11) только один раз. Идентификатор объекта или типа, явно им­портированный в данную схему более одного раза разными способами, с использованием одногои того же исходного объявления, учитывается только один раз.47
ГОСТ Г ИСО 10303-11-2000с)Области действия должны быть вложены корректно, то есть перекрытие областей дейст­вия не допускается. (Это определено синтаксисом языка).В настоящем стандарте максимально допустимая глубина вложения областей действия неустановлена, но разработчики синтаксических анализаторов языка EXPRESS могут установитьмаксимальную глубину вложения областей действия.10.2 Правила видимостиНиже приведены правила видимости идентификаторов. Список элементов языка EXPRESS,объявляющих идентификаторы, приведен в таблице 9. Правила видимости идентификаторов по­именованных типов данных несколько отличаются от правил для других идентификаторов; этиотличия описаны в 10.2.2.10.2.1 О б щ и е п р а в и л а в и д и м о с т иСледующие общие правила применимы ко всем идентификаторам, кроме идентификаторовпоименованных типов данных, на которые правило (d) не распространяется.Правила и ограниченияa)Идентификатор виден в той области действия, в которой он объявлен. Эта область дей­ствия называется локальной областью действия идентификатора.b)Если идентификатор видим в данной области действия, он также видим во всех облас­тях действия, определенных внутри данной области в соответствии с правилом (d).c)Идентификатор не видим в любой области действия вне его локальной области дейст­вия в соответствии с правилом (0-d)Когда идентификатор /, видимый в области действия /’. переобъянлен в некоторойвнутренней области действия Q, вложенной в Р. в области действия ^ и в любых областях дейст­ вия, объяатенных в (Л будет виден только идентификатор /, объявленный в области действия Q.Идентификатор /, объявленный в области действия Р, является видимым в области действия Р ив любых внутренних областях действия, которые не переобъявляют /.e)Считается, что встроенные константы, функции, процедуры и типы языка EXPRESSобъяалены в виртуальной универсальной области действия. Все схемы являются вложенными вэту область действия. Идентификаторы, относящиеся к встроенным константам, функциям, про­ цедурам, типам языка EXPRESS и схемам, видимы во всех областях действия, определенных вязыке EXPRESS.0Идентификаторы перечисляемых элементов, объявленные в области действия опреде­ленного типа данных, видимы в следующей внешней области действия, за исключением случая,когда следующая внешняя область действия содержит объявление того же идентификатора длянекоторого другого элемента.П р и м е ч а н и е — Если следующая внешняя область действия содержит объявление того же иденти­фикатора, перечисляемые элементы остаются доступными, но к ним добавляется идентификатор опреде­ленного типа данных (см. 12.7.2).g)Объявления из одной схемы могут быть видимыми для элементов другой схемы черезопределение (спецификацию) интерфейса (см. раздел 11).П р и м е р 71 — В следующей схеме показаны примеры идентификаторов и ссылок на них всоответствии с выше приведенными правилами.SCHEMA example;CONSTANTb ; INTEGER ;= I ;c : BOOLEAN ;= TRUE ;E N D_CO N STANT;TYPE enum = ENUMERATION OF ( e. f, g );END_TYPE;ENTITY entity I;a : INTEGER;WHEREwrl: a > 0 ; — выполняется правило (a) ; а видим в локальной области действияwr2: а <> b ; — выполняется правило (b) : b видим из внешней области действияEND_ENT1TY;48
ГОСТ Р ИСО 10303-11-2000ENTITY entity2;с : REAL; — выполняется правило (с) : здесь константа с невидимаEND_ENTITY;ENTITY d:aitrl : INTEGER;aitr2 : enum;WHEREd : ODD(attrl); — выполняется правило ( d ) : функция ODD видима вездеw r : attr2 <> e; — выполняется правило (e) ; e видим вне области действия.— определенной типом enumEND_ENT1TY;END SCHEMA;10.2.2П р а в и л ав и д и м о с т ии д е н т и ф и к а т о р о вп о и м е н о в а н н ы х т и п о вд а н и ы хИдентификаторы поименованных типов данных подчиняются тем же правилам видимости,что и прочие идентификаторы, за одним исключением. Этим исключением является правило ви­димости (d). Идентификатор I объекта или определенного типа данных, объявленный в областидействия Р, остается видимым во внутренней области действия Q. даже если он переопределяетсяв области действия Q, тем самым обеспечивается, что:a)область действия Q определяется объявлением объекта, а идентификатор / объяатяетсякак атрибут в данной области, илиb)область действия Q определяется объявлением функции, процедуры или правила, аидентификатор / объяатяется как формальный параметр или переменная в данной о б л а е т .Г! ри м е р 72 — В объекте entity 1 d относится как к типу данных объекта, так и к атрибуту.SCHEMA example;ENTITY d;attrl ; REAL:END_ENTITY;ENTITY entity 1;d : d; — d в данной области действия яатяется и объектом и атрибутомEND_ENTITY;END SCHEMA;10.3 Явные правила для элементовВ этом разделе дается более подробное описание того, как общие правила областей дейст­вия и видимости применяются к различным элементам языка EXPRESS.10.3.1 О п е р а т о р п е р е и м е н о в а н и я (alias statement)Определение оператора ALIAS (переименования) см. в 13.2.Видимость. Идентификатор, неявно объявленный в операторе переименования, является ви­димым в области действия, определенной оператором переименования.Область действия. Оператор переименования определяет новую область действия. Эта о б ­ласть действия простирается от ключевого слова ALIAS до ключевого слова END ALIAS, котороезавершает данный оператор переименования.Объявления. Следующие элементы языка EXPRESS могут объявляться идентификаторами вобласти действия оператора переименования:- оператор переименования; - выражение запроса; - оператор цикла.10.3.2 А т р и б у т (attribute)Видимость. Идентификатор атрибута яатяется видимым в области действия объекта, в кото­рой он объявлен, и в областях действия всех подтипов данного объекта.10.3.3 К о н с т а н т а (constant)Видимость. Идентификатор константы яатяется видимым в области действия функции,процедуры, правила или схемы, в которой он объяатен.49
ГОСТ I* ИСО 10303-11-200010.3.4 Э л е м е н т п е р е ч и с л е н и я (enumeration item)Видимость. Идентификатор элемента перечисления является видимым в области действияфункции, процедуры, правила или схемы, в которой объявлен его тип. Это является исключениемиз правила видимости 10.2.1 Г. Идентификатор не должен объявляться с любым другим предназна­чением в данной области действия, за исключением объявления другого перечисляемого типа дан­ных в той же области действия. Если один и тот же идентификатор объявлен двумя перечисляемы­ ми типами данных как элемент перечисления, то при ссылке на элемент перечисления следует д о­бавлять идентификатор типа данных для устранения неоднозначности ссылки (см. 8.4.1).10.3.5 О б ъ е к т (entity)Видимость. Идентификатор объекта является видимым в области действия функции, проце­дуры, правила или схемы, в которой объявлен его тип. Идентификатор объекта остается видимымпри условиях, определенных 10.2.2, во внутренних областях действия, в которых переобъявленданный идентификатор.Область действия. Объявление объекта определяет новую область действия. Данная областьдействия простирается от ключевого слова ENTITY до ключевого слова E N D , ENTITY, котороезавершает данное объявление объекта. Атрибуты, объявленные в супертипе объекта, являютсявидимыми в объекте подтипа за счет наследования.П р и м е ч а н и е — Область действия объекта подтипа не считается вложенной в область действиясупертипа.Объявления. Следующие элементы языка EXPRESS могут объявляться идентификаторами вобласти действия объявления объекта:-атрибуты (явные, вычисляемые и инверсные); - метка правила (правил уникальности и областей значений); - выражение запроса (внутри вычисляемых атрибутов и правил областей значений).П ри м е р 73 — Идентификаторы атрибута batt в двух объектах не конфликтуют, посколькуони объявлены в разных областях действия.ENTITY entity 1;aait : INTEGER;batt : INTEGER;END.ENT1TY;ENTITY entity2;a: entity I;batt : INTEGER;END_ENTITY;П р и м е р 74 — Следующая спецификация недопустима, поскольку идентификатор атрибутаaatt в области действия объекта illegal одновременно и наследуется, и объявляется (см. 9.2.3.3).Метки правила lab в двух объектах не конфликтуют, поскольку они объявлены в разных областяхдействия; верный экземпляр объекта illegal, игнорируя ошибку с атрибутом aatt, подчиняетсяобоим правилам областей значений.ENTITY may_be_ok;quantity : REAL;aatt: REAL;WHERElab : quantity > = 0.0;END_ENTITY;ENTITY illegalSUBTYPE OF (may be ok);aatt ; INTEGER;batt : INTEGER;WHERElab : batt < 0;END.ENT1TY:50
ГОСТ Р ИСО 10303-11-200010.3.6 Ф у н к ц и я (function)Видимость. Идентификатор функции является видимым в области действия функции, про­цедуры. правила или схемы, в которой он объявлен.Область действия. Объявление функции определяет новую область действия. Эта областьдействия простирается от ключевого слова FUNCTION до ключевого слова END_FUNCTION,завершающего объявление данной функции.Объявления. Следующие элементы языка EXPRESS могут объявляться идентификаторами вобласти действия объявления функции:- оператор переименования; - константа; - объект; - перечисление; - функция; - параметр; - процедура; - выражение запроса;- оператор возврата;- тип; - метка типа; - переменная.П р и м е р 75 — Следующие определения неверны, поскольку идентификатор формальногопараметра рапн используется одновременно и как идентификатор локальной переменной.FUNCTION illegaKparm : REAL) : LOGICAL; LOCALparm : STRING;END_ LOCAL;END_ FUNCTION;10.3.7 П а р а м е т р (parameter)Видимость. Идентификатор формального параметра является видимым в области действияфункции или процедуры, в которой он объявлен.10.3.8 П р о ц е д у р а (procedure)Видимость. Идентификатор процедуры является видимым в области действия функции,процедуры, правила или схемы, в которой он объявлен.Область действия. Объявление процедуры определяет новую область действия. Эта областьдействияпростираетсяотключевогословаPROCEDUREдоключевогословаENDEPROCEDURE, завершающего объявление процедуры.Объявления. Следующие элементы языка EXPRESS могут объявляться идентификаторами во б л а е т действия объявления процедуры:- оператор переименования; - константа; - объект; - перечисление; - функция; - параметр; - процедура; - выражение запроса; - оператор возврата; - тип; - метка типа; - переменная.10.3.9 В ы р а ж е н и е з а п р о с а (query expression)Определение выражения QUERY (запрос) см. в 12.6.7.Видимость. Идентификатор, неявно объявленный в выражении запроса, является видимым вобласти действия, определенной выражением запроса.51
ГОСТ I* ИСО 10303-11-2000Область действия. Выражение запроса определяет новую область действия. Эта область дей­ствия простирается от открывающей круглой скобки '<* после ключевого слова QUERY до за­крывающей круглой скобкизавершающей данное выражение запроса.Объявления. Следующие элементы языка EXPRESS могут объявляться идентификаторами вобласти действия выражения запроса:- выражение запроса.10.3.10 О п е р а т о р ц и к л а (repeat statement)Определение оператора REPEAT см. в 13.9.Видимость. Идентификатор, неявно объявленный в операторе цикла, управляющем прира­щением. является видимым в области действия данного оператора цикла.Область действия. Оператор цикла определяет новую область действия. Эта область дейст­вия простирается от ключевого слова REPEAT до ключевого слова END_REPEAT, завершающегооператор цикла.Объявления. Следующие элементы языка EXPRESS могут объявляться идентификаторами вобласти действия оператора цикла:- оператор переименования; - выражение запроса; - оператор цикла.10.3.11 П р а в и л о (rule)Видимость. Идентификатор правила является видимым в области действия схемы, в которойон правила объявил.П р и м е ч а н и е — Идентификатор правила может быть использован только для реализации. В языкеEXPRESS отсутствуют механизмы ссылки на идентификатор правила.Область действия. Объявление правила определяет новую область действия. Эта областьдействия простирается от ключевого слова RULE до ключевого слона END_RULE. завершающе­го объявление правила.Объявления. Следующие элементы языка EXPRESS могут быть объявлены идентификатора­ми в области действия объявления правила:- оператор переименования; - константа; - объект; - перечисление; - функция; - параметр; - процедура; - выражение запроса; - оператор возврата; - метка правила; - тип; - метка типа; - переменная.П р и м е р 76 — Следующее определение неверно, так как идентификатор point относится кобъекту, на который распространяется правило, неявно объявлен как переменная внутри правилаи в то же время явно объявлен как локальная переменная.RULE illegal FOR (point); LOCALpoint : STRING;E N D , LOCAL;END_RULE;10.3.12 М е т к а п р а в и л а (rule label)Видимость. Метка правила является видимой в области действия объекта, правила или типа,в которой она объявлена.П р и м е ч а н и е — Метка правила используется только в реализации. В языке EXPRESS отсутствуютмеханизмы ссылки на метку правила.52
ГОСТ Р ИСО 10303-11-200010.3.13 С х е м a (schema)Видимость. Идентификатор схемы является видимым для всех других схем.П р и м е ч а н и е — В соответствующей реализации может применяться механизм обобщения областейдействия, который позволяет трактовать группу схем как область действия.Область действия. Объявление схемы определяет новую область действия. Эта область дей ­ствия простирается от ключевого слова SCHEMA до ключевого слова END_SCHEMA, завер­шающе го объявление данной схемы.Объявления. Следующие элементы языка EXPRESS могут объявляться идентификаторами вобласти действия объявления схемы:- константа; - объект; - перечисление; -функция; - процедура; - правило; - тип.П р и м е р 77 — Следующая схема неверна по двум причинам. Во-первых, идентификаторadef импортирован в схему с помощью оператора USE, но одновременно был объявлен как имятипа. Во-вторых, имя fdef используется как идентификатор в двух объявлениях (одно для объекта,а другое для функции).SCHEMA incorrect;USE FROM anotlier_schema (adef);FUNCTION fdef(parm : NUMBER) ; INTEGER;END_FUNCTION;TYPE adef = STRING;END_TYPE;ENTITY fdef;E*ND_ENTITY;END_SCHEMA;10.3.14 Т и п (type)Видимость. Идентификатор типа является видимым в области действия функции, процеду­ры. правила или схемы, в которой он объявлен. Идентификатор типа остается видимым при ус­ловиях. определенных в 10.2.2. во внутренней области действия, которая переобъяаляет данныйидентификатор.Область действия. Объявление типа определяет новую область действия. Эта область дейст­вия простирается от ключевого слова TYPE до ключевого слова END_TYPE, завершающего объ­явление типа.Объявления. Следующие элементы языка EXPRESS могут объявляться идентификаторами вобласти действия объявления типа:- перечисление; - метка правила (правило области значений); - выражение запроса (внутри правила области значений).10.3.15 М е т к а т и п а (type label)Видимость. Метка типа является видимой в области действия функции или процедуры, вкоторой она объявлена. Метка типа неявно объявляется при первом ее появлении в области дей­ствия, которая должна присутствовать в определении (спецификации) формального параметра.На объявленную таким образом метку типа можно ссылаться либо в определении формальногопараметра, либо в локальных объявлениях функции или процедуры. Если метка типа объявлена вфункции, на метку типа могут делаться ссылки в спецификации возвращаемого типа функции.10.3.16 П е р е м е н н а я (variable)Видимость. Идентификатор переменной является видимым в области действия функции,процедуры или правила, в которой она объявлена.53
ГОСТ Г ИСО 10303-11-2000 11 Спецификация интерфейсаВ этом разделе описаны конструкции, позволяющие элементам, объявленным п одной схе­ме, стать видимыми в другой схеме. Существуют два вида спецификации интерфейса: USE (при­менить) и REFERENCE (сослаться), которые обеспечивают видимость элементов. СпецификацияIJSE позволяет элементам, объявленным в одной схеме, иметь независимые экземпляры в схеме,определяющей конструкцию USE.Экземпляр объекта считается независимым, если он не играет роль, предписываемую атрибу­том другого экземпляра объекта, то есть функция ROLESOF (см. 15.20) для независимого экземп­ляра объекта будет возвращать пустой набор. Тип данных объекта, который был объявлен локальнов схеме или с использованием USE в данной схеме, может быть применен для независимого созда­ ния экземпляров или играть роль, предписываемую атрибутом объекта в данной схеме.Объекты, которые явно импортированы с помощью спецификации REFERENCE или им­портированы в схему неявно, должны создаваться только экземпляры, играющие роль, описан­ ную атрибутом реализации объекта в схеме.Синтаксис: 228 interface_specification = refen?nce_clause | use_clause .Внешним объявлением является любое объявление (например, объекта), которое появляетсяво внешней схеме (любой схеме, отличной от данной схемы).Другое различие между двумя видами интерфейса состоит в том, что спецификация USEприменяется только к поименованным типам данных (типам данных объекта и определеннымтипам данных), в то время как спецификация REFERENCE применяется ко всем объявлениям,за исключением правил и схем.Внешний элемент языка EXPRESS может быть в данной схеме затаи новым именем. Наэлемент языка EXPRESS в данной схеме следует ссылаться по новому имени, заданному послеключевого слона AS.11.1 Спецификация интерфейса USEТип данных объекта или определенный тип данных, объявленный во внешней схеме, стано­вится видимым посредством использования спецификации USE. Спецификация USE задает имявнешней схемы и факультативно объявленные в ней имена типов данных объекта или опреде­ленных типов данных. Если в спецификации USE не определен named_types, все поименованныетипы данных, объявленные или используемые внешней схемой, трактуются как объявленные ло­кально в данной схеме.Синтаксис:313 use_clau.se = USE FROM schema_ref | '(' named jyp e_or_ re name{ Y named_type_or_rename ) ')' | Y -246 named _type_or_rename = nam edtypes | AS ( en tiiy jd | type J d ) | .11.2 Спецификация интерфейса REFERENCEСпецификация REFERENCE дает возможность сделать видимыми в данной схеме следую­щие элементы языка EXPRESS, объявленные во внешней схеме:- константа; - объект; - функция; - процедура; - тип.Спецификация REFERENCE задает имя внешней схемы и, факультативно, имена элементовязыка EXPRESS, объявленные в ней. Если имена не установлены, то все элементы языкаEXPRESS, объявленные или используемые внешней схемой, являются видимыми в текущей схеме.Синтаксис:267 relerence_clause = REFERENCE FROM schema_ref | ’(* resource_or_rename{ Y resource_or_rename ) ')' I Y •274 resource_or_rename = resource._ref | AS rename J d | .275 resource_ref = constant_ref | entity_ref | function_ref ] procedure_ref |type_ref.270 rename J d = constant J d | en tityjd | functionjd | procedure J d | type J d .54
ГОСТ Р ИСО 10303-11-2000Внешние объявления в спецификации REFERENCE не рассматриваются как локальныеобъявления, а поэтому для них не могут быть созданы независимые экземпляры, по могут бытьсозданы экземпляры, играющие роль, описанную атрибутом объекта в данной (текущей) схеме.11.3 Взаимодействие USE и REFERENCEЕсли тип данных объекта или определенный тип данных одновременно импортированы вданную схему с использованием USE и REFERENCE, спецификация USE имеет приоритет.П р и м е р 78 — ОператорыUSE FROM si ( аI);REFERENCE FROM si (al);al трактуется как локальное объявление.Когда поименованный тип данных импортирован USE, этот поименованный тип данныхможет быть импортирован из данной схемы другой схемой с USE или REFERENCE (то есть воз­можен последовательный импорт из схемы в схему с помощью спецификации USE).П р и м е р 79 — Даны следующие два объявления схем:SCHEMA si;ENTITY e l; END ENTITY;END_SCHEMA;SCHEMA s2;USE FROM si (el AS e2); END_SCHEMA:следующие спецификации эквивалентны.SCH E MA s3;SC H E MA s3;USE FROM si (el AS e2);USE FROM s2 (e2);END_SCHEMA;.END_SCHEMA;Поскольку элементы языка EXPRESS, импортированные посредством REFERENCE, нерассматриваются как элементы, имеющие локальное объявление, их дальнейший импорт невоз­можен.11.4 Неявные интерфейсыВнешние объявления могут ссылаться на идентификаторы, которые не являются видимымив данной схеме. Эти элементы языка EXPRESS, на которые ссылаются неявно, необходимы дляпонимания данной (текущей) схемы, но они не видимы для элементов языка EXPRESS, объяв­ленных в данной схеме. Каждый импортированный неявно элемент также может ссылаться надругие элементы языка EXPRESS, которые не яаляются видимыми в данной схеме; эти элементыязыка EXPRESS также необходимы дтя полного понимания данной (текущей) схемы.П ри м е р 80 — Неявно импортированные элементы и последующие неявные интерфейсы.SCHEMA si;TYPE 11 = REAL:END_TYPE;ENTITY e l;a : tl;END_ENTLIY;ENTITY e2;al : e l;END_ENTITY;END_SCHEMA:SCHEMA s2;REFERENCE FROM si (e2);55
ГОСТ I* ИСО 10303-11-2000ENTITY еЗ;аЗ : е2;END_ENT1TY;END_SCHEMA:Объект е2 используется как тип данных атрибута аЗ. Поскольку в определении е2 использу­ется e l , объект e l неявно импортируется схемой s2. Однако поскольку c l не был явно импорти­рован в схему s2. e l не может упоминаться в схеме s2. Также, в определении e l используется t l,следовательно, 11 также неявно импортирован в схему s2.В последующих пунктах слово «импортирован* будет использоваться в смысле неявного им­портирования или импортирования посредством USE или REFERENCE.11.4.1 И н т е р ф е й с ы к о н с т а н тПри импорте констант неявно импортируются:-любые определенные типы данных, используемые в объявлении импортируемой константы;-любые типы данных объекта, используемые в объяатении импортируемой константы;-любые константы, используемые в объявлении импортируемой константы; -любые функции, используемые в объяатении импортируемой константы.11.4.2 И н т е р ф е й с ы о п р е д е л е н н ы х т и п о в д а н н ы хПри импорте определенного типа данных неявно импортируются:-любые определенные типы данных, используемые в объяатении импортируемого типа, заисключением случая, когда импортируемым типом яагяегся тип SELECT; в результате импортаэтого типа ни один из выбираемых элементов не будет импортирован неявно:-любые константы или функции, используемые в объяатении импортируемого определен­ного типа данных;-любые константы или функции, используемые в правилах областей значений импортируе­мого определенного типа данных;-любые определенные типы данных, предегаатенные типом данных SELECT, чей списокпыбора содержит импортируемый определенный тип данных.П ри м е р 81 — Неявный импорт определенного типа данных через тип данных SELECT.SCHEMA si;TYPE sell = SELECT (el.tl);END.TYPE;TYPE tl = INTEGER;END.TYPE;ENTITY el;END_ENTITY;END_SCHEMA;SCHEMA s2;REFERENCE FROM si (tl): END.SCHEMA:Схема s2 содержит явную ссылку на t l , а тип sell предстаатен типом SELECT, содержащимtl; sell яатяется неявной ссылкой.11.4.3 И н т е р ф е й с ы т и п о в д а н н ы х о б ъ е к т о вПри импорте типа данных объекта неявно импортируются:- все типы данных объекта, которые яатяются супертипами импортируемого типа данныхобъекта;П р и м е ч а н и е — Подтипы импортируемого тина данных объекта неявно импортированы не будут,даже если они входят в выражение SUPERTYPE OF:-все правила, ссылающиеся на импортируемый тип данных объек