Internal representation of machines — tock documentation

# Internal representation of machines

## Stores

Internally, all kinds of automata are represented in the same way. They have one or more stores, which are half-infinite tapes, but you don’t have to use them as tapes; you can use them instead as finite states or as stacks.

## Transitions

The operation of the automaton is defined by transitions of the form:

    a,b,c -> x,y,z

where the left-hand side and right-hand side must have the same number of elements as there are stores, and each element is a symbol annotated with a head position. The meaning of the transition is that if the first store matches `a` (relative to the current head position), replace it with `x`; if the second store matches `b`, replace it with `y`; and so on.

In more detail, each element is either empty (`&`) or a whitespace-separated string of symbols, optionally preceded or followed by a caret (`^`).

- If the caret precedes the string, the head is one before the first symbol;

- If the caret follows the string, the head is one after the last symbol;

- If the caret is absent, the head is over the first symbol.

Note that `^ &` is different from `& ^`, and `&` is the same as `& ^`.

Despite the peculiarities of this notation, it can describe all the possible moves that typical automata make:

- `a -> b`: write symbol and don’t move

- `a -> b ^`: write symbol and move right

- `a -> ^ b`: write symbol and move left

- `& -> b`: push symbol on left

- `a -> &`: pop symbol on left

## States and symbols

States and symbols can be:

- A sequence of one or more letters, numbers, `_`, or `.`

- One of the following: `|- -| # $`

## Tables

Tables are in CSV format.

The first column lists all the states, one per row. Precede the name of the start state with `>`, and precede the name of final states with `@`. These symbols are not part of the state name.

The first row lists all the possible left-hand sides of transitions, sans state.

Each interior cell contains a set of right-hand sides.

Thus, the left-hand side is formed by concatenating the row header (the state) and the column header; the right-hand side is taken from the cell.

## Graphs

Graphs are in Trivial Graph Format (TGF).

The nodes are labeled with states, including the `>` and `@` flags as described above.

The edges are labeled with transitions, minus the state on both the left-hand side and right-hand side.