8. Вопросы к зачёту

Вопросы к зачёту #

Зачёт — это альтернатива сдаче проекта.

Команда сама выбирает — сдавать проект или сдавать зачёт по теории. Есть ограничения:

  • Получить оценку «отлично» можно только путём сдачи проекта
  • Получить оценки «удовлетворительно» и «хорошо» можно как путём сдачи проекта, так и через зачёт по теории

Правила сдачи зачёта #

Зачёт сдаётся очно в формате, похожем на сдачу экзамена.

  1. Каждый билет содержит три вопроса:
    • Простой вопрос по теории (5 баллов)
    • Сложный вопрос по теории (5 баллов)
    • Практическое задание (10 баллов)
  2. Каждый вопрос оценивается отдельно, при этом балл за вопрос умножается на один из коэффициентов: 0.6, 0.8 или 1.0
  3. Баллы за все три вопроса складываются
  4. Зачёт считается успешно сданным, если студент набрал не менее 10 баллов

Оценка вопросов по теории #

Каждый вопрос по теории имеет базовую оценку 5 баллов, которая умножается на коэффициент, выбираемый по таблице:

Критерий5×0.6=3 (удовл. ответ)5×0.8=4 (хороший ответ)5×1.0=4 (отличный ответ)
Знает определения и может приводить примерыобязательнообязательнообязательно
Отлично ориентируется во взаимосвязях между темамиобязательнообязательно
Легко приводит примеры из личного опыта за рамками курсаобязательно

Оценка практического задания #

Практическое задание имеет базовую оценку 10 баллов, которая умножается на коэффициент, выбираемый по таблице:

Критерий10×0.6=6 (удовл. ответ)10×0.8=8 (хороший ответ)10×1.0=10 (отличный ответ)
Число существенных ошибокне более 3не более 2не более 1
Студент знает, как исправить ошибкиобязательнообязательнообязательно
Студент может описать плюсы и минусы решенияобязательнообязательно
Студент может описать альтернативные решенияобязательно

Список вопросов #

Простой теоретический вопрос #

  1. Что такое контекстно-свободная грамматика? Приведите пример. Какие ограничения имеют контекстно-свободные грамматики?
  2. В чём цель лексического анализа? Как он связаны с иерархией грамматик Хомского?
  3. В чём цель синтаксического анализа? Как он связаны с иерархией грамматик Хомского?
  4. Опишите принцип написания синтаксического анализатора методом рекурсивного спуска.
  5. Что такое регулярная грамматика? Приведите пример. Какие ограничения имеет регулярная грамматика?
  6. Что такое левая рекурсия в грамматике? Приведите пример.
  7. Что такое правая рекурсия в грамматике? Приведите пример.
  8. Что такое левая факторизация в грамматике? Приведите пример.
  9. Опишите разницу между выражением (expression) и инструкцией (statement) в императивных высокоуровневых языках программирования.
  10. Опишите разницу между выражением (expression) и объявлением (declaration) в императивных высокоуровневых языках программирования.
  11. Что такое AST (Abstract Syntax Tree)? Приведите пример.
  12. Опишите, что такое сужающее преобразование типа (narrow cast) в языках программирования. Приведите пример.
  13. Опишите, что такое расширяющее преобразование типа (wide cast) в языках программирования. Приведите пример.
  14. Опишите, что такое вычисление по короткой схеме (short-circuit evaluation) в языках программирования. Приведите пример.

