Tree @master (Download .tar.gz)
Turmac
Version 0.4
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. - Describe harness for running the code produced by a compiler and
comparing it to the simulation run by
turmac. - (low) Ability to concatenate two Turing machines.
History
0.4
- Halt states are now any states whose names begin with
@. What was conventionally labelledHis now conventionally labelled@H. - Multiple halt states are allowed. This supports describing
language recognizer Turing machines with distinct "Accept"
and "Reject" states, conventionally labelled
@Aand@R. - Completely refactored command-line usage.
- Fixed 2 gaps in completeness-checker: it wasn't considering
states that had no rules but were the destination of a transition;
and it wasn't checking for handling
_(blank symbol), which is always a member of the set of symbols of a machine. - Improved the internal guarantee that the TM description is complete before normalization can happen on it.
- Added facility to check if input Turing machine is deterministic.
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/
- Add --version command-line flag. Chris Pressey a month ago
- Add more example Turmac descriptions. Chris Pressey a month ago
- Update README in preparation for release of 0.4. Chris Pressey a month ago
- Rename `Render` to `Renderer` for greater consistency. Chris Pressey a month ago
- Finish supporting multiple halt states prefixed with `@`. Chris Pressey a month ago
- Update the Python backend. Chris Pressey a month ago
- Largely implement nameable halt states Chris Pressey a month ago
- Partially implement nameable halt states Chris Pressey a month ago
- Update spec for halt-state rename. No implementation changes yet Chris Pressey a month ago
- Add check-deterministic subcommand. Chris Pressey a month ago
- Completeness includes handling the blank symbol in every rule. Chris Pressey a month ago
- Checkpoint improving validation (complete, deterministic.) Chris Pressey a month ago
- Fix gap in completeness checking re transition destination states Chris Pressey a month ago
- Remove unused import. Chris Pressey a month ago
- Completely refactor command-line usage. Chris Pressey a month ago
- Update README. Chris Pressey a month ago
- Use type to ensure TM description is complete before normalizing. Chris Pressey a month ago
- Update TODO. Chris Pressey a month ago
- Fix detail in spec. Chris Pressey a month ago
- Put intercalate in Language.Turmac.Utils, and update README. Chris Pressey a month ago
- Have trace produce output in defined execution trace format. Chris Pressey a month ago
- Add headers when outputting execution traces. Chris Pressey a month ago
- Describe the execution trace format. Chris Pressey a month ago
- Generated Python outputs final configuration in defined format. Chris Pressey a month ago
- Bring Python backend closer to what will be needed. Chris Pressey a month ago
- Begin defining and outputting a format for configurations as well. Chris Pressey a month ago
- Remove Kondey backend. Chris Pressey a month ago
- Allow to run under Hugs. Multiplexed Falderal 0.14 tests. Chris Pressey 2 months ago
- Looks like we will need to implement intercalate ourselves in Hugs Chris Pressey 2 months ago
- Update documentation with some indication of what we aspire to. Chris Pressey 2 months ago