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

Filters

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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