Описания не ограничиваются последовательностью символов и чисел. В языке существуют инструкции логического типа (сложные выражения): И, ИЛИ, НЕ.
Пример. Первое сложное выражение использует логическую функцию ИЛИ. Пусть переменная Today (сегодня) в качестве значения принимает названия дней недели: Monday (понедельник), Tuesday (вторник), Wednesday (среда), Thursday (четверг), Friday (пятница), Saturday (суббота), Sunday (воскресенье). На языке EBNF это записывается следующим образом:
Today ::= (Monday I Tuesday I Wednesday I Thursday I Friday I Saturday I Sunday)
Представленное выражение читается так: «Символ Today может принимать одно из следующих значений: Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday».
Приведем определение символов-пробелов, описанное в правилах DTD. Символами-пробелами в XML и XHTML называют следующие: пробел, табуляция, новая строка и перевод строки. Если объект S соответствует символу-пробелу, его формализованное определение принимает вид:
S : : = (#х2 0 I #х9 I #xD | #хА ) +
В выражении представлены шестнадцатеричные коды символов ASCII, соответствующие символам-пробелам, каждый из которых (независимо от порядка следования, что отражено символом I ) может присваиваться объекту S. Символ +, расположенный за скобками, указывает на возможность повторения представленных в скобках символов один или несколько раз. Выражение следует читать так: «Символы-пробелы описываются последовательностью из одного или нескольких символов: пробела, табуляции, новой строки и перевода строки».
Иногда описание объекта логичнее представить перечнем значений, которые он не может содержать. Вернемся к предыдущему примеру с днями недели. Значительно проще сказать «будни», чем строить фразу типа «все дни недели, кроме субботы и воскресенья» либо перечислять: «понедельник, вторник, среда, четверг, пятница».
множество исключений (exclusion set). В частности, последний пример описывается следующим выражением:
Weekdays ::= ( ["Saturday Sunday] I Week)
Значения, которые объект не может принимать, исключения даются в прямоугольных скобках: [ и ], символ л указывает на первый элемент множества исключений. Предыдущая запись будет считаться корректной и, следовательно, полной, если символ Week был определен заранее. |