Вопросы к экзамену по курсу «Системы программирования» (2007)
Экзамен по курсу «Системы программирования» будет проходить в письменной форме.
Итоговая оценка по курсу будет выставляться в соответствии с баллами, получеными на коллоквиуме и экзамене, учтенными соответственно с коэффициентами 2 и 3:
итоговая оценка = ( баллы-коллоквиум ) x 2 + ( баллы-экзамен ) x 3
Теоретические вопросы
Этапы жизненного цикла программного продукта.
Состав и схема функционирования классической системы программирования.
Типы трансляторов, особенности интерпретаторов и компиляторов. Смешанная стратегия трансляции.
Общая схема работы компилятора.
Основные понятия теории формальных грамматик и языков.
Эквивалентные грамматики.
Классификация формальных грамматик и языков по Хомскому.
Соотношения между типами грамматик.
Соотношения между типами языков.
Задача разбора. Дерево вывода.
Неоднозначность грамматик и языков.
Недостижимые и бесполезные (бесплодные) символы грамматики. Алгоритмы удаления недостижимых и бесполезных (бесплодных) символов. Приведенная грамматика.
Определение недетерминированного конечного автомата (НКА).
Диаграмма состояний (ДС) конечного автомата.
Леволинейные регулярные грамматики и конечные автоматы.
Определение детерминированного конечного автомата (КА).
Алгоритм построения детерминированного конечного автомата по НКА.
Задачи лексического анализа.
Лексический анализ на основе регулярных грамматик.
Объектная модель лексического анализатора. Схема его работы.
Задачи синтаксического анализа.
Метод рекурсивного спуска (РС-метод): назначение, семантика процедур метода рекурсивного спуска.
Достаточные условия применимости метода рекурсивного спуска.
Исследование применимости РС-метода в случае наличия
ε-альтернативы и итерационных правил.
Задачи семантического анализа. Грамматики с действиями.
Объектная модель синтаксического анализатора.
Использование исключений С++ при обработке синтаксических ошибок и нарушении контекстных условий.
Свойства языка внутреннего представления программы, примеры таких языков.
Синтаксически управляемый перевод: идея, принципы организации, примеры.
ПОЛИЗ операторов языков программирования.
Генерация ПОЛИЗа выражений и операторов.
Использование исключений С++ при обработке ошибок периода выполнения.
Основные стратегии распределения памяти.
Принципы реализации виртуальных функций.
Машинно-независимая и машинно-зависимая оптимизация. Примеры оптимизирующих преобразований.
Интегрированная среда разработки программного обеспечения (ИСР).
Основные функции редактора текстов в рамках ИСР. Примеры его интегрированности с другими компонентами ИСР.
Отладчики, их возможности. Примеры интегрированности отладчика с другими компонентами ИСР.
Редактор внешних связей, его назначение и принципы работы. Загрузчик.
Библиотеки. Основные типы библиотек.
Критерии проектирования стандартных библиотек.
Стандартная библиотека С++.
Стандартная библиотека шаблонов STL: контейнеры, итераторы, алгоритмы, аллокаторы.
Стандартная библиотека шаблонов STL: шаблонные классы
vector и
list.
Практические навыки
Определить, к какому типу по Хомскому относится заданная грамматика.
Определить тип языка, порождаемого данной грамматикой.
Построить грамматику [определенного типа], порождающую заданный язык.
Определить, какой язык порождает заданная грамматика.
Построить дерево вывода (разбора) заданной цепочки по заданной КС-грамматике.
Получение приведенной грамматики.
Дана леволинейная регулярная грамматика. Построить по ней ДС конечного автомата, по ДС написать анализатор на С++.
Дана ДС конечного автомата. Восстановить леволинейную регулярную грамматику, порождающую язык, распознаваемый этим автоматом.
Дан текст анализатора на С++. Восстановить леволинейную регулярную грамматику по данному анализатору.
Дана леволинейная регулярная грамматика, которой соответствует НКА. Построить эквивалентный детерминированный КА (использовать алгоритм построения детерминированного КА по НКА).
Применим ли метод рекурсивного спуска к заданной КС-грамматике. Ответ обосновать.
Для заданной КС-грамматики построить анализатор методом рекурсивного спуска.
Дан анализатор, написанный методом рекурсивного спуска. Восстановить КС-грамматику.
Дана грамматика с действиями. Какой язык она порождает?
Дана КС-грамматика. Дополнить ее действиями, позволяющими учесть дополнительные ограничения на цепочки определяемого языка.
Дана грамматика (или написать грамматику) языка
L1. Вставить в грамматику действия по переводу цепочек языка
L1 в цепочки языка
L2.
Дана грамматика с действиями, осуществляющими перевод цепочек языка
L1 в цепочки языка
L2. Описать языки
L1 и
L2.
Записать в ПОЛИЗе заданный фрагмент программы на языке
Х.
Задан фрагмент программы в ПОЛИЗе. Восстановить текст на языке
Х.
Определить, является ли данная запись ПОЛИЗом заданной конструкции.
Разработать ПОЛИЗ заданной конструкции некоторого языка. Вставить в грамматику действия, порождающие ПОЛИЗ этой конструкции.
Решение простейших задач с использованием компонент библиотеки STL (
vector и
list).