Трансляторы. Интерпретация и компиляция.
Трансля́тор — программа или техническое средство, выполняющее трансляцию программы.
Трансляция программы — преобразование программы, представленной на одном из языков программирования, в программу на другом языке и, в определённом смысле, равносильную первой. Транслятор обычно выполняет также диагностику ошибок, формирует словари идентификаторов, выдаёт для печати тексты программы и т. Д
Трансляторы – компиляторы и интерпретаторы.
Компилятор (англ. compiler – составитель, собиратель) читает всю программу целиком, делает ее перевод и создает законченный вариант программы на машинном языке, который затем и выполняется.
Интерпретатор (англ. interpreter – истолкователь, устный переводчик) переводит и выполняет программу строка за строкой. После того, как программа откомпилирована, ни сама исходная программа, ни компилятор более не нужны. В то же время программа, обрабатываемая интерпретатором, должна заново переводиться на машинный язык при каждом очередном запуске программы. Откомпилированные программы работают быстрее, но интерпретируемые проще исправлять и изменять.
Компилятор – переводит весь исходный код в объектный или исполняемый модуль. (С)
Интерпретатор – выполняет перевод команды в объектный код, непосредственно перед ее выполнением. Выполнением самим команд занимается имитатор абстрактной машины. JAVA, PHP, basic.
Компиляция
Исх текст
Лексический анализатор
Синтаксический анализатор
Семантический анализатор
Промежуточный представление
Оптимизация машинозависимая
Генератор кода
Машинозависимый оптимизатор
Объектный код
Интерпретация
Исх текст
Лексический анализатор
Синтаксический анализатор
Семантический анализатор
Абстрактный код
Имитатор абстрактной машины
Лексический анализатор преобразует последовательность символов в синтаксические инструкции (лексемы).
Синтаксический анализатор получает от лексического анализатора лексические единицы и использует их для создания иерархических структур.
Семантический анализатор предает смысл этим инструкциям, т.е. определяет адреса переменных, подпрограмм, последовательности параметров в стеке, при вызове подпрограммы и т.д.
В итоге в обоих случаях получается некое промежуточное представление (абстрактный код), который с точностью до идентификаторов однозначно соответствует исходному коду.
Выходная часть компилятора (имитатор абстрактной машины) выполняет генерацию машинно-зависимого кода.
Оптимизатор пытается улучшить код, убрать лишние операции, заменить медленные инструкции на более быстрые и т.д.
В результате оптимизации получается объектный код, который не соответствует исходному, из-за чего затрудняется процесс отладки.
Виды оптимизации:
-
Оптимизация промежуточного представления
-
Машинно-ориентированная оптимизация (регистры вместо оперативной памяти)
-
Локальная оптимизация (замена нескольких команд одной более эффективной)
- Язык программирования. Общие принципы построения и использования языков программирования.
- Стандарты языков программирования.
- Лямбда-исчисление. Аппликация, абстракция, редукция, преобразование.
- Списки и функциональные выражения в функциональных языках программирования.
- Механизмы и средства взаимодействия программы с операционной системой.
- Функциональное программирование. Основные положения. Основные отличия от других типов языков программирования.
- Классификация языков программирования. Близость языков программирования к естественному языку.
- Унификация и хорновский клоз в логических языках программирования.
- Модель вычислений функциональных языков программирования.
- Языки программирования низкого уровня.
- Средства разработки графического интерфейса пользователя. Эргономические свойства человеко-машинного интерфейса.
- Процедурные языки программирования. Основные отличия от других типов языков.
- Обоснование выбора языка программирования.
- Перегрузка в языках программирования.
- Логические языки программирования. Основные положения и понятия. Основные отличия от других типов языков программирования.
- Объектно-ориентированные языки программирования (ооп). Основные отличия от других концепций языков программирования.
- Полиморфизм в ооп. Виртуальные функции. Таблицы виртуальных функций.
- Структура языка программирования. Синтаксис и семантика языка программирования. Расширенная форма Бэкуса-Наура.
- Наследование в ооп. Множественное наследование. Проблемы множественного наследования.
- Инкапсуляция в ооп. Контроль доступа.
- Понятие класса и объекта в ооп. Атрибуты, методы, конструктор и деструктор, статические члены класса.
- Диаграммы классов uml. Основные элементы и обозначения.
- Данные. Средства описания данных. Типизация языка.
- Преобразования типов. Контроль соответствия типов данных.
- Ооп. Основные концепции ооп.
- Современные интегрированные схемы разработки программ. Основные компоненты среды программирования.
- Декомпозиция программ.
- Трансляторы. Интерпретация и компиляция.
- Макропроцессоры и макрогенераторы.
- Потоки и процессы. Сходства и различия.
- Мониторы и защищаемые переменные в параллельном программировании.
- Семафоры в параллельном программировании. Типы семафоров.
- Отладчики. Генераторы кода и приложений.
- Параллельная обработка данных и параллелизм. Параллельное и распределенное программирование.
- Основные проблемы параллельного и распределенного программирования.
- Оценка максимально возможного параллелизма.
- Основные модели параллельного программирования.
- Оптимизатор. Основные функции оптимизатора.
- Обработка исключительных ситуаций. Иерархия и виды исключительных ситуаций.
- Операторы обработки исключительных ситуаций в различных языках программирования.
- Элементарные типы данных.
- Перегрузка данных, операторов, методов.
- Составные типы данных.
- Механизмы логического вывода. Прямая и обратная цепочки рассуждений.
- Пространство имен, область видимости, время жизни переменных.
- Ошибки при работе с вещественными числами. Смешанная арифметика.
- Операторы выбора и условные операторы.
- Вещественные числа. Способы представления. Операции над вещественными числами.
- Оператор присваивания. Операторы цикла.
- Распределение памяти при выполнении программы.
- Динамические структуры данных. Реализация динамических структур данных с помощью указателей.
- Библиотеки программ и классов. Статические и динамические библиотеки. Критерии проектирования библиотек.
- Подпрограммы. Формальные и фактические параметры подпрограмм.
- Передача параметров подпрограмме.
- Программный стек и его изменение.
- Рекурсивный и итерационный методы решения задач. Виды рекурсий.
- Общая характеристика языков ассемблера: назначение, принципы построения и использования; структура языка.
- Сериализация и десериализация. Методы сериализации объектов в базу данных.