FsmFragment IExprVisitor <FsmFragment> .VisitCharClass(CharClassExpr charClassExpr)
        {
            var from = _fsm.CreateState();
            var to   = _fsm.CreateState();

            FsmTransitionCondition condition = new FsmTransitionCondition(null, charClassExpr.ClassTest, null, false);

            _fsm.CreateTransition(from, to, condition);

            return(new FsmFragment(from, to));
        }
        FsmFragment IExprVisitor <FsmFragment> .VisitChars(CharsExpr charsExpr)
        {
            var from = _fsm.CreateState();
            var to   = from;

            foreach (var ch in charsExpr.Chars)
            {
                var last = _fsm.CreateState();
                FsmTransitionCondition condition = new FsmTransitionCondition(ch, null, null, false);
                _fsm.CreateTransition(to, last, condition);
                to = last;
            }

            return(new FsmFragment(from, to));
        }