В настоящем разделе определена нотация, используемая для представления синтаксиса языка 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;