- •Предисловие
- •Глава 1 введение в проблематику конструирования компиляторов
- •1.1. Понятие компилятора и его структура
- •1.2. Применение компиляторов и задачи их разработки
- •Глава 2 способы задания формальных языков
- •2.1. Математический аппарат теории
- •Формальных языков, перевода и компиляции
- •1) AR*a для всех aÎa;
- •2.2 Цепочки и языки
- •2.3 Грамматики
- •2.4. Распознаватели
- •2.5 Регулярные выражения и синтаксические диаграммы
- •2.6. Автоматы с магазинной памятью (мп - автоматы )
- •2.7. Соответствия между способами описания языков
- •Глава 3 основы теории перевода
- •3.1. Определение перевода
- •3.2. Модели простейших трансляторов
- •3.2.1. Конечные преобразователи
- •3.2.2. Преобразователи с магазинной памятью
- •Глава 4 конструирование сканеров
- •4.1. Общая характеристика процесса сканирования
- •4.2. Описание лексем в языке расширенных регулярных выражений
- •4.3. Построение недетерминированного конечного автомата по расширенному регулярному выражению
- •4.4. Преобразование недетерминированного конечного автомата в детерминированный
- •Замечание. Среди состояний могут оказаться недостижимые состояния . Состояние р называется достижимым , если существует такая цепочка w , что (q0, w) *(p , e ). ¨
- •4.5. Преобразование синтаксической диаграммы в конечный автомат
- •4.6. Представление результатов сканирования
- •4.7. Методики конструирования сканеров
- •Глава 5 конструирование однопроходных нисходящих анализаторов
- •5.1. Определение синтаксического разбора
- •5.2. Нисходящий и восходящий разборы
- •5.3. Ll(k) - грамматики
- •5.4. Предсказывающие алгоритмы разбора
- •5.5. Алгоритмы построения управляющих таблиц для левых анализаторов
- •5.6. Приведение грамматик к ll - форме
- •Глава 6 основы генерации кода
- •6.1. Перевод и генерация кода
- •6.2. Представления промежуточной программы
- •6.3. Преобразование промежуточной программы в ассемблерный код
2.5 Регулярные выражения и синтаксические диаграммы
Многие языковые конструкции удобно описываются регулярными выражениями. Эти выражения вводятся через понятие "регулярное множество".
Определение. Пусть - конечный алфавит. Регулярное множество в алфавите определяется рекурсивно следующим образом:
1) Æ- регулярное множество;
2) {e}-регулярное множество;
3) {a}-регулярное множество для всех ;
4) если P и Q -регулярные множества, то регулярными являются
множества:
(объединение);
PQ (конкатенация);
(итерация), где итерация множества P определяется так:
5) ничто другое не является регулярным множеством в алфавите S.
Определение. Регулярные выражения в алфавите S обозначают регулярные множества и определяются следующим образом:
1) Æ - обозначает пустое множество ;
2) е - обозначает множество {e};
3) если , то а - обозначает {a};
4) если p и q обозначают P и Q соответственно, то
(p+q) - обозначает ,
(pq) - обозначает PQ,
- обозначает ;
5) ничто другое не является регулярным выражением. ¨
Замечания:
1. Можно показать, что .
2. Лишние скобки могут устраняться из выражений, если это не приводит к недоразумениям.
3. Приоритеты операций: "*", "конкатенация", "+".
Регулярные выражения имеют следующие алгебраические свойства: если - регулярные выражения, то:
Æ - играет роль нуля ( свойство 8);
е - играет роль единицы (свойство 7).
Пример 2.16. Рассмотрим примеры регулярных выражений:
1) 01 обозначает {01};
2) 0 обозначает {0 };
3) (0+1) обозначает {0,1};
4) обозначает множество всех цепочек, составленных
из 0 и 1 и оканчивающихся цепочкой 011;
5) обозначает множество всех цепочек, составленных из 0,1,a,b и начинающихся с а или b;
6) - обозначает множество всех цепочек, содержащих четное число нулей и четное число единиц.
В практике разработки формальных языков для их описания нередко используют синтаксические диаграммы. Синтаксическая диаграмма является эквивалентным представлением грамматики языка и в ряде случаев она оказывается предпочтительнее в силу своей большей наглядности и компактности. Применение этого способа для описания лексем и конструирования сканеров будет рассмотрено в гл. 3.
2.6. Автоматы с магазинной памятью (мп - автоматы )
МП - автоматы представляют собой естественную модель синтаксических анализаторов КС - языков .
Определение. МП-автомат - это семерка
P =(Q , S , G , d , q0 , Z0 , F ),
где Q - конечное множество символов состояний , представляющих всевозможные состояния управляющего устройства (УУ);
S - конечный входной алфавит ;
G - конечный алфавит магазинных символов ;
d - отображение Q ´ (S È {e}) ´ G ® (Q ´ G * );
q0 Î Q - начальное состояние УУ;
Z0 Î G - символ , находящийся в магазине в начальный момен времени (начальный символ) ;
F Í Q - множество заключительных состояний .
Структура МП - автомата показана на рис.2.4.
Рис. 2.4.
Определение. Конфигурацией МП - автомата Р называется
тройка (q , w , a) Î Q ´ S * ´ G * ,
где q - текущее состояние УУ;
w- неиспользованная часть входной цепочки, причем первый символ цепочки w находится под входной головкой (если w =е , то считается, что вся входная лента прочитана);
a - содержимое магазина , причем самый левый символ
цепочки a считается верхним символом магазина ( если a= е , то магазин считается пустым ). ¨
Определение. Такт работы МП -автомата Р будем представлять в виде бинарного отношения р ,определенного на конфигурациях. Будем записывать (q, aw , Za) ( , w , ga), если множество
d(q , a , Z) содержит ( , g) , где q, Î Q , a Î S È {e} , w Î S * ,
Z Î G , a,g Î G * . ¨
Если а¹е , то данная запись означает следующее :
МП - автомат Р , находясь в состоянии q и имея а в качестве текущего входного символа , расположенного над входной головкой , а Z - в качестве верхнего символа магазина , может перейти в новое состояние , сдвинуть входную головку на одну ячейку вправо и заменить верхний символ магазина цепочкой g магазинных символов. Если g = е , то верхний символ просто удаляется из магазина .
Если а=е, такт называется е- тактом . В таком такте текущий входной символ не принимается во внимание и входная головка не сдвигается . Однако состояния УУ и содержимое памяти могут изменяться .
Следующий такт невозможен , если магазин пуст .
Определение. Начальной конфигурацией МП - автомата Р называется конфигурация вида (q0 , w , Z0) , где w Î S * , т.е. УУ находится в начальном состоянии , входная лента содержит цепочку, которую нужно распознать , а в магазине есть только начальный символ Z0 .
Заключительная конфигурация: (q , e , a) , где q Î F ,a Î G * .
Говорят , что цепочка w допускается МП - автоматом Р , если
(q0 , w , Z0) * (q , e , a) , для некоторых qÎF и a Î G * .
Язык, определяемый (допускаемый ) автоматом P (обозначается L(P)), - это множество цепочек допускаемых Р . ¨
Пример 2.17. Пусть Р=( {q0 , q1 , q2 },{0,1},{Z ,0} , d , q0 , Z, {q0 }),
где d(q0 , 0 , Z)={(q1 , 0Z)};
d(q1 , 0 , 0)={(q1 , 00)};
d(q1 , 1 , 0)={(q2 , e)};
d(q2 , 1 , 0)={(q2 , e)};
d(q2 , e , Z)={(q0 , e)}.
Словесное описание функции d : МП - автомат копирует в магазин начальную часть входной цепочки , состоящую из нулей , а затем устраняет из магазина по одному нулю на каждую единицу, которую он видит на входе .
Рассмотрим, как этот автомат распознает w = 0011 :
(q0 , 0011 , Z) ( q1 , 011 , 0Z) (q1 , 11 , 00Z)
(q2 , 1 , 0Z) (q2 , e , Z) (q0 , e , e) < s t o p> .