Should be possible to turn off line numbers for debugging purposes (from a user). Expressions of the form: expr1 <: expr2 . expr3 sometimes don't behave as expected. If expr2 contains the empty string then it's possible for the machine to escape to expr3. This is somewhat unexpected. The empty string does count as moving through the right machine so there should not be an exception for this case. Using the stronger implementation: ( expr1 $1 %0 . expr2 ) will solve the problem. Also, there is potential for nondeterminism to persist via the empty string with the :> and :>> operators. Should also guard against this using leaving priorities. The |> guarded operator and the <| guarded operator need to be added. The fixed size stack is a problem for manual recursion of unlimited depth. An option to turn off the removal of duplicate actions might be useful for analyzing unintentional nondeterminism. To avoid confusion, there should be a correspondence between state numbers in the generated code, graphviz and the XML. Might be a good idea to add in some protection against using up all of a system's memory. This protection could then be removed by people when someone is sure they want to use a lot of memory. fbreak should advance the current char. Depreciate fbreak and add fctl_break; fctl_return ; fctl_goto