spoPresentation2
.pdfИерархия грамматик и языков
Здесь можно выделить подкласс детерминированных автоматов с магазинной памятью. Для соответствующих языков имеется алгоритм работы распознавателя с квадратичной сложностью.
Для построения компиляторов интерес представляют линейные распознаватели (время работы линейно зависит от длины входной цепочки). Синтаксические конструкции большинства ЯП могут быть отнесены к соответствующему классу
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