Теоретические основы программирования: Все участники

Фильтры

Практические занятия (ТОП)

Задание Задание 1. Языки программирования, синтаксис, семантика, прагматика. Когнитивные особенности человеческого мышления и их влияние на развитие языков программирования

Задание Задание 2. Языки программирования в ретроспективе. Процедурное, объектно-ориентированное, логическое и функциональное программирование. Предметно-ориентированные языки. Языки вне классификации.

Задание Задание 3. Абстрактный и конкретный синтаксис. Статическая и динамическая семантика. Компиляция и интерпретация. Проекции Футамуры-Ершова.

Задание Задание 4. Генеративный и аналитический подходы к описанию синтаксиса. Формальные грамматики, иерархия Хомского.

Задание Задание 5. Регулярные языки и конечные автоматы. Применение регулярных выражений в народном хозяйстве (grep/sed/awk) и для лексического анализа (lex/flex). Отсутствие бесконтекстной лексики в реальных языках программирования.

Задание Задание 6. Контекстно-свободные грамматики. Нормальные формы Хомского и Грейбах. Алгоритмы Эрли и Кока-Янгера-Касами. Неконтекстосвободность реальных языков программирования.

Задание Задание 7. Нисходящий анализ. Возврат и заглядывание вперед. Класс языков LL(k). Рекурсивный спуск, магазинные автоматы, парсер-комбинаторы, PEG, "скаредный" разбор. GLL. Инструменты нисходящего анализа (Parsec, ANTLR и пр.)

Задание Задание 8. Восходящий анализ, классы LR(k) и LALR(k). GLR. Инструменты восходящего анализа (yacc/bison).

Задание Задание 9. Двухуровневые и атрибутные грамматики, вопросы применения на практике.

Задание Задание 10. Идентификация. Область видимости и область действия. Статическое и динамическое, раннее и позднее связывание.

Задание Задание 11. Энергичность и ленивость. Call-by-name, call-by-value, call-by-reference.

Задание Задание 12. Строгость, чистота, прозрачность по ссылкам.

Задание Задание 13. Языки с типами и языки без типов. Статическая и динамическая типизация.

Задание Задание 14. Номинальная и структурная эквивалентность типов. Простейшие конструкторы.

Задание Задание 15. Типы с кванторами и что они означают. Универсальные и экзистенциальные типы.

Задание Задание 16. Subtyping. Структурный и номинальный subtyping.

Задание Задание 17. Динамическая семантика языков. Операционная семантика большого и малого шага.

Задание Задание 18. Денотационный подход к описанию семантики.

Задание Задание 19. Аксиоматическая семантика. Верификация программ. Design by contract.

Задание Задание 20. Когерентность языков программирования и машинных архитектур. Языково-специфичные архитектуры, виртуальные машины и JIT-компиляция.

Задание Задание 21. Структура рабочей программы. Код, данные, библиотеки, поддержка времени исполнения.

Задание Задание 22. Задача генерации кода. Генерация кода путем интерпретации.

Задание Задание 23. Восходящее переписывание деревьев и динамическое программирование (BURS).

Задание Задание 24. Алгоритмы распределения регистров. Распределение регистров и раскраска графов.

Задание Задание 25. Параллелизм на уровне инструкций. Планирование инструкций.

Задание Задание 26. Анализ потока управления. Глубинное остовное дерево, доминирование, анализ циклической структуры программ. Сводимость. Устранение недостижимого кода, оптимальная линеаризация.

Задание Задание 27. Анализ потока данных. Полурешеточная модель. RD, LV, AE, UEU. Устраненние мертвого кода, экономия общих подвыражений, понижение силы операций, чистка циклов.