Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция СП3.DOC
Скачиваний:
1
Добавлен:
08.08.2019
Размер:
258.56 Кб
Скачать

Регулярные выражения и синтаксические диаграммы

Многие языковые конструкции удобно описываются регулярными выражениями. Эти выражения вводятся через понятие "регулярное множество".

Определение. Пусть - конечный алфавит. Регулярное множество в алфавите определяется рекурсивно следующим образом:

1) - регулярное множество;

2) {e}-регулярное множество;

3) {a}-регулярное множество для всех ;

4) если P и Q -регулярные множества, то регулярными являются

множества:

(объединение);

PQ (конкатенация);

(итерация), где итерация множества P определяется так:

5) ничто другое не является регулярным множеством в алфавите .

Определение. Регулярные выражения в алфавите  обозначают регулярные множества и определяются следующим образом:

1)  - обозначает пустое множество ;

2) е - обозначает множество {e};

3) если , то а - обозначает {a};

4) если p и q обозначают P и Q соответственно, то

(p+q) - обозначает ,

(pq) - обозначает PQ,

- обозначает ;

5) ничто другое не является регулярным выражением. 

Замечания:

1. Можно показать, что .

2. Лишние скобки могут устраняться из выражений, если это не приводит к недоразумениям.

3. Приоритеты операций: "*", "конкатенация", "+".

Регулярные выражения имеют следующие алгебраические свойства: если - регулярные выражения, то:

 - играет роль нуля ( свойство 8);

е - играет роль единицы (свойство 7).

Цепочки символов, образующие лексемы языков программирования, почти всегда оказываются регулярными множествами и представимы в виде соответствующих регулярных выражений . Для некоторых из лексем представление их регулярными выражениями оказывается слишком громоздким. Для более компактного описания лексем обычно используют расширенные регулярные выражения .

Определение. Расширенные регулярные выражения и множества, которые они обозначают определяются рекурсивно следующим образом :

1. Если R - регулярное выражение, то оно является расширенным и будет обозначать множество R .

2. Если R - расширенное регулярное выражение , то:

а) R+ - расширенное регулярное выражение , обозначающее множество RR* (R+ = RR* ) ;

б) R*n - расширенное регулярное выражение , обозначающее множество {e} R RR ... Rn ( или R*n = );

в) R+n - расширенное регулярное выражение , обозначающее множество R RR ... Rn ( или R+n = ).

3. Если R1 и R2 - расширенные регулярные выражения , то R1 - R2 и R1R2 - расширенные регулярные выражения, обозначающие следующие множества: R1 - R2 = { x / xR1 и xR2 }; R1R2 = { x / xR1 и xR2 }.

4. Ничто другое не является расширенным регулярным выражением. 

Пример 4.1. Пусть требуется описать идентификаторы и константы языка при помощи регулярных определений: Описание идентификаторов: <буква> = A | B | ... | Z <цифра> = 0 | 1 | ... | 9 < идентификатор> = <буква> ( <буква> / <цифра>)*8

В практике разработки формальных языков для их описания нередко используют синтаксические диаграммы. Синтаксическая диаграмма является эквивалентным представлением грамматики языка и в ряде случаев она оказывается предпочтительнее в силу своей большей наглядности и компактности, так как это графическое описание синтаксиса языка. Название языковых конструкций пишется в левой части, а справа в отображаются возможные символы алфавита, в название конструкции. Для обозначение вариантов граф разветвляется, для обозначения повторов организуется петля.

Пример . Пусть задано регулярное определение , описывающее вещественные константы где Ц - терминальный символ Ц{0,1,...,9}.