Verbose embeddings %eof a to $eof(a). User defined embeddings <-name(a1,a2,...). User defined operators expr1 expr2. Doesn't make make sense for [] to be the lambda (zero-length) machine. This should be the empty set (the empty machine). But then would it be invalid in a regular expression? Add an option (probably -L) for turning off line numbers for debugging the generated state machine. 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. 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