RarityFan437/TuringMachine
Folders and files
| Name | Name | Last commit date | ||
|---|---|---|---|---|
Repository files navigation
Этот язык является виртуальным представлением машины тьюринга с моим доплнением ввиде меток.
Документация:
Можно начать с того что для запуска программы нужна сама машина с правилами - ваш код и лента которую вы загружаете.
У машины есть курсор который идет по этой ленте и подчиняется прописанным вами правилам.
Правила состоят из функций, а функция состоит из трёх триплетов:
[Имя функции] : [первый триплет], [второй триплет], [третий триплет];
Триплет - это набор команд которые выполняет машина.
Выбор какой именно триплет будет использовать машина сейчас происходит так:
Если курсор сейчас расположен на ячейке ленты значение которой 0 то выполняется первый триплет
Если курсор сейчас расположен на ячейке ленты значение которой 1 то выполняется второй триплет
Если курсор сейчас расположен на ячейке ленты значение которой х то выполняется третий триплет
Теперь рассмотрим триплет поближе
[значение] [переход!пометить] [сдвиг]
Значение: это то значение которое присвоит машина ячейке на которой сейчас находится, можно поставить ! и тогда машина присвоит текущей ячейке значение той ячейки, на которой стоит метка текущей функции.
Переход: по правилам какой функции будет работать машина после завершения текущей функции, также чтобы не менять функцию можно использовать @, если поставить # то программа завершится,
если поставить § то программа завершится и выведет ленту преобразовав её в буквы, при этом кодировать она будет числа разделенные х,
то есть если лента на момент вызова этой функции это 1011x1100x1101, то программа закончится и выведет 'abc', кодировку см. в приложении
Пометить: это необязательно, но это присваивает текущей ячейке метку функции, которая указана
сдвиг: куда сдвинется курсор вправо:'>' влево:'<' никуда:'~'
Подробнее про метки:
когда машина находится на меченой ячейке и метка принадлежит текущей функции, то можно изменить поведение текущей функции с помощью "определения правил для меченой ячейки", это делается так:
[Имя функции] : [первый триплет], [второй триплет], [третий триплет] -эти правила выполняются если эта функция текущая
*[Имя функции] : [первый триплет], [второй триплет], [третий триплет] - эти правила выполняются если эта функция текущая и курсор находится на ячейке помеченной для этой функции
коментарии в коде можно оставлять в ковычках: "коментарий"
Пример программы:
"программа начинается с функции a"
a:
0 @ >, "допустим программа видит 0, тогда по правилам этого триплета она поставит текущей ячейке значение 0, останется на этой же функции и сдвинется на одну ячейку вправо"
1 @ >, "допустим программа видит 1, тогда по правилам этого триплета она поставит текущей ячейке значение 1, останется на этой же функции и сдвинется на одну ячейку вправо"
x b <; "допустим программа видит x, тогда по правилам этого триплета она поставит текущей ячейке значение x, перейдет к функции b и сдвинется на одну ячейку влево"
"после того как мы перешли к этой функции, машина теперь работает по этим правилам"
b:
1 # ~, "допустим программа видит 0, тогда по правилам этого триплета она поставит текущей ячейке значение 1 и закончит программу"
0 @ <, "допустим программа видит 1, тогда по правилам этого триплета она поставит текущей ячейке значение 0, останется на этой же функции и сдвинется на одну ячейку влево"
1 # ~; "допустим программа видит x, тогда по правилам этого триплета она поставит текущей ячейке значение 1 и закончит программу"
"Эта программа делает двоичный инкремент"
Использование:
python main.py - запуск программы для работы
Приложение:
char_table = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*=+-_?/;:.,<>~ '
Обнова 1.4:
-Изменена система работы с интерпретатором
-Добавлен новый параметр в config, теперь можно изменять поле зрения (будет показываться не вся лента при запуске а только часть), благодаря этому теперь если лента шире чем консоль, то не будет визуального бага
-Изменён char_table
-Добавлено новое значение: "?", если его поставить присвоит ячейке случайно значение: 0, 1 или х