Skip to content

albortholus/MT

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 

Repository files navigation

1. Запуск скрипта
1.1 Unix
Запуск скрипта лучше осуществлять следующей командой
приглашение> perl MT.pl <filename>
, где
<filename> - имя файла с программой машины Тьюринга.

1.2 Windows
Предварительно необходимо установить любой интерпретатор perl, например, Strawberry Perl. Далее полностью аналогично - открываете командный инетрпретатор (cmd) и в нем вводите команду
приглашение> perl MT.pl <filename>
, где
<filename> - имя файла с программой машины Тьюринга.

1.3 Пример строки вызова:
perl MP.pl x.txt

1.4 Дополнительные ключи
-s, --short - Сокращенный вывод. Отключается вывод всех промежуточных шагов - выводится только начальное и конечное состояние.
-v --verbose - Расширенный вывод. Отображаются все состояния, все положения каретки.
-p --pedantic - Педантичный (рекомендованный режим) - без добавления забытого пробела в начале, с проверкой останоки не в середине ответа.
-L<число> --latency=<число> - <число> - задержка отображения в микросекундах (1e-6 секунды). Позволяет успкорить/затормозить работу интерпертатора.
-l --locating - включает режим установки начальной позиции каретки. После ввода ленты предлагается ввести положение в формате '......^' (как в тестах tu4)
-i --step - пошаговое выполнение. После каждого вывода состояния предлагается ввести Enter чтобы продолжить работу.
--default-state=<состояние> - начальное состояние по умолчанию. При каждом запуске используется данное состояние (не предлагается каждый раз вводить его вручную)
--version - выводит номер версии и выходит
-h, --help - отображение справки.

1.5 Как прогнать тесты по аналогии с turun
perl MT.pl copy.tu -l --def=00 < copy.tst
!!!см. п.4!!!


2. Интерактивная работа
После запуска интерпретатора (в случае корректности программы) пользователю
1) предлагается ввести начальное состояние
2) предлагается ввести начальную строку записанную на ленте (необходимо помнить о необходимости писать пробел в начале строки)
3) пердлагается ввести положение каретки, если включен соответствующий режим. В противном случае положение каретки определяется как первый пробел за входными данными.
После этого программа выполняется, выводя все промежуточные шаги работы и окончательный результат. В конце выводится сообщение об успешности/неуспешности выполнения.
Далее все действия повторяются в цикле. Для остановки работы системы необходимо ввести пустые начальное состояние и входную строку.

3. Написание программы
Программа пишется для машины Тьюринга в четверках. На каждой строке располагается одна команда. Команда имеет следующий формат:
<q1>,<s1>,<s2>,<q2>
, где
<q1> - текущее состояние (любая строка без пробелов)
<s1> - знак на ленте
<s2> - знак для записи или действие (<, >)
<q2> - новое состояние.
Вместо знака <s1> может быть написана звездочка (*), которая означает, что правило применимо для любого знака на ленте. На месте <q2> может быть записано спецсостояние '##', означающее остановку работы машины Тьюринга. Также машина останавливается, встречая команду вида q,a,a,q (команда, не меняющая состояний МТ).

Если строка начинается со знака '#', то она игнорируется (считается комментарием). Пустые строки игнорируются.

4. Скрипт для прогона тестов
Для удобства прогона тестов при протоколировании создан скрипт MTrun.pl.
Формат тестов для него полтностью аналогичен формату тестов для turun (2 строки, указание положения каретки).
Для программы (например, lab5.tu) создается тестовый файл, например lab5.tst. В нем прописываются все тесты. Далее можно запускать прогон следующей командой:
perl MTrun.pl lab5.tu lab5.tst

Если программа выполняется долго (печатает много промежуточных состояний для больших тестов), то можно выделить длинные тесты в отдельный файл, например lab5.tst.long.
Тогда если запустить прогон следующим образом:
perl MTrun.pl lab5.tu lab5.tst lab5.tst.long
то  для тестов из второго файла выведутся только начальные и конечные состояния.

4.1 Пример тестов для машины копирования троичного числа
> copy.tst
 1
..^
 0
..^
 2
..^
 012
....^
> copy.tst.long
 012021102120210201
...................^
 001122000111222
................^
 00000
......^

About

Perl Turing Machine Interpretator

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published