fivol / regex-parser

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

МФТИ 2 курс. Формальные языки. Практикум 1

Регулярные выражения


Задание:

В каждой задаче нужно реализовать на языке C++ или Python некоторый алго- ритм обработки регулярных выражений. В каждой задаче аргументами являются строка в алфавите {a, b, c, 1, ., +, ∗}, а также некоторые дополнительные параметры. Если задача предполагает ответ “да/нет”, то необходимо вывести yes в случае поло- жительного ответа и no — в случае отрицательного. В случае, если ответ является целым числом или словом, необходимо вывести это число или слово. В случае, если таких числа или слова не существует, необходимо вывести INF. В случае, если вход- ная строка не является корректным регулярным выражением в обратной польской записи, необходимо выдать сообщение error об ошибке. Дополнительные случаи оговорены непосредственно при формулировке задачи. В дальнейшем предполагается, что первым компонентом входа является регулярное выражение α в обратной польской записи, задающее язык L.

Вариант 9.

Даны α, буква x и натуральное число k. Вывести длину кратчайшего слова из языка L, содержащего подслово x^k

Тесты

  • ab+c.aba.∗.bac.+.+∗ b 2

    Ответ: 4

  • acb..bab.c.∗.ab.ba.+.+ ∗a. b 3

    Ответ: 7

Алгоритм решения.

  1. Считываение регулярного выражения в обратной польской нотации
  2. Создании структуры данных, отражающее это выражение
  3. Постоение детерминированного конечного автомата с эпсилон переходами
  4. Детерминизация конечного автомата
  5. Поиск в ДКА все подслов вида sym**power
  6. BFS от последней вершины подпоследовательности до ближайшей завершающей
  7. DFS от начальной до первой из последовательности
  8. Взятие минимума
  9. Ответ

Тесты

Запуск п проверка покрытия (95 %)

python3 -m pytest --cov=regexparser tests

Новичков Борис 924 группа

About


Languages

Language:Python 100.0%