- •Модуль № 2.
- •1. Методы лексического, семантического и синтаксического анализа. Регулярные языки.
- •2. Методы лексического, семантического и синтаксического анализа. Контекстно-свободные языки.
- •3. Методы лексического, семантического и синтаксического анализа. Классы кс-языков и грамматик.
- •4. Компиляторы. Этапы трансляции. Общая схема работы транслятора.
- •5. Компиляторы. Понятие прохода. Многопроходные и однопроходные компиляторы.
- •6. Интерпретаторы. Особенности построения интерпретаторов.
- •Принципы построения лексических анализаторов
- •7. Трансляторы с языка ассемблера («ассемблеры»).
- •8. Лексические анализаторы (сканеры). Принципы построения сканеров. Назначение лексического анализатора.
- •Этапы семантического анализа
- •10. Генератор кода. Распределение памяти. Принципы распределения памяти. Дисплей памяти процедуры (функции).
- •Общие принципы генерации кода
- •12. Системы программирования. Понятие и структура системы программирования.
- •13. Системы программирования. Принципы функционирования систем программирования.
- •14. Системы программирования. Функции текстовых редакторов в системах программирования.
- •15. Системы программирования. Компоновщик. Назначение и функции компоновщика.
- •16. Системы программирования. Загрузчики. Функции загрузчика.
- •17. Системы программирования . Библиотеки подпрограмм как составная часть систем программирования.
- •18. Системы программирования. Разработка программ в архитектуре «клиент—сервер»
Этапы семантического анализа
Семантический анализатор выполняет следующие основные действия:
1) проверку соблюдения во входной программе семантических соглашений входного языка;
2) дополнение внутреннего представления программы в компиляторе операторами и действиями, неявно предусмотренными семантикой входного языка;
3) проверку элементарных семантических (смысловых) норм языков программирования, напрямую не связанных со входным языком.
Результаты выполнения синтаксического анализа могут быть представлены в одной из форм внутреннего представления программы в компиляторе. Как правило, с на этапе семантического анализа используются различные варианты синтаксических деревьев, построенных в результате синтаксического разбора, поскольку семантический анализатор интересует прежде всего структура исходной программы.
Семантический анализ обычно выполняется на двух этапах компиляции: на этапе синтаксического разбора и в начале этапа подготовки к генерации кода. В первом случае всякий раз по завершении анализа определенной синтаксической конструкции входного языка выполняется ее семантическая проверка на основе имеющихся в таблице идентификаторов данных (такими конструкциями, как правило, являются процедуры, функции и блоки операторов входного языка). Во втором случае, после завершения всей фазы синтаксического анализа, выполняется полный семантический анализ программы на основании данных в таблице идентификаторов (сюда попадает, например, поиск неописанных идентификаторов).
10. Генератор кода. Распределение памяти. Принципы распределения памяти. Дисплей памяти процедуры (функции).
Распределение памяти — это процесс, который ставит в соответствие лексическим единицам исходной программы адрес, размер и атрибуты области памяти, необходимой для этой лексической единицы.
Область памяти — это блок ячеек памяти, выделяемый для данных, каким-то образом объединенных логически. Логика таких объединений задается семантикой исходного языка.
Процесс распределения памяти в современных компиляторах, как правило, работает с относительными, а не абсолютными адресами ячеек памяти. Распределение памяти выполняется перед генерацией кода
результирующей программы, потому что его результаты должны быть использованы в процессе генерации кода.
Распределение памяти выполняется перед генерацией кода результирующей программы, потому что его результаты должны быть использованы в процессе генерации кода. Каждую область памяти можно классифицировать по двум параметрам: в зависимости от ее роли в результирующей программе и в зависимости от способа ее распределения в ходе выполнения результирующей программы.
По роли области памяти в результирующей программе она бывает глобальная
или локальная.
По способам распределения область памяти бывает статическая или динамическая.
Дисплей памяти процедуры (функции) — это область данных, доступных для об-
работки в этой процедуре (функции).
Как правило, дисплей памяти процедуры включает следующие составляющие:
1)глобальные данные (переменные и константы) всей программы;
2) формальные аргументы процедуры;
3) локальные данные (переменные и константы) данной процедуры.
Также в дисплей памяти часто включают адрес возврата.
Адрес возврата — это адрес того фрагмента кода результирующей программы,
куда должно быть передано управление после того, как завершится выполнение
вызванной процедуры или функции. Фактически, адрес возврата — это адрес ма-
шинной команды, следующей за командой обращения (вызова) к процедуре или
функции.
11. Генератор кода. Генерация кода. Методы генерации кода. Общие принципы генерации кода.
