Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

spoPresentation2

.pdf
Скачиваний:
6
Добавлен:
11.05.2015
Размер:
4.74 Mб
Скачать

Иерархия грамматик и языков

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

Для построения компиляторов интерес представляют линейные распознаватели (время работы линейно зависит от длины входной цепочки). Синтаксические конструкции большинства ЯП могут быть отнесены к соответствующему классу

81

Иерархия грамматик и языков

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

Конечные автоматы находят применение не только в компиляторах. Многие командные процессоры функционируют на их основе

82

Регулярные множества

Пусть дан алфавит А и P A*, Q A*

Конкатенация PQ = { pq | p P, q Q } Итерация P* = { pn | p P }

для алфавита А регулярные множества определяются рекурсивно:

– РМ;

{O} – РМ;

{a} – РМ a A;

если P и Q произвольные РМ P Q, PQ, P* - РМ;

Ничто другое не является РМ.

83

Регулярные множества

Множество Р замкнуто относительно некоторой операции :, если

: (p,q) P p,q P

РМ замкнуты относительно операций пересечения, объединения, дополнения, итерации, конкатенации, гомоморфизма (изменения имен символов и подстановки цепочек вместо символов)

84

Регулярные выражения

РМ принято обозначать с помощью регулярных выражений

РМ – это множество цепочек, а РВ – это формула, схематично показывающая, как

было построено соответствующее ей РМ с помощью допустимых операций

0 – РВ, обозначающее ; O - РВ, обозначающее {O}

а – РВ, обозначающее {a} a A;

если p и q – РВ, обозначающие РМ P и Q, то p+q (p|q), pq, p* - РВ, обозначающие РМ P Q, PQ,

P*

85

Регулярные выражения

Приоритеты операций

итерация

конкатенация (сцепление)

альтернатива (или).

Два РВ D,E равны, D = E, если они обозначают

одно и то же РМ

Каждое РВ обозначает только одно РМ, но для одного РМ может существовать сколь угодно много РВ

86

Регулярные выражения

РМ

{01}

{0,1}

{1}*

{0,1}*

{0}{1}*

{0,{1}*}

РВ

01

0|1

1*

(0|1)*

01*

0|1*

Пр.

01

0,1

1, 111

0,1,010

0,01,011

0,1,1111

РМ

{0,{1}{0}*}

{0,1}*{011}

{{a}*{b},{c}{a}*}

РВ

(0|(1(0*)))

(0|1)*011

a*b|ca*

 

0|10*

 

 

Пр.

0,1,10,10000

011010011

b,ab,aaab,c,ca,caaa

87

Свойства регулярных выражений

D | 0 = D

D | D = D

0D = D0 = 0

(D*)* = D*

DO = OD = D

DD* = D*D

 

D*D* = D*

D | E = E | D

D* = D | D* = DD* | O

D | (E | J) = (D | E) | J

 

D (EJ) = (DE) J

(D* | E*)* = (D*E*)* = (D | E)*

D (E | J) = DE | DJ

(DE)*D = D (ED)*

(D | E) J = DJ | EJ

(D*E)*D* = (D|E)*

0*=O

(D*E)* = (D | E)*E | O

 

88

Уравнения с регулярными коэффициентами

На основе РВ можно построить уравнения с регулярными коэффициентами. Пусть А – алфавит, D,E A*, Х A УРК:

Х = DХ | E

Х = ХD | E

Решения: Х = D*E

X = ED*

если РМ, являющееся решением, подставить в уравнение, получим тождество. Проверка:

DХ | E = D (D*E) | E = (DD*) E | E = (DD*) E | OE = (DD* | O) E = D*E = X

Для частного случая E = O (Х=DХ; Х=ХD) решение Х = D*. Для случая X = E уравнение

само по себе является решением

89

Лексический анализ и регулярные грамматики

Лексический анализатор –часть компилятора, которая читает исходную программу и выделяет в ее тексте лексемы входного языка

Это необязательная часть компилятора, все его функции могут быть выполнены на этапе синтаксического анализа

Однако практически все компиляторы имеют в своем составе ЛА

90

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]