Языки программирования. Часть 2. Компиляторы

Содержание

Слайд 2

Компиляторы Введение в компиляторы Структура компилятора

Компиляторы

Введение в компиляторы

Структура компилятора

Слайд 3

1.Лексический анализ 2.Разбор текста 3.Семантический анализ 4.Оптимизация 5.Генерация кода Структура компилятора Введение в компиляторы

1.Лексический анализ
2.Разбор текста
3.Семантический анализ
4.Оптимизация
5.Генерация кода

Структура компилятора

Введение в компиляторы

Слайд 4

• Первый шаг: распознавание слов. – наименьшая единица после буквы Структура

• Первый шаг: распознавание слов.
– наименьшая единица после буквы

Структура компилятора

This

is a sentence.
ist his ase nte nce

Введение в компиляторы

Слайд 5

• Лексический анализатор делит текст программы на “слова(words)” или “токены (tokens)”

• Лексический анализатор делит текст программы на “слова(words)” или “токены (tokens)”

Лексический

анализ

if x == y then z = 1; else z = 2;

keywords

variable names

constants

operators

punctuations, separators

Введение в компиляторы

Слайд 6

• Как только слова определены, следующим шагом является понимание структуры предложения

• Как только слова определены, следующим шагом является понимание структуры предложения


Разбор текста

• Разбор текста = Построение диаграммы предложения
– Диаграмма представляется в виде дерева

Введение в компиляторы

Слайд 7

This line is a longer sentence Разбор текста article noun verb

This line is a longer sentence

Разбор текста

article noun verb article

adjective noun

subject

object

sentence

Введение в компиляторы

Слайд 8

if x == y then z = 1; else z =

if x == y then z = 1; else z =

2;

Разбор текста

relation

assign

if – then – else

x == y

z 1

assign

z 2

predicate

then-stmt

else-stmt

Введение в компиляторы

Слайд 9

Как только структура предложения определена, необходимо попытаться понять «смысл» - Это

Как только структура предложения определена, необходимо попытаться понять «смысл»
- Это сложно!

Семантический

анализ

Компиляторы выполняют ограниченные виды семантического анализа, чтобы обнаружить несоответствия

Введение в компиляторы

Слайд 10

Например: Jack said Jerry left his assignment at home. Семантический анализ

Например:
Jack said Jerry left his assignment at home.

Семантический анализ

Ещё хуже:
Jack said

Jack left his assignment at home?

1. Jack said Jerry left Jerry's assignment at home.

2. Jack said Jerry left Jack's assignment at home.

Введение в компиляторы

Слайд 11

Языки программирования определяют строгие правила, чтобы избежать таких разногласий Семантический анализ

Языки программирования определяют строгие правила, чтобы избежать таких разногласий

Семантический анализ
{

int Jack = 3;
{
int Jack = 4;
cout << Jack;
}
}

Введение в компиляторы

Слайд 12

Компиляторы выполняют множество семантических проверок помимо привязок переменных (variable bindings) Семантический

Компиляторы выполняют множество семантических проверок помимо привязок переменных (variable bindings)

Семантический анализ

Например:
Jack

left her homework at home.

“несоответствие типов” между her и Jack; обозначает, что это разные люди (аналог проверки типов компилятором)

Введение в компиляторы

Слайд 13

Оптимизация не имеет сильного соответствия в естественном языке – But a

Оптимизация не имеет сильного соответствия в естественном языке
– But a little

bit like editing

Оптимизация

Автоматическое преобразование программы нацелено на то, чтобы
– Работать быстрее
– Использовать меньше памяти
– Мощность
– Сеть
– База данных

akin to

Введение в компиляторы

Слайд 14

X = Y * 0 is the same as X =

X = Y * 0 is the same as X =

0

Оптимизация

No !

valid for integers

Invalid for floating point

NaN – not a number

NaN * 0 = NaN

Введение в компиляторы

Слайд 15

Создает код сборки (обычно) Генерация кода Перевод на другой язык –

Создает код сборки (обычно)

Генерация кода

Перевод на другой язык
– Аналогично переводу в

ЕЯ-х

Code Gen

Введение в компиляторы

Прим. ЕЯ – естественный язык

Слайд 16

Общая структура большинства компиляторов соответствует схеме Генерация кода Пропорции изменились со

Общая структура большинства компиляторов соответствует схеме

Генерация кода

Пропорции изменились со времен FORTRAN

1

L

P

S

O

CG

L

P

S

O

CG

Введение в компиляторы

Прим. L- лексический анализ, P(arse)- разбор, S-семантический анализ,
O - оптимизация, CG – генерация кода