Лекция 7.Кампиляторы

advertisement
Лекция 7
Компиляторы
Компилятор – это программа, которая
считывает текст программы,
написанной на исходном языке, и
транслирует (переводит) его в
эквивалентный текст на другом языке
(объектном языке). Одним из важных
моментов трансляции является
сообщение пользователю о наличии
ошибок в исходной программе.
Компиляция состоит из двух частей:
анализа и синтеза.
Анализ – это разбиение программы на
составные части и создание
промежуточного представления.
Синтез – конструирование требуемой
объектной программы из
промежуточного представления
(генерация кода).
При компиляции анализ состоит
из трех фаз:
• лексический анализ
• синтаксический анализ
• семантический анализ.
Фазы компилятора
Программа на исходном языке
Лексический анализ
Синтаксический анализ
Программы
работы с
таблицей имен и
констант
Семантический анализ
Оптимизация программы
Генерация кода
Программа на объектном языке
рис 1
Обработчик ошибок
ЛЕКСИЧЕСКИЙ АНАЛИЗ
Программа на исходном языке
Лексический
анализ
Синтаксический анализ
Семантический анализ
рис 2 Лексический анализатор работает в режиме «Дай
лексему»
Задачей лексического анализатора
также является удаление комментариев
из текста программы и лишних
пробелов (не играющих никакой роли в
программе).
Лексический анализатор определяет
лишь некоторые ошибки, поскольку он
рассматривает исходный текст
программы в ограниченном контексте.
Лексический анализатор также может
проверить некоторые ограничения
реализации, например, ограничения на
длину имен в тексте программы,
ограничения на числа.
Тело лексического анализатора
реализует диаграмму переходов
соответствующего конечного автомата.
Из начального состояния такого
конечного автомата существуют
переходы по символам-началам лексем
разных классов к состояниям конечных
автоматов, анализирующих лексему
отдельного класса.
Фрагмент программы лексического
анализатора. Анализатор работает в
режиме «дать лексему» (рис. 2). Он
распознает числа, идентификаторы и
ключевые слова.
Анализатор реализует конечный
автомат, диаграмма переходов
буква
2
1
Буква или
цифра
начало
3
цифра
цифра
цифра
4
точка
цифра
Рис.3. Диаграмма для конечного автомата
5
2. СИНТАКСИЧЕСКИЙ АНАЛИЗ
Задачей синтаксического анализа
является проверка правильности
структуры программы, которая
описывается уже контекстно-свободной
грамматикой.
Моделью синтаксического анализатора
является автомат с магазинной
памятью. Методы синтаксического
анализа классифицируются как
восходящие и нисходящие.
Восходящие анализаторы строят
дерево разбора снизу (от листьев)
вверх (к корню), а нисходящие – сверху
(от корня) вниз (к листьям).
Классификация грамматик по
Хомскому
Линейные грамматики.
Определение1. Грамматика G = (N, , P, S)
называется линейной, если все ее правила имеют
вид  либо , где   N,  N,   *,  
*.
Определение2. Грамматика G = (N, , P, S)
называется право линейной, если все ее правила
имеют вид  либо , где  N,  N,   *.
Определение3. Грамматика G = (N, , P, S)
называется лево линейной, если все ее правила
имеют вид  либо , где N,   N,   *.
Определение 4. Грамматика G = (N, , P, S)
называется правоавтоматной, если все ее
правила имеют вид  либо , где  
N,   N,  , и допускается правило S  .
Определение 5. Грамматика G = (N, , P, S)
называется левоавтоматной, если все ее
правила имеют вид  либо , где 
N,  N, , и допускается правило S  .
Контексно-свободные
грамматики
Определение 6. Грамматика G = (N, ,
P, S) называется контекстно-свободной
(или бесконтекстной) (КС-грамматикой),
если все ее правила имеют вид ,
где  N, а   (N)*.
Определение 7. Дерево вывода в КСграмматике G = (N, , P, S) –
помеченное упорядоченное дерево,
каждая вершина которого помечена
символом из множества N    {},
причем если некоторая вершина
помечена символом A, а ее прямые
потомки - символами X1, X2, … , Xn , то
A X1X2 … Xn - правило этой
грамматики.
Поскольку синтаксический анализатор –
это программа для компьютера, то он
должен работать в тех условиях,
которые задает компьютер.
Download