A virtual turing machine (vtm) See http://cs.marlboro.edu/courses/spring2011/formal_languages/code/vtm/ for these files. This command line app is installed on cs, at /usr/local/bin/vtm . Install notes : The way that this thing runs is a bit awkward, mostly because the way shebang scripts and arguments interact, but also because its had several authors. VTM.pm is a perl module, which has the guts of the "Virtual Turing Machine". vtm.pl is a command line script which process arguments and then runs VTM.pm. vtm.c is a wrapper around vtm.pl, to create a vtm* executable Two of these (vtm.pl and vtm.c) need hard-coded full directory paths to do their business. So after downloading and unpacking the archive : (0) You'll need perl installed; type "which perl" at the command line to see if you have it. (1) Decide where you want these files - anywhere - and move them there. (The executable vtm* can be copied to e.g. /usr/local/bin/ later.) (2) Edit VTM.pl and vtm.c to reflect the locations of the files. (Search for "where VTM.pm lives" in vtm.pl; vtm.c is pretty clear.) (3) Compile the .c program with e.g. "gcc vtm.c -o vtm" (4) Copy the executable vtm to somewhere in your search PATH, e.g. /usr/local/bin/vtm Then once you've created a *.vtm text file, such as machine/even.vtm, with a first line that looks something like this : #!/usr/bin/env vtm -b_ -sEven -t10110010100 which means that _ is the blank character, Even is the start state, and 10110010100 is the starting tape (with the head at the left) make it executable with $ chmod +x even.vtm and run it with things like $ ./even.vtm # built-in arguments $ ./even.vtm -0 # don't show progress; just show last state $ ./even.vtm -t # ask user for starting tape $ ./even.vtm -t1011 # run with starting tape 1011 Shebang gotcha: One more problem: the /usr/bin/env first line seems to behave differently on different systems. In particular, some (like cs) don't seem to treat command line args on the shebang line nicely after /usr/bin/env . So here on cs, I've epxlicitly put /usr/local/bin/vtm as the shebang line. That means that these *.vtm files will work as is only if you put vtm in that same place. Otherwise, you'll need to adjust the first line of the .vtm's.