108 lines
1.7 KiB
Markdown
108 lines
1.7 KiB
Markdown
# 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`
|