Similar presentations:
Языки программирования. Часть 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 – генерация кода