Similar presentations:
Общая схема работы компилятора
1.
ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГОПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
УФИМСКИЙ ГОСУДАРСТВЕННЫЙ АВИАЦИОННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Кафедра ТК
курс лекций по дисциплине
Методы построения трансляторов
Тема: Общая схема работы компилятора
Преподаватель: к.т.н., доцент Карамзина А.Г.
2.
Тема № 1Общая схема работы компилятора
Определение и назначение транслятора
Определение и назначение компилятора
Определение и назначение интерпретатора
Этапы трансляции
Многопроходные и однопроходные компиляторы
Методы построения трансляторов
3.
Общая схема работы компилятораОпределение и назначение транслятора
Транслятор – это программа, которая переводит входную программу на
исходном (входном) языке в эквивалентную ей выходную программу на
результирующем (выходном) языке.
текст входной
программы
текст входной
программы
ОШИБКА
Транслятор
текст
результирующей
программы
(на любом языке)
сообщение
об ошибке
4.
Общая схема работы компилятораОпределение и назначение компилятора
Компилятор – это транслятор, который осуществляет перевод исходной
программы в эквивалентную ей объектную программу на языке машинных
команд или на языке ассемблера.
Файл, в который записана результирующая программа,
обычно называется «объектным файлом».
Даже в том случае, когда результирующая программа
текст
текст входной
порождается
наявляется
языке машинных
команд,
результирующей
Компилятор
транслятором,
программы Всякий компилятор
объектной
программой
(объектным
файлом)
программы
номежду
не всякий
транслятор
является
компилятором.
и исполняемой программой (исполняемым файлом)
(на языке машинных
кодов или на языке
есть существенная разница.
ассемблера)
Порожденная компилятором программа
не может непосредственно выполняться на компьютере,
«объектная
программа»
«объектный
модуль».области памяти,
так
как она неили
привязана
к конкретной
где должны располагаться ее код и данные.
программный модуль, являющийся результатом компиляции исходного
модуля, представляющий собой последовательность машинных команд,
готовый к объединению с другими объектными модулями.
5.
Общая схема работы компилятораОпределение и назначение интерпретатора
Интерпретатор – это программа, которая воспринимает входную программу на
исходном языке и сразу выполняет ее.
текст входной
программы
Интерпретатор
текст
результирующей
программы
6.
Общая схема работы компилятораЭтапы трансляции
Анализ
Лексический
анализ
Исходная
программа
Синтаксический
анализ
Анализ
и локализация
обнаруженных
ошибок
Семантический
анализ
Внутреннее
представление
программы
Сообщение
об ошибке
Синтез
Подготовка
к генерации кода
Объектная
программа
Генерация
кода
Т
а
б
л
и
ц
а
и
д
е
н
т
и
ф
и
к
а
т
о
р
о
в
7.
Общая схема работы компилятораКомпилятор в целом с точки зрения формальных языков выполняет
две основные функции:
-является распознавателем для языка исходной программы
получив на вход цепочку символов входного языка, проверяет ее
принадлежность языку и выявляет правила, по которым эта цепочка была
построена - генератор цепочек – автор входной программы;
-является генератором для языка результирующей программы
строит на выходе цепочку выходного языка по определенным правилам,
предполагаемым языком машинных команд или языком ассемблера
распознавателем этой цепочки является вычислительная система, под
которую создается результирующая программа.
8.
Общая схема работы компилятораОсновные фазы компиляции
program m4;
var c:boolean;
- Лексический анализ (сканер) – это
часть компилятора, которая читает
литеры программы на исходном языке a,b:real;
и строит из них слова (лексемы)
begin
исходного языка. На вход лексического
анализатора поступает текст исходной
if a>b then
else a:=b*0.3;
программы, а выходная информация передается
для#:=a-b
дальнейшей
обработки
end.
компилятором на этапе синтаксического
разбора.
program m4;
- Синтаксический анализ (разбор) –varэто
основная часть компилятора на
c:boolean;
этапе анализа. Она выполняет выделение
синтаксических конструкций в
a,b:real;
тексте исходной программы, обработанном
begin лексическим анализатором. На
этой же фазе компиляции проверяется
синтаксическая
if a:=b
else a:=a-b thenправильность
a:=b*0.3;
программы.
end.
- Семантический анализ – это часть компилятора, проверяющая
правильность текста исходной программы
с точки
program
m4; зрения семантики входного
языка. Кроме непосредственно проверки,
семантический анализ должен
var c:boolean;
выполнять преобразования текста, требуемые
a,b:real;семантикой входного языка
(такие, как добавление функций неявного
преобразования типов). В
begin
различных реализациях компиляторов семантический
анализelse
может
частично
if a>b then c:=a-b
a:=n*0.3;
входить в фазу синтаксической анализа,
end. частично – в фазу подготовки к
генерации кода.
9.
Общая схема работы компилятораОсновные фазы компиляции
Подготовка к генерации кода – это фаза, на которой компилятором
выполняются предварительные действия, непосредственно связанные с
синтезом текста результирующей программы, но еще не ведущие к
порождению текста на выходном языке. Обычно в эту фазу входят действия,
связанные с идентификацией элементов языка, распределением памяти и т. п.
Генерация кода – это фаза, непосредственно связанная с порождением
команд, составляющих предложения выходного языка и в целом текст
результирующей программы. Это основная фаза на этапе синтеза
результирующей программы.
Кроме непосредственного порождения текста результирующей программы,
генерация обычно включает в себя также оптимизацию – процесс, связанный
с обработкой уже порожденного текста. Иногда оптимизацию выделяют в
отдельную фазу компиляции, так как она оказывает существенное влияние на
качество и эффективность результирующей программы.
10.
Общая схема работы компилятораТаблицы идентификаторов (таблицы символов) – это специальным
образом организованные наборы данных, служащие для хранения
информации об элементах исходной программы, которые затем используются
для порождения текста результирующей программы.
Таблица идентификаторов в конкретной реализации компилятора может быть
одна, или же таких таблиц может быть несколько.
Элементами исходной программы, информацию о которых нужно хранить в
процессе компиляции, являются переменные, константы, функции и т. п. –
конкретный состав набора элементов зависит от используемого входного
языка программирования.
Понятие «таблицы» вовсе не предполагает, что это хранилище данных
должно быть организовано именно в виде таблиц или других массивов
информации.
11.
Общая схема работы компилятораМногопроходные и однопроходные компиляторы
Чаще
всего одинтрансляцию
проход включает
Реальные компиляторы, как правило,
выполняют
текста исходной
себя выполнение одной или нескольких фаз компиляции.
программы за несколько впроходов.
Результатом промежуточных проходов
является внутреннее представление исходной программы,
Проход – это процесс последовательного
чтения компилятором данных из
результатом последнего прохода
внешней памяти, их обработки –ирезультирующая
помещения результата
работы
во внешнюю
объектная
программа.
память.
- оперативная память компьютера,
- накопители на магнитных дисках,
- накопители на магнитных лентах и т. п.
В современных системах программирования
нередко
первый проход
компилятора
(лексический
анализ и
кода)
Однопроходный
компилятор,
получает
на вход исходную
программу
сразу
выполняется
параллельно
с редактированием
же порождает результирующую
объектную
программу
, – это идеальный вариант.
кода исходной программы, то есть выполняется
редкость, он возможен только для очень простых языков.
лексический анализ «на лету», который является
функцией текстового
редактора системы программирования,
Реальные компиляторы
являются многопроходными.
заключающийся в поиске и выделении лексем входного языка
в тексте программы непосредственно
в процессе ее создания разработчиком.