Разработка распознавателя модельного языка программирования
Автор: Alex Minakov • Декабрь 26, 2023 • Курсовая работа • 3,274 Слов (14 Страниц) • 116 Просмотры
1.1. ПОСТАНОВКА ЗАДАЧИ
Цель
Целью данной работы является:
- освоение основных методов разработки распознавателей формальных языков на примере модельного языка программирования;
- приобретение практических навыков написания транслятора языка программирования; закрепление практических навыков самостоятельного решения инженерных задач, умения пользоваться справочной литературой и технической документацией.
Требования
Разработать распознаватель модельного языка программирования согласно заданной формальной грамматике.
Распознаватель это специальных алгоритм, позволяющий вынести решение и принадлежности символов некоторому языку.
Распознаватель можно схематично представить в виде совокупности входной ленты, читающей головки, которая указывает на очередной символ на ленте, устройства управления (УУ) и дополнительной памяти (стек).
Конфигурацией распознавателя является:
- состояние УУ; - содержимое входной ленты;
- положение читающей головки;
- содержимое дополнительной памяти (стека).
Трансляция исходного текста программы происходит в несколько этапов.
Основными этапами являются следующие:
- лексический анализ;
- синтаксический анализ;
- семантический анализ;
- генерация целевого кода.
Лексический анализ является наиболее простым этапом и выполняется с помощью регулярной грамматики. Регулярным грамматикам соответствуют конечные автоматы, следовательно, разработка и написание программы лексического анализатора эквивалентна разработке конечного автомата и его диаграммы состояний (ДС).
Синтаксический анализатор строится на базе контекстно-свободных (КС) грамматик. Задача синтаксического анализатора – провести разбор программы и сопоставить его с формальным описание языка.
Семантический анализ позволяет учесть особенности языка программирования, которые не могут быть описаны правилами КС-грамматики. К таким особенностям относятся:
- обработка описаний;
- анализ выражений;
- проверка правильности операторов.
Обработки описаний помогают убедиться, что каждая переменная в программе описана и при этом только один раз.
Анализ выражений заключается в том, чтобы проверить описаны ли переменные, участвующие в выражении, и соответствуют ли типы операндов друг другу и типу операции.
Этапы синтаксического и семантического анализа обычно можно объединить.
Порядок выполнения
- В соответствии с номером варианта составить описание модельного языка программирования в виде правил вывода формальной грамматики;
- Составить таблицу лексем и нарисовать диаграмму состояний для распознавания и формирования лексем языка;
- Разработать процедуру лексического анализа исходного текста программы на языке высокого уровня;
- Разработать процедуру синтаксического анализа исходного текста методом рекурсивного спуска на языке высокого уровня;
- Построить программный продукт, читающий текст программы, написанной на модельном языке, в виде консольного приложения;
- Протестировать работу программного продукта с помощи серии тестов, демонстрирующих все основные особенности модельного языка программирования, включая возможные лексические и синтаксические ошибки.
2. ГРАММАТИКА ЯЗЫКА
Согласно индивидуальному варианту задания на курсовую работу грамматика языка включает следующие синтаксические конструкции:
- <операции_группы_отношения>::= <> | = | < | <= | > | >=
- <операции_группы_сложения>::= + | - | or
- <операции_группы_умножения>::= * | / | and
- <унарная_операция>::= not
- <программа>::= program var <описание> begin <оператор>{;
<оператор>} end.
- <описание>::= {<идентификатор> {, <идентификатор> } : <тип>;}
7. <тип>::= % | ! | $
- <оператор>::= <составной>|<присваивания> |<условный> |<цикла>
|<ввода> |<вывода>
- <составной>::= «[» <оператор> { ( : | перевод строки) <оператор> }«]»
10. <присваивания>::= <идентификатор> as <выражение>
...