Files
Markov/README.md

5.0 KiB
Raw Permalink Blame History

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