Вопросы к экзамену по дисциплине «языки программирования» (часть 2)

Вопросы по языку программирования Си

  1. Данные типа int
  2. Данные типа char
  3. Модификаторы доступа const и volatile
  4. Данные вещественного типа (с плавающей точкой)
  5. Элементарный ввод-вывод
  6. Арифметические операции
  7. Побитовые логические операции
  8. Операции сдвига
  9. Операция присваивания
  10. Операция sizeof
  11. Преобразование типов в выражениях
  12. Операция преобразования типов
  13. Приоритеты в языке Си
  14. Оператор if
  15. Операции отношения
  16. Логические операции
  17. Операция запятая
  18. Операция условия ?:
  19. Оператор безусловного перехода goto
  20. Оператор switch
  21. Операторы цикла. Оператор for. Оператор while. Оператор do...while
  22. Оператор break. Оператор continue
  23. Одномерные массивы и их инициализация
  24. Многомерные массивы и их инициализация
  25. Объявление указателей. Операции над указателями
  26. Тип void
  27. Связь между указателями и массивами
  28. Динамическое распределение памяти
  29. Массивы указателей
  30. Функции. Область видимости переменных. Локальные и глобальные переменные
  31. Передача параметров в функцию
  32. Рекурсивные функции
  33. Использование функций в качестве параметров функций
  34. Указатели на функции
  35. Структура программы на языке C
  36. Передача параметров в функцию main() и её возвращаемое значение
  37. Строки
  38. Классы хранения и видимость переменных. Классы auto и register
  39. Классы хранения и видимость переменных. Классы static и extern
  40. Структуры. Инициализация структурных переменных. Вложенные структуры
  41. Указатели на структуры. Массивы структурных переменных
  42. Передача функциям структурных переменных. Класс хранения typedef
  43. Битовые поля
  44. Объединения
  45. Перечисления

46. Односвязные списки

47. Стеки

48. Очереди

49. Бинарные деревья

  1. Файлы. Общие сведения. Открытие и закрытие файлов
  2. Функции ввода-вывода для работы с текстовыми файлами
  3. Произвольный доступ к файлу
  4. Функции ввода-вывода для работы с бинарными файлами
  5. Директива препроцессора #include
  6. Директивы препроцессора #define и #undef
  7. Директивы условной компиляции
  8. Неопределённое поведение
  9. Функции с переменным числом параметров

Вопросы по теории компиляторов

  1. Классификация трансляторов. Компиляторы, интерпретаторы.
  2. Структура компилятора. Этапы (фазы) компиляции, их назначение.
  3. Лексический анализ. Задачи лексического анализа. Понятия лексемы и токена. Классы токенов.
  4. Лексический анализ. Предпросмотр (backtracking, lookahead) и примеры его применения при лексическом анализе языков программирования.
  5. Регулярные выражения. Назначение, базовые конструкции, составные конструкции.
  6. Формальные языки. Алфавит языка.
  7. Функция значения (meaning function).
  8. Лексические спецификации. Использование лексических спецификаций для лексического анализа.
  9. Правило «maximal munch». Проблемы применения и способы их решения.
  10. Конечные автоматы в лексическом анализе. Понятия «accept» и «reject». Связь между конечными автоматами и регулярными языками.
  11. Детерминированные и недетерминированные конечные автоматы (ДКА и НКА).
  12. Этапы построения лексического анализатора. НКА для простых и составных регулярных выражений.
  13. Построение НКА для сложного регулярного выражения.
  14. Понятие ε-замыкания. Преобразование НКА в ДКА.
  15. Программная реализация конечных автоматов.
  16. Иерархия Хомского. Понятие грамматики. Проблема использования регулярных выражений в синтаксическом анализе.
  17. Синтаксический анализ. Задачи синтаксического анализа. Понятие дерева разбора.
  18. Контекстно-свободные грамматики (КСГ). Понятия терминала, нетерминала, продукции. Связь КСГ с лексическим анализом.
  19. Порождения. Левое и правое порождения.
  20. Неоднозначность. Проблемы использования неоднозначных грамматик в синтаксическом анализе. Примеры языков программирования, имеющих неоднозначные грамматики.
  21. Способы устранения неоднозначностей. Понятие ассоциативности, связь ассоциативности и приоритетов с неоднозначными грамматиками.
  22. Обработка ошибок компилятором. Способы обработки ошибок, их преимущества и недостатки.
  23. Абстрактные синтаксические деревья (AST). Связь AST с деревьями разбора.
  24. Классификация методов синтаксического анализа. Метод рекурсивного спуска: теория.
  25. Метод рекурсивного спуска: программная реализация.
  26. Левая рекурсия, связанные с ней проблемы и способы её устранения.
  27. Предиктивный анализ. Понятие LL(k)-грамматик. Левая факторизация грамматики.
  28. LL(1)-разбор.
  29. First-множества в LL(1)-анализе.
  30. Follow-множества в LL(1)-анализе.
  31. Построение таблицы LL(1)-разбора. Выявление грамматик, не являющихся LL(1)-грамматиками.
  32. Восходящий разбор: отличия от нисходящих методов, преимущества. Понятие свёртки.
  33. Операции сдвига и свёртки в восходящем разборе. Виды конфликтов.
  34. Семантический анализ. Задачи семантического анализа. Области видимости и способы их определения в различных языках.
  35. Семантический анализ. Таблицы символов.
  36. Семантический анализ. Понятие типа, виды типизации.
  37. Оптимизация и генерация кода. Способы оптимизации. Проблемы оптимизации.