Языки программирования. Часть 2. Компиляторы
Компиляторы
Структура компилятора
Структура компилятора
Лексический анализ
Разбор текста
Разбор текста
Разбор текста
Семантический анализ
Семантический анализ
Семантический анализ
Семантический анализ
Оптимизация
Оптимизация
Генерация кода
Генерация кода
Спасибо за внимание
845.00K
Категория: ПрограммированиеПрограммирование

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

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

2. Компиляторы

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

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

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

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

Введение в компиляторы
• Первый шаг: распознавание слов.
– наименьшая единица после буквы
This is a sentence.
ist his ase nte nce

5. Лексический анализ

Введение в компиляторы
• Лексический анализатор делит текст
программы на “слова(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 article adjective noun
subject
object
sentence

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

Введение в компиляторы
Разбор текста
if x == y then z = 1; else z = 2;
x == y
z
1
relation
assign
predicate
then-stmt
if – then – else
z
2
assign
else-stmt

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

Введение в компиляторы
• Как только структура предложения
определена, необходимо попытаться
понять «смысл»
- Это сложно!
• Компиляторы выполняют ограниченные
виды семантического анализа, чтобы
обнаружить несоответствия

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

Введение в компиляторы
• Например:
Jack said Jerry 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.
• Ещё хуже:
Jack said Jack left his assignment at home?

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

Введение в компиляторы
• Языки программирования
определяют
строгие
правила, чтобы избежать
таких разногласий
{
int Jack = 3;
{
int Jack = 4;
cout << Jack;
}
}

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


Введение в компиляторы
Компиляторы
выполняют
множество
семантических проверок помимо привязок
переменных (variable bindings)
Например:
Jack left her homework at home.
“несоответствие типов” между her и Jack;
обозначает,
что
это
разные
люди
(аналог проверки типов компилятором)

13. Оптимизация

Введение в компиляторы
Оптимизация не имеет сильного соответствия
akin to
в естественном языке
– But a little bit like editing
Автоматическое преобразование программы
нацелено на то, чтобы
– Работать быстрее
– Использовать меньше памяти
– Мощность
– Сеть
– База данных

14. Оптимизация

Введение в компиляторы
Оптимизация
X = Y * 0 is the same as
No !
valid for integers
Invalid for floating point
NaN – not a number
NaN * 0 = NaN
X=0

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

Введение в компиляторы
Code Gen
• Создает код сборки (обычно)
• Перевод на другой язык
– Аналогично переводу в ЕЯ-х
Прим. ЕЯ – естественный язык

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

Введение в компиляторы
Генерация кода
• Общая
структура
большинства
компиляторов соответствует схеме
• Пропорции
FORTRAN 1
L
L
P
изменились
P
S
S
O
O
со
времен
CG
CG
Прим. L- лексический анализ, P(arse)- разбор, S-семантический анализ,
O - оптимизация, CG – генерация кода

17. Спасибо за внимание

English     Русский Правила