Markov

Использование

Это очень маленький проект, который нужен для одной единственной лабы.

Для работы он принимает rulebook файл (расширение .rb, хотя так как это текстовые файлы, расширение у них может быть любое), в котором содержатся возможные преобразования над последовательностями символов. Далее можно перейти в интерактивный режим или скормить ввод напрямую.

Чтобы запустить приложение в интерактивном режиме, достаточно просто отдать ему книгу правил:

poetry run markov.py <rulebook>

Можно и напрямую передать ввод:

poetry run markov.py <rulebook> -c <string>

Для получения многословного вывода (который можно использовать для сдачи лабораторной работы), предусмотрена опция -v:

poetry run markov.py <rulebook> -c <string> -v

Стоит учесть, что опция -v без использования -c не учитывается. Если вы начнете с этим флагом в интерактивном режиме, он будет проигнорирован. В интерактивном режиме другой способ получить многословный вывод.

Описание интерактивного режима

Интерактивный режим позволяет вводить последовательности символов, к которым будут применяться заданные вами правила. Тем не менее некоторые последовательности символов зарезервированы:

  • h: - выводит help.
  • r: - выводит список правил из используемой в этой сессии книги.
  • v: - включает многословный режим для следующей последовательности символов. Она не игнорирует ввод после двоеточия, поэтому пользоваться ей следует так: v: ||. Заметим также, что пробелы перед символами и после них игнорируются, также как и табы.
  • e: - мгновенно завершает работу приложения. Также его можно завершить отправив на вход EOF.
  • : - используется, если требуемая для алгоритма последовательность символов совпадает с зарезервированной. Все, что написано после двоеточия воспринимается без изменений (Только обрезаются пробелы). Только отбрасывается символ двоеточия>

NOTE: Как правило во всех случаях пробелы будут обрезаться, поскольку синтаксис книг правил не подразумевает возможность создавать операции над ними. Поэтому если в середине последовательности встретится пробел, он там навсегда и останется. Впрочем может вам это и нужно.

Синтаксис книг правил

На каждой отдельной строке идет описания нового правила. Каждое правило описывает преобразования одной цепочки символов в другую цепочку символов. Для указания перехода используется символ -> или, если преобразование завершающее, ->|. Также есть зарезервирвованный символ пустого множества: $

Есть возможность оставлять комментарии через символ //, по аналогии с C.

Пример:

ss -> +s // Комментарий
s ->| $ // Блокирующая операция, переводящая s в пустое множество

Замечание по поводу синатксических ошибок

Обработка синтаксических огрехов у меня не предусмотрена, поэтому если где-то произошла описка, то в лучшем случае программа свалится от необработанного исключения, в худшем будет undefined behaviour

Description
Попытка реализации парсера грамматик маркова для выполнения лабораторной работы по дискретной математике
Readme 48 KiB
Languages
Python 100%