
- •Тема 2. Основные принципы построения трансляторов
- •Трансляторы, компиляторы и интерпретаторы - общая схема работы
- •Формальное определение транслятора
- •Определение компилятора. Отличие компилятора от транслятора
- •Многопроходные и однопроходные компиляторы
- •Определение интерпретатора. Разница между интерпретаторами и трансляторами
- •Трансляция в ассемблер
- •Методики создания компилятора
- •Метод раскрутки
- •Кросс-транслятор
- •Виртуальная машина
- •Компиляция "на лету"
- •Этапы трансляции. Общая схема работы транслятора
- •Лексический анализ
- •Синтаксический анализ
- •Семантический анализ
- •Оптимизация кода
- •Генерация кода
- •Просмотры
Тема 2. Основные принципы построения трансляторов
2.1.1. Формальное определение транслятора 2
2.1.2. Определение компилятора. Отличие компилятора от транслятора 3
2.1.3. Многопроходные и однопроходные компиляторы 5
2.1.4. Определение интерпретатора. Разница между интерпретаторами и трансляторами 6
2.1.5. Трансляция в ассемблер 7
2.1.6. T-диаграммы 8
2.1.7. Методики создания компилятора 8
2.1.8. Метод раскрутки 9
2.1.9. Кросс-транслятор 10
2.1.10. Виртуальная машина 10
2.1.11. Компиляция "на лету" 11
2.2.1. Лексический анализ 14
2.2.2. Синтаксический анализ 15
2.2.3. Семантический анализ 16
2.2.4. Оптимизация кода 16
2.2.5. Генерация кода 17
2.2.6. Просмотры 17
Вопросы 18
Задачи 20
Трансляторы, компиляторы и интерпретаторы - общая схема работы
Формальное определение транслятора
Транслятор — это программа, которая переводит программу на исходном (входном) языке и эквивалентную ей программу на результирующем (выходном) языке.
Само слово «транслятор» (англ.: translator) означает «переводчик».
Рис. 2. 1. Схема работы транслятора
В работе транслятора участвуют три программы. Во-первых, сам транслятор является программой. То есть транслятор — это часть программного обеспечения (ПО), он выполняется компьютером, как и нее прочие программы в рамках операционной системы (ОС). Все составные части транслятора представляют собой динамически загружаемые библиотеки или модули этой программы со своими входными и выходными данными. Язык, на котором написан компилятор, будем называть языком реализации.
Во-вторых, исходными данными для работы транслятора служит программа на исходном языке программирования — некоторая последовательность предложений входного языка. Эта программа называется входной, или исходной программой. Текст исходной программы должен удовлетворять синтаксическим и семантическим требованиям входного языка.
В-третьих, выходными данными транслятора является программа на результирующем языке. Эта программа называется результирующей(целевой) программой. Результирующая программа строится по синтаксическим правилам выходного языка транслятора, а ее смысл определяется семантикой выходного языка.
Важным пунктом в определении транслятора является эквивалентность исходной и результирующей программ. Эквивалентность этих двух программ означает совпадение их смысла с точки зрения семантики входного языка (для исходной программы) и семантики выходного языка (для результирующей программы). Без выполнения этого требования сам транслятор теряет всякий практический смысл.
Результатом работы транслятора будет результирующая программа, но только в том случае, если текст исходной программы является правильным — не содержит ошибок с точки зрения синтаксиса и семантики входного языка. Если исходная программа неправильная (содержит хотя бы одну ошибку), то результатом работы транслятора будет сообщение об ошибке (как правило, с дополнительными пояснениями и указанием места ошибки в исходной программе).
Если
мы обозначим исходный язык (source
language) через L1, язык целевой
программы (target language) - L2, а язык
реализации (implementation language) - L3,
то мы можем представить транслятор, как
отображение множества L1 в множество
L2 , т.е.