ГОСТ Р ИСО 10303-11-2000
Группа П87
ГОСУДАРСТВЕННЫЙ СТАНДАРТ РОССИЙСКОЙ ФЕДЕРАЦИИ
Системы автоматизации производства и их интеграция
ПРЕДСТАВЛЕНИЕ ДАННЫХ ОБ ИЗДЕЛИИ И ОБМЕН ЭТИМИ ДАННЫМИ
Часть 11.
Методы описания. Справочное руководство по языку EXPRESS
Industrial automation systems and integration. Product data representation and exchange. Part 11. Description methods. The EXPRESS language reference manual
ОКС 25.040.40
ОКСТУ 4002
Дата введения 2001-07-01
Предисловие
1 РАЗРАБОТАН Всероссийским научно-исследовательским институтом стандартизации (ВНИИстандарт) совместно с НИЦ CALS-технологий "Прикладная логистика"
ВНЕСЕН Техническим комитетом по стандартизации ТК 431 "CALS-технологии"
2 ПРИНЯТ И ВВЕДЕН В ДЕЙСТВИЕ Постановлением Госстандарта России от 14 ноября 2000 г. N 293-ст
3 Настоящий стандарт представляет собой аутентичный текст международного стандарта ИСО 10303-11-94 "Системы автоматизации производства и их интеграция. Представление данных об изделии и обмен этими данными. Часть 11. Методы описания. Справочное руководство по языку EXPRESS" с учетом поправки 1-99
4 ВВЕДЕН ВПЕРВЫЕ
Введение
Введение
Стандарты серии ГОСТ Р ИСО 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 в ряде случаев выделены полужирным шрифтом (например, file_description).
1 Область применения
В настоящем стандарте определен язык, с помощью которого могут быть описаны аспекты данных об изделии. Данный язык называется EXPRESS.
В стандарте также определено графическое представление для подмножества конструкций в языке EXPRESS. Это графическое представление называется EXPRESS-G.
В ГОСТ Р ИСО 10303-1 EXPRESS описан как язык определения данных. Данный язык состоит из элементов, которые позволяют однозначно определять данные и устанавливать ограничения на эти данные.
Область применения настоящего стандарта охватывает:
- типы данных;
- ограничения на экземпляры типов данных.
Область применения настоящего стандарта не охватывает:
- определение форматов баз данных;
- определение форматов файлов;
- определение форматов передачи;
- управление процессом;
- обработку информации;
- обработку особых ситуаций.
Язык EXPRESS не является языком программирования.
2 Нормативные ссылки
В настоящем стандарте использованы ссылки на следующие стандарты:
ГОСТ Р ИСО 10303-1-99 Системы автоматизации производства и их интеграция. Представление данных об изделии и обмен этими данными. Часть 1. Общие представления и основополагающие принципы.
ИСО/МЭК 8824-1-95* Информационная технология. Взаимосвязь открытых систем. Абстрактная синтаксическая нотация версии один (АСН.1). Часть 1. Требования к основной нотации
__________________
* Оригинал стандарта ИСО/МЭК - во ВНИИКИ Госстандарта России.
ИСО/МЭК 10646-1-93* Информационная технология. Универсальный многобайтный кодированный набор символов (UCS). Часть 1: Архитектура и основной многоязычный уровень
__________________
* Оригинал стандарта ИСО/МЭК - во ВНИИКИ Госстандарта России.
3 Определения
3.1 Термины, определенные в ГОСТ Р ИСО 10303-1
В настоящем стандарте использованы следующие термины:
- контекст;
- данные;
- язык определения данных;
- информация.
3.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): He подлежащий декомпозиции лексический элемент языка.
3.3.15 значение (value): Блок данных.
4 Требования соответствия
4.1 Формальные спецификации, написанные на EXPRESS
4.1.1 Лексический язык
Формальная спецификация, написанная на EXPRESS, должна быть согласована с заданным уровнем, как указано ниже. Формальная спецификация согласована с заданным уровнем, когда все проверки, установленные для этого уровня и всех нижних уровней, удовлетворены для этой спецификации.
Уровни проверки
Уровень 1: проверка ссылок. Данный уровень состоит из проверки формальной спецификации, гарантирующей ее синтаксическую и ссылочную корректность. Формальная спецификация синтаксически корректна, если она соответствует синтаксису, полученному расширением первичных синтаксических правил (синтаксиса), установленных в приложении А. Формальная спецификация корректна в отношении ссылок, если все ссылки на каждый элемент описания языка EXPRESS соответствуют области применения и правилам видимости, установленным в разделах 10 и 11.
Уровень 2: проверка типов. Данный уровень состоит из проверки формальной спецификации, гарантирующей ее соответствие следующему:
- выражения должны удовлетворять правилам, установленным в разделе 12;
- присваивания должны удовлетворять правилам, установленным в 13.3;
- объявления инверсных атрибутов должны удовлетворять правилам, установленным в 9.2.1.3;
- переобъявления атрибутов должны удовлетворять правилам, установленным в 9.2.3.4.
Уровень 3: проверка значения. Данный уровень состоит из проверки формальной спецификации, гарантирующей ее соответствие утверждениям вида "А должно быть больше В", как установлено в разделах 7-16. Проверка справедлива для тех положений, в которых А и В могут быть выражены литералами и/или константами.
Уровень 4: полная проверка. Данный уровень состоит из проверки формальной спецификации, гарантирующей ее соответствие всем формулировкам требований, установленным в настоящем стандарте.
Пример 1 - В настоящем стандарте установлено, что функция должна иметь оператор возврата ("return") для каждой из возможных ветвей, по которым может пойти процесс после вызова данной функции. Это должно быть проверено.
4.1.2 Графическая форма
Формальная спецификация, написанная на EXPRESS-G, должна быть согласована с заданным уровнем, как указано ниже. Формальная спецификация согласована с заданным уровнем, когда все проверки, установленные для этого уровня и всех нижних уровней, удовлетворены для этой спецификации.
Уровни проверки
Уровень 1: проверка символов и области применения. Данный уровень состоит из проверки формальной спецификации, гарантирующей ее соответствие как требованиям к уровню объекта, так и требованиям к уровню схемы, как определено в D.5 и D.6. Это охватывает проверку того, что в формальной спецификации символы используются в соответствии с D.2-D.4. Формальная спецификация также должна быть проверена на соответствие страничных ссылок и переобъявленных атрибутов требованиям D.4.1 и D.5.5.
Уровень 2: полная проверка. Данный уровень состоит из проверки формальной спецификации для установления тех мест, которые не соответствуют требованиям к полному уровню объекта или полному уровню схемы, определенным в приложении D, и требованиям, установленным в разделах 7-16.
4.2 Реализации EXPRESS
4.2.1 Синтаксический анализатор языка EXPRESS
Реализация синтаксического анализатора языка EXPRESS должна выполнять синтаксический разбор любой формальной спецификации, написанной на EXPRESS, в соответствии с ограничениями, установленными в приложении Е и связанными с этой реализацией. Синтаксический анализатор языка EXPRESS будет считаться соответствующим конкретному уровню проверки (как установлено в 4.1.1), если он может применять все проверки, требуемые для данного уровня (и любых нижележащих уровней), к формальной спецификации, написанной на EXPRESS.
Разработчик синтаксического анализатора языка EXPRESS должен установить любые ограничения, которые реализация накладывает на число и длину идентификаторов, на диапазон обрабатываемых чисел и на максимальную точность действительных чисел. Такие ограничения должны быть документально оформлены в виде, установленном в приложении Е, с целью проведения аттестационного тестирования.
4.2.2 Средство графического редактирования
Реализация редактора EXPRESS-G должна обеспечивать возможности создания и отображения формальных спецификаций на EXPRESS-G, в соответствии с ограничениями, установленными в приложении Е и связанными с этой реализацией. Редактор EXPRESS-G будет считаться соответствующим конкретному уровню проверки, если он может создавать и отображать формальные спецификации на EXPRESS-G, которые соответствуют указанному уровню проверки (и любому нижележащему уровню).
Разработчик редактора EXPRESS-G должен установить любые ограничения, которые реализация накладывает на число и длину идентификаторов, на число доступных символов на страницу модели и на максимальное число страниц. Такие ограничения должны быть документально оформлены в виде, установленном в приложении Е, с целью проведения аттестационного тестирования.
5 Фундаментальные принципы
Предполагается, что читатели настоящего стандарта знакомы с нижеуказанными концепциями.
Схема, написанная на языке EXPRESS, описывает набор условий, которые устанавливают область ее определения. Экземпляры могут быть оценены для определения их принадлежности к данной области значений. Если экземпляры отвечают всем условиям, тогда они объявляются принадлежащими к данной области. Если экземпляры противоречат любому из условий, тогда они нарушают условия и поэтому не принадлежат данной области. В случае, когда экземпляры не имеют значений для необязательных атрибутов, а некоторые условия содержат в себе эти необязательные атрибуты, то не всегда возможно определить, отвечают ли экземпляры всем условиям. В таком случае считается, что экземпляры входят в данную область.
Многим элементам языка EXPRESS присвоены имена. Имя позволяет другим элементам языка ссылаться на связанное с этим именем представление. Использование имени в определении других элементов языка вводит в силу ссылку на исходное представление. Так как синтаксис языка использует идентификатор для имени, то исходное представление должно быть исследовано для понимания его структуры.
Определение типа данных объекта в языке EXPRESS описывает область его значений. Предполагается, что отдельные элементы области различаются некоторыми связанными с ними уникальными идентификаторами. В EXPRESS не установлены содержание или представление этих идентификаторов.
Объявление постоянного экземпляра объекта определяет идентифицируемый элемент области, описанной типом данных объекта. Такие экземпляры объектов не будут изменены или уничтожены операциями, выполняемыми в данной области.
Процедурные описания ограничений в EXPRESS могут объявлять или делать ссылки на дополнительные экземпляры объекта как на локальные переменные, которые, как предполагается, будут временными идентифицируемыми элементами области. Данные процедурные описания могут изменять эти дополнительные экземпляры объекта, но не могут изменять постоянные элементы данной области. Эти временные элементы области доступны только в пределах действия процедурного описания, в котором они объявлены, и прекращают существование за пределами этого описания.
Язык EXPRESS не описывает среду реализации. В частности EXPRESS не определяет:
- как разрешены ссылки на имена;
- какие другие схемы известны;
- как и когда проверяются ограничения;
- что должна делать реализация, если ограничение не удовлетворено;
- имеют или нет право на существование в реализации экземпляры, которые не соответствуют EXPRESS-схеме;
- как и где в реализации создаются, изменяются и удаляются экземпляры.
6 Синтаксис определения языка
В настоящем разделе определена нотация, используемая для представления синтаксиса языка EXPRESS. Полный синтаксис для языка EXPRESS приведен в приложении А. Части этих синтаксических правил воспроизведены в различных разделах настоящего стандарта для иллюстрации синтаксиса конкретного оператора. Эти части не всегда полны. Поэтому иногда необходимо руководствоваться приложением А для недостающих в данном примере правил. Части синтаксиса в тексте настоящего стандарта представлены в рамке. Каждое правило внутри синтаксической рамки слева имеет уникальный номер для использования его в перекрестных ссылках на другие синтаксические правила.
6.1 Синтаксис спецификации
Синтаксис EXPRESS определен как производная от Синтаксической Нотации Вирта (СНВ).
Примечание - См. ссылку в приложении J [3].
Соглашение по нотации и самоопределенная СНВ приведены ниже.
syntax | = | { production } . |
production | = | identifier `=` expression `.` . |
expression | = | term { `|` term } . |
term | = | factor { factor } . |
factor | = | identifier | literal | group | option | repetition . |
identifier | = | character { character } . |
literal | = | ```` character { character } ```` . |
group | = | `(` expression `)` . |
option | = | `[` expression `]` . |
repetition | = | `{` expression `}` . |
- Знак равенства `=` указывает логическое заключение. Элемент слева от знака определяется комбинацией элементов справа. Любые пробелы, появляющиеся между элементами логического заключения, не входящие в пределы литерала, не имеют значения. Логическое заключение завершается точкой `.`.
- Использование идентификатора внутри коэффициента означает нетерминальный символ, который появляется слева от другого логического заключения. Идентификатор состоит из букв, цифр и символа подчеркивания. Ключевые слова языка представляются логическими заключениями, идентификаторы которых состоят только из заглавных букв.
- Литерал используется для обозначения терминального символа, который не может быть расширен далее. Литерал является последовательностью любых символов, заключенной в апострофы. Символ, в данном случае, может быть любым символом, определенным по ИСО/МЭК 10646-1 в позициях 21-7Е группы 00, плоскости 00, строки 00. Чтобы апостроф был включен в литерал, он должен быть записан дважды.
Семантика скобок определена ниже:
- фигурные скобки `{}` указывают нулевое или большее количество повторений;
- квадратные скобки `[ ]` указывают необязательные параметры;
- круглые скобки `( )` указывают, что группа логических заключений, включенных в круглые скобки, должна быть использована как единое логическое заключение;
- вертикальная линия `|` указывает, что в выражении должен быть выбран только один элемент.
Пример 2 - Синтаксис для строкового типа:
Синтаксис: |
293 string_type = STRING [ width_spec ] . |
318 width_spec = `(` width `)` [ FIXED ] . |
317 width = numeric_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;
-\n - представляет символ "новая строка (newline)" (системно зависимый) (см. 7.1.5.2);
-\q - символ кавычки (апострофа) (`) и содержится внутри \а;
- \s - символ пробела;
-\х8, \х9, \хА, \хВ, \хС, \xD - представляет символы в позициях 8-13 строки 00, плоскости 00, группы 00 ИСО/МЭК 10646-1.
7 Основные элементы языка
В настоящем разделе определены основные элементы, из которых составляется EXPRESS-схема: набор символов, комментарии, знаки, зарезервированные слова, идентификаторы и литералы.
Основные элементы языка компонуются в текст, разделяемый обычно на физические строки. Физическая строка является любым числом (включая нулевое) символов, заканчивающимся символом "новая строка" (см. 7.1.5.2).
Примечание - Схема более удобна для чтения, когда операторы разделены на строки, а для компоновки различных конструкций используется пробел (whitespace).
Пример 4 - Следующие записи эквивалентны:
entity point; x, у, z:real; end_entity;
ENTITY point;
x,
у,
z: REAL;
END_ENTITY;
7.1 Набор символов
В схемах, написанных на языке EXPRESS, должны использоваться только символы из следующего набора: символы, расположенные в 08-0D, графические символы, лежащие в диапазоне 20-7Е из ИСО/МЭК 10646-1, а также специальный символ \n, означающий новую строку. Данный набор называется набором символов EXPRESS. Элемент этого набора ссылается на позицию соответствующего стандарта, в которой расположен данный символ; номера этих позиций определены в шестнадцатеричной системе. Печатаемые символы данного набора (позиции 21-7Е из ИСО/МЭК 10646-1) объединяются для формирования лексем языка EXPRESS. Лексемами EXPRESS являются ключевые слова, идентификаторы, знаки или литералы. Дальнейшая классификация набора символов EXPRESS приведена ниже.
Данный набор символов определен как абстрактный набор символов; он не зависит от его представления в реализации.
Примечание - В ИСО/МЭК 6429 (см. [1] из приложения J) установлены семантики символов позиций 08-0D из ИСО/МЭК 10646-1. В настоящем стандарте не требуются семантики, установленные в ИСО/МЭК 6429.
7.1.1 Цифры
В EXPRESS используются арабские цифры 0-9 (позиции 30-39 из набора символов EXPRESS).
Синтаксис: |
120 digit = `0` | `1` | `2` | `3` | `4` | `5` | `6` | `7` | `8` | `9` . |
7.1.2 Буквы
В EXPRESS используются строчные и прописные буквы английского алфавита (позиции 41-5А и 61-7А набора символов EXPRESS). Регистр букв имеет значение только в явных строковых литералах.
Примечание - Текст на языке EXPRESS может быть написан с использованием верхних, нижних или смешанных регистров (заглавных, строчных или и тех и других букв - см. пример 4).
Синтаксис: |
124 letter = `а` | `b` | `с` | `d` | `е` | `f'`| `g` | `h` | `i` | `j` | `k` | `l` | `m` | `n` | `о` | |
7.1.3. Специальные символы
Специальные символы (выводимые на печать символы, которые не являются ни буквами, ни цифрами) используются главным образом для пунктуации и в качестве операторов. Специальные символы соответствуют позициям 21-2F, 3A-3F, 40, 5В-5Е, 60 и 7В-7Е набора символов EXPRESS.
Синтаксис: |
134 special = not_paren_star_quote_special | `(` | `)` | `*` | ```` . |
128 not_paren_star_quote_special = `!` | `"` | `#` | `$` | `%` | `&` | `+` | `,` | |
7.1.4 Подчеркивание
Символ подчеркивания (`_` - ячейка 5F набора символов EXPRESS) может использоваться в идентификаторах и ключевых словах, за исключением использования его в качестве первого символа.
7.1.5 Пробел
Пробел (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. Обычно новая строка трактуется как пробел, но существует разница между завершением заключительного комментария и неправильным окончанием строкового литерала. В синтаксисе языка символ новой строки представляется нотацией \n.
Конкретное представление новой строки определяется спецификой реализации.
7.1.5.3 Другие символы
Символы из позиций 08-0D должны рассматриваться как пробел (whitespace), кроме случаев, когда они встречаются внутри строкового литерала. Для представления этих символов в синтаксисе языка должна быть использована нотация \хn, где n является одним из символов: 8, 9, А, В, С и D.
7.1.6. Комментарии
Комментарий используется при документировании описания и должен быть интерпретирован синтаксическим анализатором языка EXPRESS как пробел (whitespace). Существует два вида комментариев: вложенный и заключительный.
7.1.6.1 Вложенный комментарий
Пара символов `(*` обозначает начало вложенного комментария, а пара символов `*)` обозначает его окончание. Вложенный комментарий может располагаться между двумя любыми лексемами.
Синтаксис: |
142 embedded_remark = `(*` { not_lparen_star | lparen_not_star | star_not_rparen | embedded_remark } `*)` . |
126 not_lparen_star = not_paren_star | `)` . |
127 not_paren_star = letter | digit | not_paren_star_special . |
124 letter =`а` | `b` | `с` | `d` | `е` | `f` | `g` | `h` | `i` | `j` | `k` | `l` | |
120 digit = `0` | `1` | `2` | `3` | `4` | `5` | `6` | `7` | `8` | `9` . |
129 not_paren_star_special = not_paren_star_quote_special | ```` . |
128 not_paren_star_quote_special = `!` | `"` | `#` | `$` | `%` | `&` | `+` | `,` | |
125 lparen_not_star = `(` not_star . |
132 not_star = not_paren_star | `(` | `)` . |
135 star_not_rparen = `*` not_rparen . |
131 not_rparen = not_paren_star | `*` | `(` . |
Любой символ из набора символов EXPRESS может быть вставлен между началом и концом вложенного комментария, включая символ "новая строка (newline)", поэтому вложенные комментарии могут охватывать несколько физических строк.
Вложенные комментарии могут вкладываться друг в друга.
Примечание - При вложении комментариев необходимо обращать большое внимание на согласование пар символов.
Пример 5 - Пример вложенных комментариев.
(* Символ `(*` начинает комментарий, а символ `*)` его заканчивает *).
7.1.6.2 Заключительный комментарий
Заключительный комментарий записывается в конце физической строки. Два последовательных дефиса `--` начинают заключительный комментарий, а первый встреченный символ "новая строка" заканчивает его.
Синтаксис |
144 tail_remark = `- -` { \а | \s | \х8 | \х9 | \хА | \хВ | \хС [ \xD } \n . |
Пример 6 - -- Этот текст является комментарием, который заканчивается символом "новая строка (newline)".
7.2 Зарезервированные слова
Зарезервированными словами языка EXPRESS являются ключевые слова, а также имена встроенных констант, функций и процедур. Зарезервированные слова не должны использоваться в качестве идентификаторов. Зарезервированные слова языка EXPRESS описаны ниже.
7.2.1 Ключевые слова
Ключевые слова языка EXPRESS показаны в таблице 1.
Таблица 1 - Ключевые слова языка EXPRESS
ABSTRACT | AGGREGATE | ALIAS | ARRAY |
AS | BAG | BEGIN | BINARY |
BOOLEAN | BY | CASE | CONSTANT |
CONTEXT | DERIVE | ELSE | END |
END_ALIAS | END_CASE | END_CONSTANT | END_CONTEXT |
END_ENTITY | END_FUNCTION | END_IF | END_LOCAL |
END_MODEL | END_PROCEDURE | END_REPEAT | END_RULE |
END_SCHEMA | END_TYPE | ENTITY | ENUMERATION |
ESCAPE | FIXED | FOR | FROM |
FUNCTION | GENERIC | IF | INTEGER |
INVERSE | LIST | LOCAL | LOGICAL |
MODEL | NUMBER | OF | ONEOF |
OPTIONAL | OTHERWISE | PROCEDURE | QUERY |
REAL | REFERENCE | REPEAT | RETURN |
RULE | SCHEMA | SELECT | SET |
SKIP | STRING | SUBTYPE | SUPERTYPE |
THEN | TO | TYPE | UNIQUE |
UNTIL | USE | VAR | WHERE |
WHILE | | | |
Примечания
1 Ключевые слова представляются литералом, состоящим из символов заглавных букв (верхнего регистра). Это облегчает чтение синтаксических конструкций.
2 Ключевые слова CONTEXT (КОНТЕКСТ), END_CONTEXT (KOHEЦ_KOHTEKCTA), MODEL (МОДЕЛЬ) и END_MODEL (КОНЕЦ_МОДЕЛИ) зарезервированы для использования в последующих редакциях настоящего стандарта.
7.2.2 Зарезервированные слова-операторы
Операторы, определенные зарезервированными словами, приведены в таблице 2. Определения этих операторов см. в разделе 12.
Таблица 2 - Зарезервированные слова EXPRESS-операторы
AND | ANDOR | DIV | IN |
LIKE | MOD | NOT | OR |
XOR | | | |
7.2.3 Встроенные константы
Имена встроенных констант приведены в таблице 3. Определения этих констант см. в разделе 14.
Таблица 3 - Зарезервированные слова EXPRESS-константы
? | SELF | CONST_E | PI |
FALSE | TRUE | UNKNOWN | |
7.2.4 Встроенные функции
Имена встроенных функций приведены в таблице 4. Определения этих функций см. в разделе 15.
Таблица 4 - Зарезервированные слова EXPRESS-имена функций
ABS | ACOS | ASIN | ATAN |
BLENGTH | COS | EXISTS | EXP |
FORMAT | HIBOUND | HIINDEX | LENGTH |
LOBOUND | LOG | LOG2 | LOG10 |
LOINDEX | NVL | ODD | ROLESOF |
SIN | SIZEOF | SQRT | TAN |
TYPEOF | USEDIN | VALUE | VALUE_IN |
VALUE_UNIQUE | | | |
7.2.5 Встроенные процедуры
Имена встроенных процедур приведены в таблице 5. Определения этих процедур см. в разделе 16.
Таблица 5 - Зарезервированные слова EXPRESS-имена процедур
INSERT | REMOVE |
7.3 Знаки (symbols)
Знаки являются специальными символами или группами специальных символов, которые имеют специальное значение в языке EXPRESS. Знаки используются в языке EXPRESS как разделители и операторы. Разделитель используется для начала, выделения или окончания смежных лексических или синтаксических элементов. Интерпретация этих элементов была бы невозможна без разделителей. Операторы обозначают, что функции должны выполняться на операндах, которые связаны с оператором, описания этих операторов см. в разделе 12. EXPRESS-знаки приведены в таблице 6.
Таблица 6 - EXPRES-знаки
. | , | ; | : |
* | + | - | = |
% | ' | \ | / |
< | > | [ | ] |
{ | } | | | е |
( | ) | <= | <> |
>= | <* | := | || |
** | -- | (* | *) |
:=: | :<>: | | |
7.4 Идентификаторы
Идентификаторы являются именами, заданными элементам, объявленным в схеме (см. 9.3), включая саму схему. Идентификатор не должен быть таким же, как зарезервированное слово языка EXPRESS.
Синтаксис: |
140 simple_id = letter { letter | digit | `_` } . |
124 letter = `а` | `b` | `с` | `d` | `е` | `f` | `g` | `h` | `i` | `j` | `k` | `l` | |
120 digit = `0` | `1` | `2` | `3` | `4` | `5` | `6` | `7` | `8` | `9` . |
Первый символ идентификатора должен быть буквой. Остальные символы, при их наличии, могут являться любой комбинацией букв, цифр и символа "подчеркивание".
Разработчик синтаксического анализатора языка EXPRESS, в соответствии с приложением E, должен определить максимальное число символов идентификатора, которое может распознаваться данной реализацией.
7.5 Литералы
Литерал имеет самоопределенное постоянное значение. Тип литерала зависит от композиции символов, формирующих лексему. Литерал может иметь один из следующих типов: двоичный, целочисленный, действительный, строковый и логический.
Синтаксис: |
238 literal = binary_literal | integer_literal | logical_literal | real_literal | string_literal . |
7.5.1 Двоичный литерал
Двоичный литерал представляет значение двоичного типа данных и состоит из знака %, за которым следует один или более битов (1 или 0).
Синтаксис: |
136 binary_ literal = `%` bit { bit } . |
119 bit = `0` | `1` . |
Разработчик синтаксического анализатора языка EXPRESS, в соответствии с приложением E, должен определить максимальное число битов в двоичном литерале, которое может распознаваться данной реализацией.
Пример 7 - Правильный двоичный литерал.
%0101001100
7.5.2 Целочисленный литерал
Целочисленный литерал представляет собой значение целого типа данных, состоящее из одной или более цифр.
Синтаксис: |
138 integer_literal = digits . |
121 digits = digit { digit } . |
120 digit `0` | `1` | `2` | `3` | `4` | `5` | `6` | `7` | `8` | `9` . |
Примечание - Знак целочисленного литерала не используется в синтаксисе, так как EXPRESS использует концепцию унарных операторов внутри синтаксиса выражения.
Разработчик синтаксического анализатора языка EXPRESS, в соответствии с приложением E, должен определить максимальное значение целого для целочисленного литерала, которое может распознаваться данной реализацией.
Пример 8 - Допустимые целочисленные литералы
4016
38
7.5.3 Действительный литерал
Действительный литерал представляет собой значение действительного типа данных, состоящее из мантиссы и необязательного показателя экспоненты; мантисса должна включать десятичную точку.
Синтаксис |
139 real_literal = digits `.` [ digits ] [ `e` [ sign ] digits ] . |
121 digits = digit { digit } . |
120 digit = `0` | `1` | `2` | `3` | `4` | `5` | `6` | `7` | `8` | `9` . |
286 sign = `+` | `-` . |
Примечание - Знак действительного литерала не смоделирован в пределах синтаксиса, так как EXPRESS использует концепцию унарных операторов внутри синтаксиса выражения.
Разработчик синтаксического анализатора языка EXPRESS, в соответствии с приложением Е, должен определить максимальную точность и максимальный показатель экспоненты действительного литерала, которые могут распознаваться данной реализацией.
Примеры
9 - Допустимые действительные литералы
1.Е6"Е" может быть записано как строчной, так и прописной буквой
3.5е-5
359.62
10 - Недопустимые действительные литералы
.001 По крайней мере одна цифра должна предшествовать десятичной точке.
1е10 Десятичная точка должна быть частью литерала.
1. e10 Пробел не является частью действительного литерала.
7.5.4 Строковый литерал
Строковый литерал представляет собой значение строкового типа данных. Существуют две формы строкового литерала: простой и кодированный. Простой строковый литерал состоит из последовательности символов из набора символов EXPRESS (см. 7.1), заключенной в апострофы (`). Апостроф внутри простого строкового литерала представляется двумя последовательными апострофами. Кодированный строковый литерал состоит из четырехоктетного кодированного представления каждого символа из последовательности символов ИСО/МЭК 10646-1, заключенного в кавычки ("). Кодирование определяется следующим образом:
- первый октет = группа ИСО/МЭК 10646-1, в которой определен символ;
- второй октет = плоскость ИСО/МЭК 10646-1, в которой определен символ;
- третий октет = строка ИСО/МЭК 10646-1, в которой определен символ;
- четвертый октет = ячейка ИСО/МЭК 10646-1, в которой определен символ.
Последовательность октетов должна определять один из символов по ИСО/МЭК 10646-1.
Строковый литерал строки никогда не должен выходить за границу физической строки; то есть символ "новая строка" не должен встречаться между апострофами, в которые заключен строковый литерал.
Разработчик синтаксического анализатора языка EXPRESS, в соответствии с приложением Е, должен определить максимальное число символов простого строкового литерала, которое может распознаваться данной реализацией.
Синтаксис: |
292 string_literal = simple_string_literal | encoded_string_literal . |
141 simple string literal = \q { ( \q \q ) | not_quote | \s | \x8 | \x9 | \xA | \xB | \xC | \xD } \q . |
130 not_quote = not_paren_star_quote_special | letter | digit | `(` | `)` | `*` . |
128 not_paren_star_quote_special = `!` | `"` | `#` | `$` | `%` | `&` | `+` | `,` | |
124 letter = `a` | `b` | `c` | `d` | `e` | `f` | `g` | `h` | `i` | `j` | `k` | `l` | |
120 digit = `0` | `1` | `2` | `3` | `4` | `5` | `6` | `7` | `8` | `9` . |
137 encoded_string_literal = `"` encoded_character { encoded_character } `"` . |
122 encoded_character = octet octet octet octet . |
133 octet = hex_digit hex_digit . |
123 hex_digit = digit | `a` | `b` | `с` | `d` | `e` | `f` . |
Разработчик синтаксического анализатора языка EXPRESS, в соответствии с приложением Е, должен также определить максимальное число октетов (которое должно быть кратно четырем) кодированного строкового литерала, которое может распознаваться данной реализацией.
Примеры
11 - Допустимые простые строковые литералы
`Ребенку нужна новая пара обуви!`
Читается как: ...Ребенку нужна новая пара обуви!
`Ed` `s Computer Store`
Читается как: ...Ed`s Computer Store
12 - Недопустимые простые строковые литералы
`Ed` s Computer Store`
Всегда должно быть четное число апострофов.
`Ed` `s Computer
Store`
Выходит за границы физической строки
13 - Допустимые кодированные строковые литералы
"00000041"
Читается А
"000000С5"
Читается
"0000795Е00006238"
Это японские иероглифы в нотации Кобе
14 - Недопустимые кодированные строковые литералы
"000041"
Октеты должны быть сгруппированы по четыре
"00000041 000000С5"
Между " " разрешены только шестнадцатеричные символы.
7.5.5 Логический литерал
Логический литерал представляет собой значение логических или булевых типов данных и является одной из встроенных констант TRUE, FALSE или UNKNOWN.
Примечание - UNKNOWN не совместим с булевым типом данных.
Синтаксис: |
242 logical_literal = FALS | TRUE | UNKNOWN . |
8 Типы данных
В настоящем разделе представлены типы данных как часть языка. Каждый атрибут, локальная переменная или формальный параметр имеет связанный с ними тип данных.
Типы данных подразделяются на простые, сборные (агрегатные), поименованные, созданные и обобщенные. Также типы данных подразделяются в соответствии с их использованием на основные, параметрические и исходные. Взаимоотношения между двумя этими классификациями описаны в 8.6.
Операции, которые могут быть выполнены над значениями этих типов данных, определены в разделе 12.
8.1 Простые типы данных
Простые типы данных определяют области элементарных единиц данных в EXPRESS. To есть они не могут быть далее декомпозированы на элементы, которые распознает EXPRESS. Простыми типами данных являются: NUMBER (ЧИСЛОВОЙ), REAL (ДЕЙСТВИТЕЛЬНЫЙ), INTEGER (ЦЕЛОЧИСЛЕННЫЙ), STRING (СТРОКОВЫЙ), BOOLEAN (БУЛЕВСКИЙ), LOGICAL (ЛОГИЧЕСКИЙ) И BINARY (ДВОИЧНЫЙ).
8.1.1 Числовой тип данных
Областью значений числового (NUMBER) типа данных являются все числовые значения в языке. Числовой тип данных должен использоваться, когда не имеет значения более определенное числовое представление.
Синтаксис: |
248 number_type = NUMBER . |
Пример 15 - Так как мы можем не знать контекста размера (size), мы не знаем, каким типом данных его представить, например размер толпы на футболе представляет собой целое число, тогда как площадь области подачи - действительное.
size : NUMBER ;
Примечание - В последующих редакциях настоящего стандарта может быть проведена дальнейшая специализация числового типа данных, например комплексные числа.
8.1.2 Действительный тип данных
Областью значений действительного (REAL) типа данных являются все рациональные, иррациональные и действительные научные числа. Данный тип является конкретизацией числового типа данных.
Синтаксис: |
265 real_type = REAL [ `(` precision_spec `)` ] . |
255 precision_spec = numeric_expression . |
Рациональные и иррациональные числа имеют бесконечное представление и точность. Научные числа представляют физические единицы, которые известны лишь с определенной точностью. Объект precision_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 . |
Для значений булевского типа данных установлен тот же порядок, что и для значений логического типа данных: FALSE < TRUE.
Пример 17 - В этом примере атрибут, названный planar, представлен булевским типом данных. Значением для planar, связанным с экземпляром surface, может быть TRUE или FALSE.
ENTITY surface;
planar : BOOLEAN;
…
END_ENTITY;
8.1.6 Строковый тип данных
Областью значений строкового типа данных являются последовательности символов. Символами, допустимыми в строковых значениях, являются символы из ИСО/МЭК 10646-1, расположенные в позициях 08-0D, и графические символы, лежащие в диапазонах 20-7Е и A0-10FFFE.
Синтаксис: |
293 string_type = STRING [ width_spec ] . |
318 width_spec = `(` width `)` [ FIXED ] . |
317 width = numeric_expression . |
Строковый тип данных может иметь как фиксированную, так и переменную ширину (число символов). Если специально не установлено, что имеется фиксированная ширина (используя зарезервированное слово FIXED в определении), то строка имеет переменную ширину.
Областью значений строкового типа данных с фиксированной шириной является набор всех последовательностей символов с шириной, точно указанной в определении типа.
Областью значений строкового типа данных с переменной шириной является набор всех последовательностей символов с шириной не большей максимальной ширины, указанной в определении.
Если ширина не указана, то областью значений будет набор всех последовательностей символов без ограничений по ширине этих последовательностей.
Подстрочные и отдельные символы могут быть адресованы, используя подстрочные индексы, как описано в 12.5. Имеет значение регистр букв (верхний или нижний) в пределах строки.
Правила и ограничения
Выражение ширины должно иметь целое положительное значение.
Примеры
18 - Следующее выражение определяет строку переменной длины, значения которой не имеют определенной максимальной длины.
string1 : STRING;
19 - Следующее выражение определяет строку, имеющую длину максимум десять символов, значения которой могут измениться по фактической длине от нуля до десяти символов.
string2 : STRING(10);
20 - Следующее выражение определяет строку, имеющую длину точно десять символов, значения которой должны содержать десять символов.
string3 : STRING(10) FIXED;
8.1.7 Двоичный тип данных
Областью значений двоичного (BINARY) типа данных являются последовательности битов, а каждый бит представляется 0 или 1.
Синтаксис: |
172 binary_type = BINARY [ width_spec ] . |
318 width_spec = `(` width `)` [ FIXED ] . |
317 width = numeric_expression . |
Двоичный тип данных может иметь как фиксированную, так и переменную ширину (число битов). Если специально не определено, что ширина фиксирована (используя зарезервированное слово FIXED в определении), то двоичный тип данных имеет переменную ширину.
Областью значений двоичного типа данных с фиксированной шириной является набор всех последовательностей битов с шириной, точно установленной в определении типа.
Областью значений двоичного типа данных с переменной шириной является набор всех последовательностей битов с шириной, меньшей или равной максимальной ширине, указанной в определении типа. Если ширина не определена, то областью значений является набор всех последовательностей битов, без ограничения по ширине этих последовательностей.
Подстроки и отдельные биты могут быть адресованы, используя подстрочные индексы, как описано в 12.3.
Правила и ограничения
Выражение ширины должно иметь целое положительное значение.
Пример 21 - Следующее выражение может быть использовано для представления информации о шрифте символа.
ENTITY character;
representation : ARRAY [1:20] 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 Тип данных ARRAY
Областью значений типа данных ARRAY является индексирование фиксированного размера множества подобных элементов. Нижние и верхние границы, значения которых выражаются целыми числами, определяют диапазон значений индекса и, таким образом, размер каждого множества массива. Определение типа данных ARRAY может факультативно устанавливать, что значения массива не могут содержать повторяющихся элементов. Также может быть установлено, что значения массива не обязательно содержат элементы в каждой проиндексированной позиции.
Синтаксис: |
165 array_type = ARRAY bound_spec OF [ OPTIONAL ] [ UNIQUE ] base_type . |
176 bound_spec = `[` bound_1 `:` bound_2 `]` . |
174 bound_1 = numeric_expression . |
175 bound_2 = numeric_expression . |
171 base_type = aggregation_types | simple_types | named_types . |
Допустим, что является нижней границей, а - верхней, тогда в массиве имеется точно элементов. Эти элементы проиндексированы от до включительно (см. 12.6.1).
Примечание 1 - Границы могут быть положительными, отрицательными или нулевыми, но не могут быть неопределенными (?) (см. 14.2).
Правила и ограничения
a) Оба выражения в спецификации границы, bound_1 и bound_2, должны выражаться целочисленными значениями. Ни одно из них не должно иметь неопределенного (?) значения.
b) Выражение bound_1 задает нижнюю границу массива. Оно должно иметь наименьший индекс, при котором имеется значение массива для этого типа данных.
c) Выражение bound_2 задает верхнюю границу массива. Оно должно иметь наибольший индекс, при котором имеется значение массива для этого типа данных.
d) Выражение bound_1 должно быть меньшим или равным bound_2.
e) Если указано ключевое слово OPTIONAL, то значение массива этого типа данных может иметь неопределенное (?) значение в одной или нескольких проиндексированных позициях.
f) Если ключевое слово OPTIONAL не указано, значение массива этого типа данных не должно содержать неопределенных (?) значений ни в одной проиндексированной позиции.
g) Если указано ключевое слово UNIQUE, то каждый элемент значения массива этого типа данных должен отличаться (то есть не быть эквивалентным экземпляром) от каждого другого элемента в том же самом значении массива.
Примечание 2 - Оба ключевых слова OPTIONAL и UNIQUE могут использоваться в одном и том же определении типа данных ARRAY. Это не исключает многократного появления неопределенных (?) значений в отдельных элементах массива. Это происходит потому, что сравнение двух неопределенных (?) значений дает результат UNKNOWN, поэтому условие уникальности не нарушается.
Пример 27 - Данный пример показывает, как объявляется многомерный ARRAY.
sectors : ARRAY [ 1 : 10 ] OF--первое измерение
ARRAY [ 11 : 14 ] OF--второе измерение
UNIQUE something;
Первый массив содержит 10 элементов типа ARRAY [11:14] OF UNIQUE something.
Всего 40 элементов типа данных something в атрибуте, названном sectors. Внутри каждого ARRAY [11:14] не могут появляться повторяющиеся элементы, однако тот же экземпляр something может появляться в двух различных значениях ARRAY [11:14] внутри единственного значения для атрибута, названного sectors.
8.2.2 Тип данных LIST
Областью значений типа данных LIST являются последовательности подобных элементов. Необязательные нижние и верхние границы, значения которых выражаются целыми числами, определяют минимальное и максимальное число элементов, которые могут содержаться во множестве, определенном типом данных LIST. В определении типа данных LIST может быть факультативно установлено, что значение списка не может содержать повторяющихся элементов.
Синтаксис: |
237 list_type = LIST [ bound_spec ] OF [ UNIQUE ] base_type . |
176 bound_spec = `[` bound_1 `:` bound_2 `]` . |
174 bound_1 = numeric_expression . |
175 bound_2 = numeric_expression . |
171 base_type = aggregation_types | simple_types | named_types . |
Правила и ограничения
а) Выражению bound_1 должно быть присвоено целочисленное значение, большее или равное нулю. Оно задает нижнюю границу, определяющую минимальное число элементов, которое может входить в значение списка этого типа данных. Выражение bound_1 не должно иметь неопределенного (?) значения.
b) Выражению bound_2 должно быть присвоено целочисленное значение, большее или равное bound_1, или неопределенное (?) значение. Оно задает верхнюю границу, определяющую максимальное число элементов, которое может входить в значение списка этого типа данных.
Если данное значение является неопределенным (?), то число элементов в значении списка этого типа данных не ограничено сверху.
c) Если выражение bound_spec опущено, то пределы - [0:?].
d) Если указано ключевое слово UNIQUE, каждый элемент в значении списка этого типа данных должен отличаться (то есть не являться эквивалентным экземпляром) от любого другого элемента в том же самом значении списка.
Пример 28 - Данный пример определяет список массивов. Список может содержать от нуля до десяти массивов. Каждый массив из десяти целых чисел должен отличаться от всех других массивов в конкретном списке.
complex_list : LIST[0:10] OF UNIQUE ARRAY[1:10] OF INTEGER;
8.2.3 Тип данных BAG
Областью значений типа данных BAG являются неупорядоченные множества подобных элементов. Необязательные нижние и верхние границы, которые выражаются целочисленными значениями, определяют минимальное и максимальное число элементов, которые могут содержаться в множестве, определяемом типом данных BAG.
Синтаксис: |
170 bag_type = BAG [ bound_spec ] OF base_type . |
176 bound_spec = `[` bound_1 `:` bound_2 `]` . |
174 bound_1 = numeric_expression . |
175 bound_2 = numeric_expression . |
171 base_type = aggregation_types | simple_types | named_types . |
Правила и ограничения
a) Выражению bound_1 должно быть присвоено целочисленное значение, большее или равное нулю. Оно задает нижнюю границу, определяющую минимальное число элементов, которое может входить в значение мультимножества этого типа данных. Выражение bound_1 не должно иметь неопределенного (?) значения.
b) Выражению bound_2 должно быть присвоено целочисленное значение, большее или равное bound_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 Тип данных SET
Областью значений типа данных SET являются неупорядоченные множества подобных элементов. Тип данных SET является конкретизацией типа данных BAG. Необязательные нижние и верхние границы, выраженные целочисленными значениями, определяют минимальное и максимальное число элементов, которые могут содержаться во множестве, определенном типом данных SET. Множество, определенное типом данных SET, не должно содержать повторяющихся экземпляров.
Синтаксис: |
285 set_type = SET [ bound_spec ] OF base_type . |
176 bound_spec = `[` bound_1 `:` bound_2 `]` . |
174 bound_1 = numeric_expression . |
175 bound_2 = numeric_expression . |
171 base_type = aggregation_types | simple_types | named_types . |
Правила и ограничения
a) Выражению bound_1 должно быть присвоено целочисленное значение, большее или равное нулю. Оно задает нижнюю границу, определяющую минимальное число элементов, которое может входить в значение набора этого типа данных. Выражение bound_1 не должно иметь неопределенного (?) значения.
b) Выражению bound_2 должно быть присвоено целочисленное значение, большее или равное bound_1, или неопределенное (?) значение. Оно задает верхнюю границу, определяющую максимальное число элементов, которое может входить в значение набора этого типа данных.
Если данное значение является неопределенным (?), то число элементов в значении набора этого типа данных не ограничено сверху.
c) Если выражение bound_spec пропущено, то пределы - [0:?].
d) Каждый элемент при появлении в типе данных SET должен отличаться (то есть не являться эквивалентным экземпляром) от любого другого элемента в том же самом значении набора.
Пример 30 - Этот пример определяет атрибут как набор точек (где точка - поименованный тип данных, описанный в другом месте).
a_set_of_points : SET OF point;
Атрибут, названный a_set_of_points, может содержать ноль или более точек. Требуется, чтобы каждый экземпляр точки (в значении набора) отличался от каждой другой точки в наборе.
Если требуется, чтобы значение содержало не более 15 точек, в спецификации должна быть установлена верхняя граница:
a_set_of_points : SET [0:15] OF point;
Значение атрибута а_ set_of_points теперь должно содержать не более 15 точек.
8.2.5 Уникальность значения в совокупностях (агрегатах)
Уникальность между элементами совокупности (агрегата) основана на сравнении экземпляра (см. 12.2.2). Совокупность (агрегат) может быть ограничена уникальными значениями своих элементов при помощи использования функции VALUE_UNIQUE (см. 15.29).
Пример 31 - Набор, ограниченный значением уникальности.
TYPE value_unique_set = SET OF a;
WHERE
wr1 : value_unique(SELF);
END_TYPE;
Примечание - Определяемая модельщиком уникальность значения может быть установлена через пару функций, называемых, например, my_equal и my_unique, как показано в следующем псевдокоде.
FUNCTION my_equal (v1,v2: GENIRIC: gen): LOGICAL;
(* Returns TRUE if v1 `equals1` v2 *)
END_FUNCTION;
FUNCTION my_unique(c: AGGREGATE OF GENIRIC): LOGICAL;
(* Returns FALSE if two elements of с have the same `value` Else returns
UNKNOWN if any element comparison is UNKNOWN Otherwise returns TRUE *)
LOCAL
result | : LOGICAL; |
unknownp | : BOOLEAN := FALSE; |
END_LOCAL;
IF (SIZEOF(c) = 0) THEN
RETURN(TRUE); END_IF;
REPEAT i := LOINDEX(c) TO (HIINDEX(c) - 1);
REPEAT j := (i+1) TO HIINDEX(c);
resul t:= my_equal(c [i] , c[j]);
IF (result = TRUE) THEN
RETURN(FALSE); END_IF;
IF (result = UNKNOWN) THEN
Unknownp := TRUE; END_IF;
END_REPEAT;
END_REPEAT;
IF unknownp THEN
RETURN(UNKNOWN);
ELSE
RETURN(TRUE);
END_IF;
END_FUNCTION;
Функция my_equal должна иметь ряд свойств, позволяющих формировать классы эквивалентности. В следующем примере S - набор рассматриваемых объектов, a my_equal (i, j), где i и j принадлежат S, возвращает одно из значений [FALSE, UNKNOWN, TRUE].
a) my_equal(i, i) имеет значение TRUE для всех i в S (так как неопределенность (?) не принадлежит S, то не требуется, чтобы my_equal (?,?) имело значений TRUE);
b) my_equal(i, j) = my_equal(j, i) для всех i, j в S;
c) (my_equal(i, j) = TRUE) AND (my_equal(j, k) = TRUE), включая (my_equal(i, k) = TRUE) для всех 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;
х, у, z : REAL;
END_ENTITY;
ENTITY line;
p0, pi : point;
END_ENTITY;
Объект line имеет два атрибута, названных р0 и р1. Типом данных каждого из этих атрибутов является point.
8.3.2 Определенный тип данных
Определенные типы данных назначаются объявлениями TYPE (см. 9.1). Определенный тип данных устанавливается пользователем путем присвоения идентификатора типу. На определенный тип данных ссылаются по его идентификатору.
Синтаксис: |
154 type_ref = type_id . |
Правила и ограничения
Выражение type_ref должно быть именем определенного типа данных, видимого в активной области (см. раздел 10).
Пример 33 - Следующая спецификация является определенным типом данных, используемым для указания единиц измерения, связанных с атрибутом.
TYPE volume = REAL;
END_TYPE;
ENTITY PART;
…
bulk : volume;
END_ENTITY;
Атрибут, названный bulk, представляется действительным числом, но использование определенного типа данных volume помогает разъяснить смысл и контекст действительного числа; например, оно определяет volume в отличие от другого объекта, представляемого типом REAL.
8.4 Созданные типы данных
Существуют два вида созданных типов данных в EXPRESS: ENUMERATION (перечисляемые) типы данных перечня и SELECT (выбираемые) типы данных выбора. Эти типы данных имеют подобные синтаксические структуры и используются для обеспечения исходных представлений определенных типов данных (см. 9.1).
Примечание - Созданные типы данных в EXPRESS могут быть использованы только как представления для определенных типов данных.
8.4.1 Перечисляемый тип данных
Областью значений типа данных ENUMERATION (перечисляемого) является упорядоченный набор имен. Имена представляют собой значения перечисляемого типа данных. Эти имена обозначаются как enumeration_id, и на них ссылаются как на перечисляемые элементы.
Синтаксис: |
201 enumeration_type = ENUMERATION OF `(` enumeration_id { `,` enumeration_id } `)` . |
Два различных типа данных ENUMERATION могут содержать тот же самый enumeration_id. В этом случае любая ссылка на enumeration_id (например, в выражении) должна быть переопределена в соответствии с идентификатором типа данных для обеспечения однозначности ссылки. Ссылка затем появляется как type_id.enumeration_id.
Примечание - Значение type_id всегда доступно, потому что EXPRESS допускает тип данных ENUMERATION только как исходное представление определенного типа данных.
Правила и ограничения
a) В целях сравнения упорядочение значений перечисляемого типа должно быть определено их относительной позицией в списке enumeration_id: первый встречающийся элемент должен быть меньше, чем второй; второй - меньше, чем третий, и т.д.
b) Сравнение между значениями различных типов данных ENUMERATION не определено.
c) Перечисляемый тип должен быть использован только как исходный тип определенного типа данных.
Пример 34 - В данном примере типы данных ENUMERATION использованы для того, чтобы показать, как движутся различные виды транспортных средств.
TYPE car_can_move = ENUMERATION OF
(left, right, backward, forward);
END_TYPE;
TYPE plane_can_move = ENUMERATION OF
(left, right, backward, forward, up, down);
END_TYPE;
Элемент перечисления left имеет два независимых определения, они задаются каждым типом, являющимся компонентом. Между двумя этими определениями идентификатора left не имеется никакой взаимосвязи. Ссылка на left или right сама по себе является неоднозначной. Чтобы разрешить эту неоднозначность, ссылка на любое из этих значений должна быть квалифицирована именем типа, например, car_can_move.Ieft.
8.4.2 Выбираемый тип данных
Областью значений типа данных SELECT является объединение областей значений поименованных типов данных в соответствующем списке выбора. Тип данных SELECT является обобщением каждого из поименованных типов данных в списке выбора.
Синтаксис: |
284 select_type = SELECT `(` named_types { `,` named_types } `)` . |
Правила и ограничения:
Каждый элемент в списке выбора должен быть типом данных объекта или определенным типом данных.
Тип данных SELECT должен использоваться только как исходный тип определенного типа данных.
Примечание - Значение типа данных SELECT может быть значением более чем одного из поименованных типов данных, определенных в списке выбора для данного выбираемого типа данных. Эта ситуация возникает только тогда, когда соответствующие поименованные типы данных являются частью общего графа наследования (9.2.3).
Пример 35 - Если а и b являются подтипами с и они связаны выражением ANDOR, и существует тип, определенный SELECT (a, b); то можно получить значение типа данных SELECT, которое может быть равным а и b одновременно.
Пример 36 - В данном контексте должен быть сделан выбор среди нескольких типов предметов.
TYPE
attachment_method = SELECT(permanent_attachment, temporary_attachment);
END_TYPE;
TYPE permanent_attachment = SELECT(glue, weld);
END_TYPE;
TYPE temporary_attachment = SELECT(nail, screw);
END_TYPE;
ENTITY nail;
body_length | : REAL; | |||
head_area | : REAL; |
END_ENTITY;
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;
Объект wall_mounting включает изделие в границы, используя постоянный или временный метод присоединения, оба из которых подразделяются далее. Значение wall_mounting будет иметь атрибут using, который является значением одного nail (гвоздя), screw (винта), glue (клея) или weld (сварного шва).
8.5 Обобщенные типы данных
Синтаксис: |
211 generalized_types = aggregate_type | general_aggregation_types | generic_type . |
Обобщенные типы данных используются для установления обобщения некоторых других типов данных и могут быть использованы в конкретных и очень специфических контекстах. Тип CENERIC является обобщением всех типов данных. Агрегатный тип данных AGGREGATE является обобщением всех сборных (агрегатных) типов данных. Общие сборные (агрегатные) типы данных являются обобщениями сборных (агрегатных) типов, которые ослабляют некоторые ограничения, обычно налагаемые на сборные (агрегатные) типы данных. Все эти типы данных определены в 9.5.3.
8.6 Классификация использования типов данных
В языке EXPRESS типы данных используются тремя различными способами: основные типы данных используются в качестве представления атрибутов и сборных (агрегатных) элементов; параметрические типы - как представления формальных параметров для функций и процедур; а исходные типы - как представления определенных типов данных. Некоторые классы типов данных могут быть использованы любым из этих способов, в то время как другие могут быть использованы только в определенном контексте. Эти различия показаны в таблице 7.
Таблица 7 - Использование типов данных
а) Основные типы данных - представление атрибута или элементов совокупности. | |||||
| Тип | а | b | c | |
| Простые (simple) типы данных | | | | |
| Сборные (aggregation) типы данных | | | | b) Параметрические типы данных - представление формального параметра, локальной переменной или функционального результата |
| Поименованные (named) типы данных | | | | |
| Созданные (constructed) типы данных | | | | с) Исходные типы данных - представление определенного типа (см. 9.1). |