- •Цель лабораторных работ:
- •Лабораторная работа № 1 разработка грамматики заданного языка.
- •Краткие теоретические сведения
- •Формы записи грамматики
- •Порядок выполнения работы
- •Требования к оформлению отчета
- •Основные контрольные вопросы
- •Лабораторная работа № 2 работа с таблицей символов Проектирование лексического анализатора
- •Краткие теоретические сведения
- •Требования к оформлению отчета
- •Основные контрольные вопросы
- •Лабораторная работа № 3 Синтаксический и семантический анализ. Построение простейшего дерева вывода
- •Краткие теоретические сведения
- •Порядок выполнения работы
- •Требования к оформлению отчета
- •Основные контрольные вопросы
- •Лабораторная работа № 4 Генерация и оптимизация объектного кода
- •Краткие теоретические сведения
- •1 Алгоритм генерации объектного кода по дереву вывода
- •Построение ассемблерного кода по дереву вывода
- •Построение списка триад по дереву вывода.
- •Оптимизация объектного кода методом свертки
- •Оптимизация объектного кода методом исключения лишних операций
- •Общий алгоритм генерации и оптимизации объектного кода
- •Порядок выполнения работы
- •Требования к оформлению отчета
- •Основные контрольные вопросы
- •Варианты заданий
- •Рекомендуемая литература
Порядок выполнения работы
Получить вариант задания у преподавателя.
Построить матрицу предшествования для заданной грамматики.
Выполнить разбор простейшего примера вручную по правилам заданной грамматики.
Подготовить и защитить отчет.
Написать и отладить программу на ЭВМ.
Сдать работающую программу преподавателю.
Требования к оформлению отчета
Отчет должен содержать следующие разделы:
Задание по лабораторной работе.
Краткое изложение цели работы.
Запись заданной грамматики входного языка в форме Бэкуса-Наура.
Множества крайних правых и крайних левых символов с указанием шагов построения.
Множества крайних правых и крайних левых терминальных символов.
Заполненную матрицу предшествования для грамматики.
Пример выполнения разбора простейшего предложения (по выбору).
Текст программы (оформляется после выполнения программы на ЭВМ).
Основные контрольные вопросы
Какую роль выполняет синтаксический анализ в процессе компиляции ?
Какие типы грамматик существуют ? Как связаны типы грамматик и языков ?
Дайте определение приведенной грамматики, грамматики в нормальной форме Хомского.
Поясните правила построения дерева вывода грамматики.
Что такое грамматики простого предшествования ?
Как вычисляются отношения предшествования для грамматик простого предшествования ?
Что такое грамматика операторного предшествования ?
Как вычисляются отношения для грамматик операторного предшествования ?
Расскажите о задаче разбора. Что такое распознаватель языка ?
Расскажите об общих принципах работы распознавателя языка.
Что такое перенос, свертка. Для чего необходим алгоритм «перенос-свертка» ?
Как работает алгоритм «перенос-свертка» (объясните на своем примере) ?
Лабораторная работа № 4 Генерация и оптимизация объектного кода
Цель работы: изучение основных принципов генерации компилятором объектного кода для линейного участка программы, ознакомление с методами оптимизации результирующего объектного кода с помощью свертки и исключения лишних операций.
Для выполнения лабораторной работы требуется написать программу, которая на основании дерева синтаксического разбора порождает объектный код и выполняет затем его оптимизацию. В качестве исходного дерева синтаксического разбора рекомендуется взять дерево, которое порождает программа, построенная по заданию предыдущей лабораторной работы.
Возможны два варианта: 1 – программа генерирует объектный код; 2 – программа реализует работу интерпретатора.
Программу рекомендуется построить из трех основных частей: первая часть - порождение дерева синтаксического разбора (по результатам лабораторной работы №3), вторая часть - реализация алгоритма порождения объектного кода по дереву разбора, и третья часть - оптимизация порожденного объектного кода. Результатам работы должна быть построенная на основании заданного предложения грамматики программа на объектном языке. В качестве объектного языка предлагается взять язык ассемблера для процессоров типа Intel 80x86 в реальном режиме (возможен выбор другого объектного языка по согласованию с преподавателем). Все встречающиеся в исходной программе идентификаторы считать простыми скалярными переменными, не требующими выполнения преобразования типов. Ограничения на длину идентификаторов и констант соответствуют требованиям предыдущей лабораторной работы.
Порождение дерева синтаксического разбора (по результатам лабораторной работы №3) и зпись этого дерева в виде ПОЛИЗ, далее вычисление результата по обратной польской записи.