| |||
|
|
Сафонов решил порассказывать про компиляторы. Билеты к экзамену Чудесное начинается с первого же вопроса: 1. Виды компиляторов. Фазы компиляции. Особенности реализации Java и компиляции для платформы .NET. Ну в общем - примерно понятно - Микрософт ему пробашлял, а Java - по старой памяти. Дальше - больше 2. Лексический анализ. Классы лексем. Утилита lex. 3. Обработка идентификаторов при лексическом анализе. Таблица идентификаторов, использование хеш-функций. 4. Синтаксический анализ. Метод рекурсивного спуска. Hейтрализация синтаксических ошибок. 5. Анализ снизу вверх (сдвиг-свертка). LR(0)-элементы. Операции closure(I) и goto(I,X). Канонический набор множеств LR(0)-элементов. SLR-анализ. 6. LR(1)-элементы. LR(1)-анализатор. Понятие о LALR(1)-анализе. Утилита yacc. 7. Семантический анализ. Атрибутные грамматики. Вычисление атрибутов. L-атрибутные грамматики. Атрибуты типов, переменных и выражений. 8. Обработка описаний и идентификация. Таблица описаний (NL). Эффективные алгоритмы идентификации (lookup). 9. Обработка обозначений типов. Таблица типов. Идентичность типов. Контроль типов. Особенно радует: 10.Формы внутреннего представления программы в компиляторах: обратная польская запись, триплеты, PCC-деревья. 11.Методы оптимизации программ. Понятие о смешанных вычислениях. Static Single Assignment (SSA). 12. Генерация кода: основные задачи. Особенности генерации кода для платформы Microsoft.NET. Общая схема организации компиляторов для платформы SPARC и роль генератора кода. 13. Представление типов и адресация переменных: простые типы, записи (структуры), записи с вариантами (объединения), массивы, указатели (управляемые и неуправляемые). 14. Процедуры, функции, методы, процедурные параметры, их представление. Организация стека для вызовов процедур. Статическая и динамическая цепочки. Дисплей. Адресация локальных данных. Адресные пары. Особенности реализации дисплея для RISC-архитектур. 15. Элементы архитектуры RISC и SPARC. Регистровые окна. Соглашение о связях (ABI) для платформы SPARC. ELF-файлы и их структура (секции). Генерация кода для платформы SPARC (пример). 16. Отладочная информация и ее роль в системе программирования. Генерация отладочной информации для Microsoft.NET и платформы SPARC. Структура STABS – отладочной информации для платформы SPARC. 17. Система поддержки выполнения (runtime) и ее функции. Связь runtime и операционной системы. 18. Обзор инструментального комплекса для разработки компиляторов Microsoft Phoenix |
||||||||||||||