- •2. Операционная система
- •3. Системы программирования
- •4. Таблица идентификаторов.
- •5. Кэш адресация
- •6. Формальные языки и грамматики.
- •7. Понятие языка
- •8. Запись грамматики в форме Бэкуса-Наура.
- •9. Запись правил грамматики с использованием метасимволов.
- •11. Классификация грамматик
- •10. Запись правил грамматики в графическом виде
- •12. Классификация языков.
- •14. Цепочка вывода
- •15. Дерево вывода
- •16. Правила задающие неоднозначность грамматик
- •17. Распознаватель
- •18. Задача разбора
- •19. Этапы семантического анализа
- •20. Распознаватели регулярных языков.
- •21. Граф переходов конечного автомата
- •22. Способы задания регулярных языков
- •23. Назначение лексических анализаторов
- •24. Контекстно-свободные языки и грамматики
- •25. Распознаватели кс языков
- •26. Распознаватели кс языков с возвратом.
- •27. Нисходящий распознаватель с возвратом
- •28. Принципы работы восходящего распознавателя
- •29. Распознаватели кс языков без возврата
- •30. Распознаватель на основе грамматик
- •31. Свойства кс языков
- •32. Назначение синтаксических анализаторов.
- •33. Дерево операций.
- •35. Общие принципы оптимизации кода.
3. Системы программирования
СП объединяют программы, связанные с решением языковых проблем и предназначенные для разработки ПО.
В СП входят:
1) трансляторы;
2) библиотеки программ;
3) редакторы;
4) компоновщики;
5) загрузчики;
6) отладчики
Системы обслуживания программ (утилиты) — это специальные системные программы, с помощью которых можно обслуживать саму ОС
Транслятор — это программа, которая переводит входную программу на исходном языке в эквивалентную на выходном результирующем языке.
Компилятор — это транслятор, кот осуществляет перевод исходной программы в эквивалентную ей объектную программу на языке машинных команд.
Интерпретатор — это программа, которая воспринимает входную программу на исходном языке и сразу её выполняет (нет результирующего кода)
Компилятор с точки зрения формальных языков выполняет 2 основные функции:
1) он является распознавателем для языка исходной программы (генератором цепочек является автор входной программы);
2) является генератором для языка результирующей программы (распознавателем является вычислительная система)
Основными фазами компиляции являются:
Лексический анализ — это часть компилятора, которая читает литеры программы и строит из них слова лексемы исходного языка.
Синтаксический анализ — это основная часть компилятора на этапе анализа. Выделяет синтаксические конструкции языка.
Семантический анализ — это часть компилятора, проверяет текст программы с точки зрения семантики исходного языка.
Подготовка к генерации кода — фаза, на которой выполняется предварительные действия, связанные с синтезом текста результирующей программы, но еще не ведущие к порождению текста на исходном языке.
Генерация кода — непосредственное порождение результирующего кода — основная фаза. Включает оптимизацию кода – процесс, связанный с обработкой уже порожденного текста.
Таблица идентификаторов — набор данных, служащий для хранения информации об элементах исходной программы, которые потом используются для порождения текста результирующей программы. Существует несколько таблиц идентификаторов.
Проход — это процесс последовательного чтения данных из внешней памяти, их обработка и помещение во внешнюю память. Одна фаза компиляции — один проход.
4. Таблица идентификаторов.
Таблица идентификаторов — набор данных, служащий для хранения информации об элементах исходной программы. Существует несколько таблиц идентификаторов.
Организация ТИ: В зависимости от идентификатора может храниться различная информация:
1) Переменная – имя, тип, адрес
2) Константа – имя, если есть, адрес, значение;
3) Функция – количество аргументов, тип, имя, адрес
ТИ создается на фазе лексического анализа и заполняется последовательно. На фазе лексического анализа записываются типы идентификаторов. На фазе подготовки генерации кода — выделение памяти.
Основным критерием выбора способа организации ТИ является время поиска нужного элемента, т.к. основными функциями являются добавление и поиск (поиск происходит чаще)
1. Неупорядоченный список — в ТИ добавляются элементы в порядке поступления
(+) простота реализации
(–) непродуктивен при большом количестве элементов
2. Упорядоченный список — все элементы в ТИ упорядочены согласно естественному порядку по убыванию и возрастанию.
(+) сокращение времени поиска необходимого элемента
(–) требует упорядочить ТИ
3. Бинарное дерево ТИ имеет форму бинарного дерева. Каждый элемент или вершина — идентификатор. Корневой вершиной дерева является первый поступивший идентификатор.
Форма бинарного дерева зависит от порядка поступивших идентификаторов. Недостаток — дерево может выродиться в упорядоченный список.
