Общая схема работы компилятора

Содержание

Слайд 2

Методы построения трансляторов Тема № 1 Общая схема работы компилятора

Методы построения трансляторов

Тема № 1

Общая схема работы компилятора

Слайд 3

Общая схема работы компилятора Определение и назначение транслятора Транслятор – это

Общая схема работы компилятора

Определение и назначение транслятора

Транслятор – это программа, которая

переводит входную программу на исходном (входном) языке в эквивалентную ей выходную программу на результирующем (выходном) языке.

Транслятор

Слайд 4

Общая схема работы компилятора Компилятор – это транслятор, который осуществляет перевод

Общая схема работы компилятора

Компилятор – это транслятор, который осуществляет перевод исходной

программы в эквивалентную ей объектную программу на языке машинных команд или на языке ассемблера.

Определение и назначение компилятора

Компилятор

Всякий компилятор является транслятором,
но не всякий транслятор является компилятором.

Файл, в который записана результирующая программа,
обычно называется «объектным файлом».
Даже в том случае, когда результирующая программа
порождается на языке машинных команд,
между объектной программой (объектным файлом)
и исполняемой программой (исполняемым файлом)
есть существенная разница.
Порожденная компилятором программа
не может непосредственно выполняться на компьютере,
так как она не привязана к конкретной области памяти,
где должны располагаться ее код и данные.

Слайд 5

Общая схема работы компилятора Определение и назначение интерпретатора Интерпретатор – это

Общая схема работы компилятора

Определение и назначение интерпретатора

Интерпретатор – это программа,

которая воспринимает входную программу на исходном языке и сразу выполняет ее.

Интерпретатор

Слайд 6

Этапы трансляции Общая схема работы компилятора Исходная программа Анализ Т а

Этапы трансляции

Общая схема работы компилятора

Исходная
программа

Анализ
Т
а
б
л
и
ц
а
и
д
е
н
т
и
ф
и
к
а
т
о
р
о
в

Синтез

Слайд 7

Общая схема работы компилятора Компилятор в целом с точки зрения формальных

Общая схема работы компилятора

Компилятор в целом с точки зрения формальных языков

выполняет
две основные функции:

является распознавателем для языка исходной программы
получив на вход цепочку символов входного языка, проверяет ее принадлежность языку и выявляет правила, по которым эта цепочка была построена - генератор цепочек – автор входной программы;

является генератором для языка результирующей программы
строит на выходе цепочку выходного языка по определенным правилам, предполагаемым языком машинных команд или языком ассемблера распознавателем этой цепочки является вычислительная система, под которую создается результирующая программа.

Слайд 8

Общая схема работы компилятора Основные фазы компиляции - Лексический анализ (сканер)

Общая схема работы компилятора

Основные фазы компиляции

- Лексический анализ (сканер) –

это часть компилятора, которая читает литеры программы на исходном языке и строит из них слова (лексемы) исходного языка. На вход лексического анализатора поступает текст исходной программы, а выходная информация передается для дальнейшей обработки компилятором на этапе синтаксического разбора.

- Синтаксический анализ (разбор) – это основная часть компилятора на этапе анализа. Она выполняет выделение синтаксических конструкций в тексте исходной программы, обработанном лексическим анализатором. На этой же фазе компиляции проверяется синтаксическая правильность программы.

- Семантический анализ – это часть компилятора, проверяющая правильность текста исходной программы с точки зрения семантики входного языка. Кроме непосредственно проверки, семантический анализ должен выполнять преобразования текста, требуемые семантикой входного языка (такие, как добавление функций неявного преобразования типов). В различных реализациях компиляторов семантический анализ может частично входить в фазу синтаксической анализа, частично – в фазу подготовки к генерации кода.

program m4;
var c:boolean;
a,b:real;
begin
if a>b then #:=a-b else a:=b*0.3;
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
if a>b then c:=a-b else a:=n*0.3;
end.

Слайд 9

Общая схема работы компилятора Подготовка к генерации кода – это фаза,

Общая схема работы компилятора

Подготовка к генерации кода – это фаза, на

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

Основные фазы компиляции

Генерация кода – это фаза, непосредственно связанная с порождением команд, составляющих предложения выходного языка и в целом текст результирующей программы. Это основная фаза на этапе синтеза результирующей программы.

Слайд 10

Общая схема работы компилятора Таблицы идентификаторов (таблицы символов) – это специальным

Общая схема работы компилятора

Таблицы идентификаторов (таблицы символов) – это специальным образом

организованные наборы данных, служащие для хранения информации об элементах исходной программы, которые затем используются для порождения текста результирующей программы.
Таблица идентификаторов в конкретной реализации компилятора может быть одна, или же таких таблиц может быть несколько.
Элементами исходной программы, информацию о которых нужно хранить в процессе компиляции, являются переменные, константы, функции и т. п. – конкретный состав набора элементов зависит от используемого входного языка программирования.
Понятие «таблицы» вовсе не предполагает, что это хранилище данных должно быть организовано именно в виде таблиц или других массивов информации.