Skip to content
A simple C/C++ turing machine
C
Branch: master
Clone or download
Latest commit 02b085e Oct 17, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
README.md Update README.md Oct 17, 2019
turing_machine_main.c Rename turing_machine_main.cpp to turing_machine_main.c Sep 27, 2016

README.md

SimpleTuringMachine

This is a simple Turing-Machine implemented in C/C++. Its a simple singletape design so you can run simple programs. Each step will be printed in the console. The programming synta is easy and you can define further settings like:

  • Tapesize
  • Start-Rule
  • End-Rule
  • Tape default state
  • Tape startup state
  • Head start position

SYNTAX

  • tape_size,_SIZE_
  • start_rule,_RULE_ID_
  • tape_conf,_STATE_TO_SET,_POS_1_(,_POS_2_,...)\n

A rule is a set of IF STATE THEN WRITE statements = rule_set_entry Every rule_set_entry with the same id belongs to a ruleset. So for example :

  • IF HEAD READS 0 -> WRITE 1 ((optional) MOVE HEAD)
  • IF HEAD READS 1 -> WRITE 2 ((optional) MOVE HEAD) For this example, the rule_set has 2 entries.

These will look like this:

  • rule_set,0,0,1,0,0
  • rule_set,0,1,0,0,0

with head movement (move +1):

  • rule_set,0,0,1,0,1
  • rule_set,0,1,0,0,1

So the general syntax of a rule_set_entry look like this:

  • `rule_set,RULE_ID,IF_STATE,WRITE_THAT,MOVE_HEAD(-1,0,+1),NEXT_RULE

SAMPLE PROGRAM - ADD ONE TO A BIN-NUMBER

const char* turing_add_one_program = "tape_size,32\n"
"start_head_pos,3\n"
"start_rule,0\n"
"tape_conf,1,1,2,3\n" //zelle 1,2,3 auf 1 setzten//RULESET 1 df
"rule_set,0,0,1,-1,1,1\n" //<- START RULE
"rule_set,0,1,0,-1,0,0\n"
"rule_set,0,-1,1,0,2,-1\n"//RULESET 2
"rule_set,1,0,0,-1,0,1\n"
"rule_set,1,1,1,-1,0,1\n"
"rule_set,1,-1,-1,1,2,0\n";//eig kommt noch ein zweites aber durch die 2 wird direkt abgebrochen 
You can’t perform that action at this time.