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

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

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

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

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

Входные данные - строка (текст программного кода).

Выходные данные - последовательность условных кодов, описывающих структуру разбираемого текста с указанием места положения и типа ("число", "идентификатор", "знак", "недопустимый символ" и т.д.). Например, для строки "int x=123;":
14 - ключевое слово - int - с 1 по 3 символ
11 - разделитель - (пробел) - с 4 по 4 символ
2 - идентификатор - x - с 5 по 5 символ
10 - оператор присваивания - = - с 6 по 6 символ
1 - целое без знака - 123 - с 7 по 9 символ
16 - конец оператора - ; - с 10 по 10 символ

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

Варианты работ на семестр представлены по ссылке ниже:

https://docs.google.com/document/d/1i5wUDDk1cUODPhXITiFYCvlq3aQ31ygRoAIhihoiezU/edit?usp=sharing

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

 

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

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

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

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

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

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

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