If an emulation of a machine is a virtual machine, then this is VFSM: the Virtual Finite State Machine. Usage is: ruby vfsm.rb A Machine description must have: * A Start: line, followed by the starting node id * An Accept: line, followed by space separated node ids which may accept * An Edges: line, followed by edge definition lines and an End: line An edge definition line must have: * The source node * The input to accept * The destination node There may be any number of Comment: lines which are unsurprisingly ignored. In the VFSM v2 syntax, you do not need a nodes line, the node ids are inferred from the start:, accept:, and edges:-end: lines. Nodes: lines are ignored for backwards compatability. The input is a string of space separated input tokens. See the examples.