Теория формальных языков и компиляторов - лабораторные работы АВТ-113, АВТ-114 — Лабораторная работа №3 "Разработка синтаксического анализатора (парсера)"

Тема: Разработка синтаксического анализатора (парсера).

Цель работы: Изучить назначение синтаксического анализатора. Спроектировать алгоритм и выполнить программную реализацию парсера.

В соответствии с вариантом задания на курсовую работу необходимо:

  1. Разработать автоматную грамматику.
  2. Спроектировать граф конечного автомата (перейти от автоматной грамматики к конечному автомату).
  3. Выполнить программную реализацию алгоритма работы конечного автомата.
  4. Встроить разработанную программу в интерфейс текстового редактора, созданного на первой лабораторной работе.

 

Требования к программе:

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

Окно вывода результатов можно реализовать в виде таблицы (элемент управления DataGridView). Столбцы таблицы представляют собой неверный фрагмент и его местоположение.

Конечный автомат принимает последовательность символов или команд, управляющих его состоянием.

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

Можно задавать несколько независимых последовательностей команд. Каждая последовательность пишется с новой строки.

Программа выполняет анализ каждой строки символов, и выводит результаты в окне состояния.

Выходные данные – перечень состояний КА и результат обработки.

Если последовательность содержит ошибки, в окне сообщений выводится содержание ошибки и указывается команда, которая вызвала ошибку. Возможна выдача рекомендации по исправлению ошибки.

Рекомендуется ознакомиться с информацией о шаблоне проектирования "Состояние" и машинами состояния, например здесь:

"Состояние (шаблон проектирования)" на википедии​​​​​​

"Конечный автомат: теория и реализация" на TProger

"Простые стейт-машины на службе у разработчика" на Хабре

cTXYyS8naXU.jpg
QD7zQVx9Hyc.jpg
jK1tqx3cKLY.jpg

Студент, выполнивший задание на лабораторную работу, прикрепляет ссылку на git-репозиторий с кодом программы в системe DiSpace в контролирующее мероприятие “Лабораторная работа 3”. В README-файле должна быть отражена следующая информация: вариант задания, примеры допустимых строк, разработанная грамматика, классификация грамматики, граф конечного автомата, тестовые примеры.

 

Оценка за выполнение лабораторной работы выставляется, если:

  1. работа программы продемонстрирована преподавателю.
  2. в ходе разговора с преподавателем студент ответил на все вопросы.
  3. ссылка на репозиторий проекта прикреплена к контролирующему мероприятию (срок - 7-8 недели).

Реализация данного задания является альтернативой защите лабораторной работы. 

В соответствии с вариантом задания на курсовую работу необходимо:

  1. Cгенерировать код лексера и парсера для анализа грамматики с помощью программного обеспечения ANTLR, а затем внедрить и протестировать в программе, реализованной в рамках первой лабораторной работы.
  2. Дополнить README-файл грамматиками (1я - разработанная Вами и 2я - переписанная для ПО ANTLR) и тестовыми примерами (реализация с помощью ANTLR).

Более подробно про программное обеспечение ANTLR можно прочитать в разделе 7.1 учебного пособия “Теория языков программирования: проектирование и реализация”, а также в представленном отчете.

Для защиты лабораторной работы студенту необходимо ознакомиться с теоретическим материалом, представленным в лекциях 9-10 (составитель Достовалов Д.Н.), а также быть готовым к вопросам и задачам в конце лекций. Рекомендуется ознакомиться с главой 3 учебного пособия “Теория языков программирования: проектирование и реализация”.