Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции / вар1 / OPYZK.DOC
Скачиваний:
14
Добавлен:
17.04.2013
Размер:
173.06 Кб
Скачать

12.3.3. Отсутствие элементов конструкций.

Любой нетерминальный, терминальный символы, а также сентенция (комби-

нация терминальных и нетерминальных символов) может отсутствовать.

Знак подчеркивания _ во всех конструкциях обозначает возможность их

отсутствия. То есть <* <цифра> *> порождает от одной до бесконечного

числа цифр, а <* <цифра> *>_ может не порождать ни одной цифры, может

порождать одну и более цифр.

Пример 2. Конструкция

<целое> ::= <цифра>

||= <целое>,<цифра>

эквивалентна

<целое> ::= <цифра><* , <цифра> *>_

Использование этого знака с терминальным или нетерминальным сим-

волом означает возможность его отсутствия. То есть <цифра>_ порождает,

либо одну цифру, либо ни одной. Запись 7_ означает, что цифра 7 может

быть, а может и отсутствовать.

2.4. Терминальные символы

Как уже отмечалось ранее терминальные символы в метаязыке предс-

- 13 -

тавляют сами себя. Примеры терминальных символов while for do [ 0

fg a и т.д. Такие терминальные символы нельзя разделить на части. Нап-

ример while и whi le не одно и тоже.

Наряду с приведенным выше неявным обозначением терминальных сим-

волов в метаязыке имеются средства для их явного задания. Последова-

тельность терминальных символов, а также отдельный терминальный символ

можно выделить в апострофах. Например, предыдущие примеры можно запи-

сать.

'while' эквивалентно while

'for' эквивалентно for

'whi''le' эквивалентно whi le

'whi''le' не эквивалентно while

'1' эквивалентно 1

Записи 'whi''le' и whi le допускают наличие любого числа пробель-

ных символов между whi и le. Пробельные символы определены в приложе-

нии. В частности к ним относятся символы пробел и символ новой строки,

а также комментарий.

В случае отсутствия апострофов символ рассматривается в первую

очередь как метасимвол. И только если он не совпадает ни с одним мета-

символом, его следует рассматривать, как терминальный символ. Например,

в продукциях

<цифра> ::= 0|1|2|3|4|5|6|7|8|9

символ | это метасимвол. Он разделяет продукции. Однако продукция

<цифра> ::= '0|1|2|3|4|5|6|7|8|9'

определяет не множество цифр, а только одну строку, содержащую 19 сим-

волов - 10 цифр, разделенных вертикальной чертой.

Форму выделения терминальных символов апострофами полезно приме-

нять для записи терминальных символов, совпадающих с метасимволами,

вместо управляющих последовательностей. Например, '\' '<' '<*' '{' и

так далее.

- 14 -

12.4.1. Символ из множества.

Для ещё большего упрощения записи терминальных символов введем эквива-

лентные конструкции:

char{x,ad,...} и [x,ad,...]

Обе конструкции обозначают один символ из множества символов, пе-

речисленных в фигурных скобках. Если элементом множества являются две

буквы, как в нашем примере ad, то они задают граничные элементы мно-

жеств. Т.е. char{ad} = char{a,b,c,d}. Однако, если элементом множества

является цепочка символов, то её необходимо выделять в апострофы. Нап-

ример, char{a,bc,'bc','/*','*/'} означает следующее множество символов.

char{a,b,c,'bc','/*','*/'}

То есть при порождении строки вместо char{a,b,c,'bc','/*','*/'} можно

подставить любой терминальный символ из a, b, c, bc , /*, */ .

При использовании данной формы записи конструкцию <цифра> можно

представить в виде:

<цифра> ::= char{09} или <цифра> ::= [09]

что эквивалентно

<цифра> ::= char{0,1,2,3,4,5,6,7,8,9}

или

<цифра> ::= 0|1|2|3|4|5|6|7|8|9

Данные конструкции также можно использовать совместно с символом

_, который указывает на то, что конструкция может отсутствовать. Сим-

вол '_' относится ко всей конструкции char, а не к символам множества.

То есть можно записать char{09}_ или [09]_ , но запрещена запись

[09_].

Отдельные символы в множестве можно указывать также с помощью уп-

равляющих последовательностей.

- 15 -

Соседние файлы в папке вар1