Вопросы к экзамену по дисциплине «языки программирования» (часть 2)
Вопросы по языку программирования Си
- Данные типа int
- Данные типа char
- Модификаторы доступа const и volatile
- Данные вещественного типа (с плавающей точкой)
- Элементарный ввод-вывод
- Арифметические операции
- Побитовые логические операции
- Операции сдвига
- Операция присваивания
- Операция sizeof
- Преобразование типов в выражениях
- Операция преобразования типов
- Приоритеты в языке Си
- Оператор if
- Операции отношения
- Логические операции
- Операция запятая
- Операция условия ?:
- Оператор безусловного перехода goto
- Оператор switch
- Операторы цикла. Оператор for. Оператор while. Оператор do...while
- Оператор break. Оператор continue
- Одномерные массивы и их инициализация
- Многомерные массивы и их инициализация
- Объявление указателей. Операции над указателями
- Тип void
- Связь между указателями и массивами
- Динамическое распределение памяти
- Массивы указателей
- Функции. Область видимости переменных. Локальные и глобальные переменные
- Передача параметров в функцию
- Рекурсивные функции
- Использование функций в качестве параметров функций
- Указатели на функции
- Структура программы на языке C
- Передача параметров в функцию main() и её возвращаемое значение
- Строки
- Классы хранения и видимость переменных. Классы auto и register
- Классы хранения и видимость переменных. Классы static и extern
- Структуры. Инициализация структурных переменных. Вложенные структуры
- Указатели на структуры. Массивы структурных переменных
- Передача функциям структурных переменных. Класс хранения typedef
- Битовые поля
- Объединения
- Перечисления
46. Односвязные списки
47. Стеки
48. Очереди
49. Бинарные деревья
- Файлы. Общие сведения. Открытие и закрытие файлов
- Функции ввода-вывода для работы с текстовыми файлами
- Произвольный доступ к файлу
- Функции ввода-вывода для работы с бинарными файлами
- Директива препроцессора #include
- Директивы препроцессора #define и #undef
- Директивы условной компиляции
- Неопределённое поведение
- Функции с переменным числом параметров
Вопросы по теории компиляторов
- Классификация трансляторов. Компиляторы, интерпретаторы.
- Структура компилятора. Этапы (фазы) компиляции, их назначение.
- Лексический анализ. Задачи лексического анализа. Понятия лексемы и токена. Классы токенов.
- Лексический анализ. Предпросмотр (backtracking, lookahead) и примеры его применения при лексическом анализе языков программирования.
- Регулярные выражения. Назначение, базовые конструкции, составные конструкции.
- Формальные языки. Алфавит языка.
- Функция значения (meaning function).
- Лексические спецификации. Использование лексических спецификаций для лексического анализа.
- Правило «maximal munch». Проблемы применения и способы их решения.
- Конечные автоматы в лексическом анализе. Понятия «accept» и «reject». Связь между конечными автоматами и регулярными языками.
- Детерминированные и недетерминированные конечные автоматы (ДКА и НКА).
- Этапы построения лексического анализатора. НКА для простых и составных регулярных выражений.
- Построение НКА для сложного регулярного выражения.
- Понятие ε-замыкания. Преобразование НКА в ДКА.
- Программная реализация конечных автоматов.
- Иерархия Хомского. Понятие грамматики. Проблема использования регулярных выражений в синтаксическом анализе.
- Синтаксический анализ. Задачи синтаксического анализа. Понятие дерева разбора.
- Контекстно-свободные грамматики (КСГ). Понятия терминала, нетерминала, продукции. Связь КСГ с лексическим анализом.
- Порождения. Левое и правое порождения.
- Неоднозначность. Проблемы использования неоднозначных грамматик в синтаксическом анализе. Примеры языков программирования, имеющих неоднозначные грамматики.
- Способы устранения неоднозначностей. Понятие ассоциативности, связь ассоциативности и приоритетов с неоднозначными грамматиками.
- Обработка ошибок компилятором. Способы обработки ошибок, их преимущества и недостатки.
- Абстрактные синтаксические деревья (AST). Связь AST с деревьями разбора.
- Классификация методов синтаксического анализа. Метод рекурсивного спуска: теория.
- Метод рекурсивного спуска: программная реализация.
- Левая рекурсия, связанные с ней проблемы и способы её устранения.
- Предиктивный анализ. Понятие LL(k)-грамматик. Левая факторизация грамматики.
- LL(1)-разбор.
- First-множества в LL(1)-анализе.
- Follow-множества в LL(1)-анализе.
- Построение таблицы LL(1)-разбора. Выявление грамматик, не являющихся LL(1)-грамматиками.
- Восходящий разбор: отличия от нисходящих методов, преимущества. Понятие свёртки.
- Операции сдвига и свёртки в восходящем разборе. Виды конфликтов.
- Семантический анализ. Задачи семантического анализа. Области видимости и способы их определения в различных языках.
- Семантический анализ. Таблицы символов.
- Семантический анализ. Понятие типа, виды типизации.
- Оптимизация и генерация кода. Способы оптимизации. Проблемы оптимизации.