Skip to content

RarityFan437/TuringMachine

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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 или х

About

Turing machine programming language

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages