Компьютер исполняет машинный код — последовательность примитивных операций: сложение двух ячеек памяти, пересылка значения из одной ячейки в другую, обращение к устройству, передача управления на другую инструкцию (безусловная или условная — в зависимости от результата предыдущей операции).
Человеку писать машинный код трудоёмко и муторно. Решение: программист пишет программу на человекочитаемом языке, компьютер её выполняет.
Способы реализации языка программирования: интерпретация и компиляция.
При интерпретации компьютер читает программу на языке программирования и выполняет инструкции, записанные в этой программе.
Преимущества: удобство разработки (нет промежуточной фазы компиляции), возможно, удобство отладки, переносимость.
Недостатки: низкое быстродействие, зависимость от интерпретатора.
При компиляции компьютер переводит программу с человекочитаемого языка на машинный язык. Транслятор — синоним компилятора.
Преимущества: высокое быстродействие, автономность готовых программ. Недостаток: фаза компиляции, зависимость готовых программ от платформы.
Гибридный подход: компилятор формирует промежуточный более низкоуровневый код, который затем выполняется интерпретатором.
Стадии компиляции:
Лексический анализ программы — программа делится на «слова» — лексемы, некоторые небольшие структурные элементы: знаки операций, идентификаторы, литеральные константы (числа, строки, символы…). На стадии лексического анализа отбрасываются комментарии и символы пустого пространства (пробелы, табуляции, переводы строк).
Лексема — подстрока исходной программы: )
, counter
, 007
.
Токен — «обработанная» лексема, токен состоит из метки типа, позиции
в исходном файле и атрибута (значения лексемы): ('CLOSE-BRACKET (1 1))
,
('IDENT (2 1) "counter")
, ('NUMBER (2 10) 7)
.
Синтаксический анализ — принимает последовательность токенов и строит из них синтаксическое дерево. Последовательность токенов плоская, выход синтаксического анализатора иерархичен — отражает структуру программы.
Семантический анализ — проверяет допустимость операций, правильность имён переменных, функций…
Стадии 1–3 — стадии анализа (front end), стадии 4–7 — стадии синтеза (back end).
Стадии интерпретации.