public Transition OnSpaceChar(bool returnCharAfterTransition = false)
 {
     var t = new Transition(m_source, m_target, ch => ch == ' ' || ch == '\t', returnCharAfterTransition);
     m_source.Transitions.Add(t);
     return t;
 }
 public Transition OnFNSSChar(char c, bool returnCharAfterTransition = false)
 {
     var t = new Transition(m_source, m_target, ch => ch == c && m_context.IsFNSSChar, returnCharAfterTransition);
     m_source.Transitions.Add(t);
     return t;
 }
 public Transition OnEOL()
 {
     var t = new Transition(m_source, m_target, ch => ch == '\n' && m_context.IsEOL);
     m_source.Transitions.Add(t);
     return t;
 }
 public Transition OnChars(params char[] chs)
 {
     var t = new Transition(m_source, m_target, ch =>
     {
         foreach (var c in chs) { if (ch == c) return true; }
         return false;
     });
     m_source.Transitions.Add(t);
     return t;
 }
 public Transition OnAnyFNSSChar(bool returnCharAfterTransition = false)
 {
     var t = new Transition(m_source, m_target, ch => m_context.IsFNSSChar && !m_context.IsEOL, returnCharAfterTransition);
     m_source.Transitions.Add(t);
     return t;
 }
 public Transition On(Transition.Condition condition, bool returnCharAfterTransition = false)
 {
     var t = new Transition(m_source, m_target, condition, returnCharAfterTransition);
     m_source.Transitions.Add(t);
     return t;
 }