Tree @master (Download .tar.gz)
Turmac
Version 0.3
Turmac is a file format for Turing machine descriptions. It aims to be somewhat self-describing and amenable to processing with common tools. To that end, it is defined as a subset of CSV files. In short, Turmac files look like this:
in state,if the symbol is,write the symbol,move the head,go to state
S0,_,1,R,S0
S0,1,1,L,H
Turmac also defines a CSV format for TM traces (which are lists of configurations (which consist of the tape contents and current finite state)), which are useful for describing the full run of a Turing machine. The output of a Turing machine can also be described by a trace showing one (final) step. Traces look like:
at step,in state,at position,the cell contains,with heads present
1,S0,0,A,
2,S0,1,Z,1
For a fuller definition of the Turmac file formats, see the document
Definition-of-Turmac.md in the doc/ directory.
Quick start
The reference implementation, turmac, is written in Haskell. It may be either
compiled with GHC, or interpreted with Hugs. With one of these installed,
- clone this repository
- run
./build.shin the root directory of the repository - the executable is
./bin/turmac; you may want to put thebindirectory on your executable search path ($PATHenv var in Linux et al.)
turmac can do the following things:
- Simulate a Turing machine, given its Turmac description.
- Compile a Turmac description to a Python program that simulates the TM.
- Round-trip (parse and then dump out) a Turmac description.
- Normalize the state IDs and symbol labels in a Turmac description.
- Create a Turmac description that writes a given string to the tape.
TODO
- Define comments in language (6th column) and tests for this.
- Implement
--max-stepsfor simulator. - Implement harness for running the code produced by a compiler and
comparing it to the simulation run by
turmac. - (low) Write multiplexed (GHC/Hugs) test appliances.
- (low) Ability to concatenate two Turing machines.
History
0.3
- Defined the execution trace format, and updated the implementation (both the simulator and the Python backend) to dump traces, and final configurations, in this format.
- Implemented
intercalate, allowingturmacto run under Hugs. - Tests are run under all implementations that are available.
- Kondey backend was removed on the grounds that, as an obscure and special-purpose intermediate language, it is out of scope for this general-purpose tool. It was moved to the Burro repo.
0.2
- Added beginnings of a Kondey backend for compiler (still WIP).
- Fixed
gentapesubcommand. It now takes a comma-separated list of symbols to write to the tape, and honours (and requires) the--backendoption. - Added
--normalizeflag, which works with all subcommands.
0.1
Initial release.
Commit History
@master
git clone https://git.catseye.tc/Turmac/
- Fix detail in spec. Chris Pressey 7 days ago
- Put intercalate in Language.Turmac.Utils, and update README. Chris Pressey 7 days ago
- Have trace produce output in defined execution trace format. Chris Pressey 8 days ago
- Add headers when outputting execution traces. Chris Pressey 8 days ago
- Describe the execution trace format. Chris Pressey 8 days ago
- Generated Python outputs final configuration in defined format. Chris Pressey 9 days ago
- Bring Python backend closer to what will be needed. Chris Pressey 9 days ago
- Begin defining and outputting a format for configurations as well. Chris Pressey 9 days ago
- Remove Kondey backend. Chris Pressey 19 days ago
- Allow to run under Hugs. Multiplexed Falderal 0.14 tests. Chris Pressey 27 days ago