Синтаксис языка EXPRESS определен как производная от синтаксической нотации Вирта (СНВ) [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 в позициях 21-7Е группы 00, плоскости 00, строки 00. Чтобы апостроф был включен в литерал, он должен быть записан дважды.
Семантика разных видов скобок определена следующим образом:
- фигурные скобки '{ }' обозначают ни одного или несколько повторений;
- квадратные скобки '[ ]' обозначают необязательные параметры;
- круглые скобки '( )' обозначают, что группа порождающих правил, заключенная в круглые скобки, должна использоваться как единое порождающее правило;
вертикальная линия ' | ' обозначает, что в выражении должен использоваться только один из элементов, разделенных вертикальными линиями.
Примеры
1 Синтаксис строкового типа данных определяется следующим образом:
Синтаксис: |
Полное определение синтаксиса, представленное в приложении А, содержит определения лексем STRING, numeric_expression и FIXED.
2 В соответствии с синтаксисом, приведенном в примере 1, возможны следующие варианты:
string;
string ( 22 );
string ( 19 ) fixed.
Правило для numeric_expression является достаточно сложным и позволяет представить много других вариантов.