# turingAutomaton # a toy programming language for creating turing machines ## description ## `turingAutomaton` is a programming language created to test the Racket ecosystem. it features custom syntax and is able to run single tape turing machines. ## installation ## ``` git clone https://git.lain.church/tA/turingAutomaton cd turingAutomaton raco pkg install ``` ## syntax ## all files must begin with a ``` #lang turingAutomaton ``` followed by a definition of; ``` @ beginningState % blankSymbol ! acceptingState ``` (currently the accepting state is unimplemented) `states` are defined using the following syntax; ``` : stateName currentSymbol ~ newSymbol > newState currentSymbol ~ newSymbol < newState ``` where `<` and `>` denote moving the tape left and right, respectively comments are allowed: ``` ; either on their own line @ first ; or at the end of a line ``` ## sample program ## this machine will double a number passed to it ``` #lang turingAutomaton ; this is a comment! @ first % e ! F : first a ~ b > second c ~ c > fourth : second a ~ a > second c ~ c > second e ~ c < third : third a ~ a < third b ~ b > first c ~ c < third : fourth c ~ c > fourth e ~ e < fifth : fifth b ~ a < fifth c ~ a < fifth e ~ e > F ``` ## caveats ## currently very unfinished. all input is a single tape defined with `aaaaa` for now. there is no error checking until I learn how to do that. might get slow for very large tapes as the tape uses linked lists to operate. ## thanks ## mutce ckire to: * the racket team for creating an awesome language * Matthew Butterick for his book [Beautiful Racket](https://beautifulracket.com/) and the libraries within ## author ## `fi'e la ti'ei`