Сложный теоретический вопрос #

  1. Чем отличается интерпретатор от компилятора?
  2. Опишите правила построения EBNF грамматики (диалект ISO), приведите пример.
  3. Опишите смысл лексического анализа и различие между лексемой и токеном.
  4. Какие уровни есть в иерархии грамматик Хомского? Какие уровни используются при построении интерпретатора или компилятора языка программирования?
  5. В чём разница между леворегулярной и праворегулярной грамматиками?
  6. Что такое ДКА (детерминированный конечный автомат)? Чем он отличается от НКА (недетерминированного конечного автомата)?
  7. Какой тип конечного автомата может разбирать контекстно-свободные грамматики?
  8. Приведите пример контекстно-зависимой грамматики, которую нельзя свести к контекстно-свободной
  9. Приведите примеры выражения на каком-либо языке программирования, для которых: а) изменение ассоциативности с левой на правую меняет результат; б) изменение приоритетов операций меняет результат
  10. Почему для рекурсивного спуска нужно устранять левую рекурсию в грамматике?
  11. Почему для рекурсивного спуска нужно устранять факторизацию рекурсию в грамматике?
  12. Опишите разницу между динамическими и лексическими областями видимости в языках программирования. Какой из этих типов встречается чаще?
  13. Чем AST (Abstract Syntax Tree) отличается от дерева разбора (Parse Tree)? Приведите пример AST и Parse Tree для одного и того же формального языка.
  14. Опишите составляющие части концепции структурного программирования.

Практическое задание #

  1. CPython (интерпретатор языка Python 3) использует виртуальную машину для исполнения интерпретируемого кода, а в процессе разбора строит AST. Нарисуйте диаграмму фаз компиляции и передаваемых между фазами данных для интерпретатора CPython.
  2. SQLite (СУБД) для разбора SQL-запроса использует восходящий анализ алгоритмом LALR, с помощью которого строится AST, а для исполнения SQL-запросов создаёт план запроса в виде байт-кода на виртуальной машине VDBE. Нарисуйте диаграмму фаз компиляции и передаваемых между фазами данных при обработке SQL-запроса в SQLite.
  3. Напишите EBNF-грамматику, позволяющую проверить корректность всех пар скобок в последовательности круглых, квадратных, фигурных скобок. Затем нарисуйте дерево разбора строки {()[()]} согласно этой грамматике.
  4. Напишите EBNF-грамматику, позволяющую разобрать логическое выражение с лексемами identifier, "or", "and", "not", "(", ")" с учётом правильного приоритета операторов. Затем нарисуйте дерево разбора строки (a or b) and not (b or c) согласно этой грамматике.
  5. Напишите EBNF-грамматику, позволяющую разобрать логическое выражение с лексемами letter, "∧" (логическое И), "∨" (логическое или), "¬" (отрицание), "(", ")" с учётом правильного приоритета операторов. Затем нарисуйте дерево разбора строки (a ∨ с) ∧ ¬(b ∨ с) согласно этой грамматике.
  6. Напишите EBNF-грамматику, позволяющую разобрать слово, состоящее из следующих символов: буквы английского алфавита, дефис -, апостроф '. Дефисы могут быть только в середине слова, апострофы — в середине либо в конце.
  7. Напишите EBNF-грамматику, позволяющую разобрать денежные в рублях формате “10 200,99”, где пробел используется как разделитель тысячных разрядов, а запятая — для отделения дробной части. Грамматика должна строго ограничивать количества цифр в каждой частию
  8. Напишите EBNF-грамматику, позволяющую разобрать даты в формате “2025-12-31”, где первые 4 цифры содержат номер года, следующие 2 цифры — месяц, последние 2 цифры — число месяца. Грамматика должна ограничивать номер месяца числом от 1 до 12, а число месяца — числом от 1 до 31.
  9. Переведите выражение (a + 3) * (b - 4) в постфиксную (обратную польскую) нотацию. Покажите с помощью рисунков или схем, как вычислить полученное выражение с помощью стека, если a = 10 и b = 7.
  10. Напишите EBNF-грамматику, позволяющую разобрать арифметическое выражение с операторами +, -, *, / так, чтобы в грамматике не было левой рекурсии. Напишите вторую версию ENBF-грамматики, в которой нет правой рекурсии. Обе версии должны верно определять приоритет и ассоциативность всех арифметических операций.
  11. Нарисуйте UML диаграмму классов (с указанием всех полей и методов) для абстрактного синтаксического дерева арифметического выражения с числами, бинарными операторами +, -, *, /, унарными операторами +, - и скобками.
  12. Нарисуйте схему работы по каноничному варианту TDD (Test Driven Development). Опишите суть каждого шага на этой схеме.