Тема курсовой работы: **Разработка алгоритмического обеспечения и построение лексического анализатора компилятора** **Вариант 14:** Оператор switch и if языка С++. **Задание:** 1. Построить конечный автомат для моделирования работы этапа лексического анализа компилятора согласно своему варианту (описание автомата сделать с использованием формальной модели и таблицы переходов). 2. По конечному автомату построить соответствующую ему регулярную грамматику. Результат оформить в таблицу, отражающую соответствие между правилами конечного автомата и продукциями регулярной грамматики. 3. Разработать программу, моделирующую работу лексического анализатора, которая решает следующие задачи: выделяет из текста входной программы все лексемы, входящие в заданную языковую конструкцию (согласно варианту), удаляет лишние пробелы и комментарии из входной строки, подсчитывает количество строк в программе. Построение лексического анализатора выполняется на основе конечного автомата. В работе программы предусмотреть диагностику и локализацию лексически х ошибок. 4. Построить КС-грамматику, описывающую синтаксис инструкции языка программирования согласно своему варианту. Доказать возможность вывода заданной синтаксической конструкции с помощью КС-грамматики разработанной в п.3. Результатом работы синтаксического анализатора должно быть дерево вывода и соответствующее ему порождение рассматриваемой цепочки. Вид порождения (левостороннее или правостороннее) определяется по номеру варианта: четные номера в списке группы – левостороннее, нечетные номера в списке группы – правостороннее порождение. 5. Разработать алгоритмическое обеспечение для программы, моделирующей работу лексического анализатора. 5.1. Разработать блок-схему общего алгоритма работы программы. Сделать подробное описание всех функций пользователя. 5.2. Определить и обосновать сложность полученного алгоритма. 5.3. Построить подробную блок-схему работы оператора выбора на котором основана работа конечного автомата. 5.4. Выполнить словесное описание работы алгоритма на примере разбора тестовых входных последовательностей (лексически правильной и неправильной). **Примечание:** 1. Все конструкции должны предусматривать наличие следующих операторов: составного оператора, оператора присваивания, операторов сравнения, операторы ввода – вывода, разделителей операторов, арифметические и (или) логические операции. 2. Работа лексического анализатора должна моделироваться конечным автоматом, граф переходов которого должен быть представлен в пояснительной записке. 3. Выход лексического анализатора – дескрипторный код и псевдокод, таблица классов лексем, сообщения об ошибках: тип ошибки и в какой строке. ## Содержание РПЗ Введение 1. Описание предметной области 2. Основная часть 2.1. Постановка задачи (описание заданной конструкции на примере рабочего фрагмента программы) 2.2. Построение конечного автомата (определение, математическое, табличное, графическое) 2.3. Построение регулярной грамматики по конечному автомату (алгоритм, грамматика + команда КА в совмещенной таблице) 2.4. Построение КС-грамматики (определение КС-грамматики, грамматика, порождение и дерево вывода для заданной цепочки) 3. Логическое проектирование 3.1. Блок-схемы алгоритмов 3.2. Словесное описание алгоритмов 3.3. Оценка сложности алгоритма 4. Физическое проектирование 4.1. Выбор структур данных 4.2 Спецификация функций 5. Проектирование интерфейса 6. Тестирование программного обеспечения 7. Заключение 8. Список литературы Приложения: 1. Техническое задание. 2. Руководство пользователя. 3. Программный код.