- •Лабораторные работы
- •1. Порядок выполнения работы.
- •2. Содержание отчета.
- •Лабораторная работа № 1. Лабораторная работа № 1.1. Создание каркаса транслятора.
- •Лабораторная работа № 2 Лабораторная работа № 1.2. Разбор исходного файла.
- •Лабораторная работа № 3.
- •1. Порядок выполнения работы.
- •2. Содержание отчета.
- •Лабораторная работа № 5. Лабораторная работа №3.1. Синтаксический анализатор.
- •Лабораторная работа № 6. Лабораторная работа №3.2. Синтаксический анализатор.
- •Лабораторная работа № 7. Лабораторная работа №3.3. Синтаксический анализатор.
- •1. Порядок выполнения работы.
- •2. Содержание отчета.
- •Лабораторная работа №5. Разработка генератора кода
- •1. Порядок выполнения работы.
- •2. Теоретическая часть
- •Практическая часть.
- •Лабораторная работа № 9. Генератор кода 5.2.
- •4. Содержание отчета
- •5. Содержание отчета
- •Лабораторная работа № 11. Синтаксический анализатор.
- •Лабораторная работа №12. Генератор кода 5.3.
- •Варианты к лабораторным работам
- •Вариант 1
- •Вариант 2
- •Вариант 3
- •Вариант 4
- •Вариант 5
- •Вариант 6
- •Вариант 7
- •Вариант 8
- •Вариант 9
- •Вариант 10
- •Вариант 11
- •Вариант 12
- •Вариант 13
- •Вариант 14
- •Вариант 15
- •Вариант 16
- •Курсовой проект
- •Оформление
- •Пустые строки
- •Пробелы в строке
- •Локальные переменные
- •Комментарии
- •Инструкции (statements)
- •Оформление if, if-else, if-else if-else
- •Оформление for, foreach
- •Оформление while, do-while
- •Оформление switch
- •Оформление try-catch
- •Указания по оформлению псевдокода
1. Порядок выполнения работы.
Создать Windows-приложение со следующими функциями:
чтение и запись текстового файла с меню, панелью инструментов;
разбиение текста на отдельные слова и символы и вывод их в файла;
замена слов на русском языке переводом на иностранный.
выделение лексем, вывод их в файла;
создание таблицы, номера строк, содержащей лексемы, их классы, вывод этой таблицы в файл;
выполнить п.1.1.3-4 для оператора присваивания для оператора присваивания при условии, что <Идент> ::= <Буква> (идентификатор состоит из одной буквы) <Const> ::= <Цифра> (Const состоит из одной цифры).
выполнить п.1.1.3-4 для оператора присваивания для оператора присваивания при условии, что идентификатор состоит более, чем из одной буквы и Const состоит более, чем из одной цифры.
выполнить п.1.1.3-4 для реализуемого языка, согласно своего варианта.
Ознакомиться с разделом 5 пособия [1] и выделить в отчет определения следующих понятий:
номер строки исходного текста транслируемой программы,
лексема,
классы лексем,
признаки классов лексем,
таблица, содержащая лексемы,
форма Бэкуса–Наура (БНФ).
По варианту задания определить, какие классы лексем будут в вашем языке.
Составить контрольные примеры на реализуемом языке. Хотя бы один пример должен проверять поведение вашей программы при наличии недопустимых символов в транслируемом файле.
Запрограммировать и отладить модуль сканирования. Выполнить тестирование на контрольных примерах. Результатом работы должна быть таблица, содержащая лексемы и признаки их классов. Необходимо включить в результирующий файл информацию о номерах строк исходного текста транслируемой программы.
Оформить отчет.
2. Содержание отчета.
2.1. Название работы и ее исполнители.
2.2. Цель работы.
2.3. БНФ реализуемого языка.
2.4. Список классов лексем реализуемого языка.
2.5. Описание грамматики реализуемого языка, используя общие обозначения нетерминалов и терминалов.
2.6. Краткое (по 2-3 предложения) описание процедур (функций), из которых состоит программа лексического анализа. Лучший вариант – включение описаний в текст программы в виде комментариев.
2.7. Листинг программы.
2.8. Распечатки контрольных примеров и результатов их выполнения.
2.9. Выводы по проделанной работе.
Лабораторная работа № 1. Лабораторная работа № 1.1. Создание каркаса транслятора.
Как правило, транслятор состоит из основных функциональных блоков, к которым относятся парсер файлов исходного языка, таблица идентификаторов, лексический анализатор, синтаксический анализатор и генератор кода.
Эти функциональные блоки стоит реализовать в отдельном проекте – библиотеке классов, которая будет предоставлять функции трансляции исходного языка. Чтобы создать библиотеку классов, необходимо воспользоваться пунктом меню MS Visual Studio «File» -> «New» -> «Project». В открывшемся диалоге выбираем тип проекта «Visual C#», шаблон проекта – «Class Library». В текстовых полях ниже задаем адекватное наименование для проекта и решения – например, Translation (здесь и далее имена проектов, классов, их полей и методов выбираются по своему усмотрению).
После нажатия кнопки «OK» среда разработки создаст библиотеку классов и добавит в нее один класс с оригинальным именем «Class1». Теперь стоит начать поочередно добавлять в наш проект классы: парсер файлов – Reader.cs, таблица идентификаторов – NameTable.cs, лексический анализатор – LexicalAnalyzer.cs, синтаксический анализатор – SyntaxAnalyzer.cs, генератор кода – CodeGenerator.cs (все классы объявляются с модификаторами public static). Вышеупомянутый Class1 можно либо удалить, либо переименовать.
Если на данном этапе все сделано правильно, то при запуске проекта (Ctrl + F5) среда разработки выдаст сообщение об ошибке – библиотека классов не относится к исполняемым типам проектов.
Для тестирования нашей библиотеки создадим в нашем решении еще один проект – GUI-приложение (в обозревателе решений щелкаем правой кнопкой по решению – «Add» -> «New Project», тип проекта «Visual C#», шаблон проекта – «Windows Forms Application», наименование - TestForm). Сделаем этот проект запускаемым по умолчанию (контекстное меню проекта -> «Set As StartUp Project») и добавим в него ссылку на нашу библиотеку. Для этого в контекстном меню проекта нужно выбрать пункт «Add Reference». В открывшемся диалоге на вкладке «Projects» выбираем нашу библиотеку и жмем «OK». После этого в коде формы подключаем пространство имен нашей библиотеки, используя директиву using.
using Translation;
Далее необходимо спроектировать интерфейс нашего приложения. В ходе каждой из лабораторных работ мы будем выполнять одни и те же типовые действия: открывать файл исходного языка, преобразовывать его с возможностью сохранения результата в файл. Исходя из этого, разумно предложить следующий вариант интерфейса:
Для отображения текстового содержимого на форме используются элементы управления RichTextBox. В них выводится соответственно содержимое исходного файла, результат обработки и сообщения хода обработки (например, ошибки синтаксиса при синтаксическом анализе). В меню необходимо реализовать, как минимум, три пункта: «Файл» -> «Открыть» (для открытия файла на исходном языке), «Файл» -> «Сохранить» (для сохранения результата), «Компиляция» -> «Выполнить» (для запуска преобразования).
