Лабораторная работа №1

ЛАБОРАТОРНЫЕ РАБОТЫ

ЛАБОРАТОРНАЯ РАБОТА №1. Создание каркаса транслятора.

ЛАБОРАТОРНАЯ РАБОТА №2. Разбор исходного файла. Методы статического класса System.IO.File для работы с файлами. Чтение, запись текстового файла. Класс System.IO.StreamReader для реализации потокового чтения из файла.

ЛАБОРАТОРНАЯ РАБОТА №3. Лексический анализатор. Общие принципы лексического разбора, разбор ключевых слов, идентификаторов и числовых констант.

ЛАБОРАТОРНАЯ РАБОТА №4. Таблица имен. Реализация элемента таблицы. Общие принципы хранения идентификаторов внутри таблицы, класс System.Collections.Generic.LinkedList<T>. Реализация методов регистрации идентификатора, получения идентификатора из таблицы по имени.

ЛАБОРАТОРНАЯ РАБОТА №5. Синтаксический анализатор 1. Общая схема разбора. Реализация разбора секции объявления переменных исходного языка с сохранением идентификаторов в таблице имен.

ЛАБОРАТОРНАЯ РАБОТА №6. Синтаксический анализатор 2. Общая схема разбора. Разбор инструкции присваивания.

ЛАБОРАТОРНАЯ РАБОТА №7. Синтаксический анализатор 3. Схема разбора сложных выражений – разбиение на подвыражения и рекурсивный спуск.

ЛАБОРАТОРНАЯ РАБОТА №8. Генератор кода 1. Генерирование общих фрагментов кода, объявления переменных.

ЛАБОРАТОРНАЯ РАБОТА №9. Генератор кода 2. Генерация кода для простейших арифметических операций, работа с ассемблерным стеком. Генерация загрузки и сохранения переменных. Разбор и генерация оператора печати

ЛАБОРАТОРНАЯ РАБОТА №10. Тестирование приложения.

ЛАБОРАТОРНАЯ РАБОТА №11. Синтаксический анализатор 5. Схема разбора инструкций ветвления и цикла.

ЛАБОРАТОРНАЯ РАБОТА №12. Генератор кода 3. Общие принципы организации условного перехода в ассемблере. Инструкция cmp. Создание меток перехода, генерирование условных переходов для реализации инструкций while или if.

Соглашения по оформлению кода

Указания по оформлению псевдокода

ЛИТЕРАТУРА


Основной целью лабораторных работ по разработке трансляторов является получение практических навыков, позволяющих разрабатывать трансляторы языков программирования. Отличительной особенностью данных лабораторных работ является наличие одного сквозного задания (формального описания реализуемого языка) для всех работ. Заданные для реализации языки подобны очень простым языкам программирования. В каждой работе студенты разрабатывают программу, выполняющую соответствующий этап трансляции с реализуемого языка. Для написания трансляторов рекомендуется использовать язык программирования С# или VB.

Перед тем, как приступить к выполнению лабораторных работ, необходимо изучить первые 4 раздела пособия [1].

В лабораторных работах предлагается трехпроходная организация компилятора. Блок сканирования считывает исходную программу и представляет ее в форме файла лексем (Лабораторная работа №1). Синтаксический анализатор читает этот файл, разбирает (Лабораторная работа №2) и выдает новое представление программы в постфиксной форме (Лабораторная работа №3). Наконец, этот файл считывается генератором кода, который создает объектный код программы (Лабораторная работа №4).

При написании учебного транслятора важно то, что реализующие каждый проход отдельные программы легче отлаживать, чем одну большую. Во 2-й и 3-й лабораторных работах пишется одна и та же программа. В результате выполнения лабораторной работы №2 должна быть написана программа, выполняющая синтаксический анализ (включая выявление и диагностику всех синтаксических ошибок). В лабораторной работе №3 в программу добавляются функции формирования постфиксной записи.


ЛАБОРАТОРНАЯ РАБОТА №1.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: