Ejemplo n.º 1
0
        public FSMLexerBuilder <N> RepetitionTransition(int count, string pattern,
                                                        TransitionPrecondition precondition = null)
        {
            if (count > 0 && !string.IsNullOrEmpty(pattern))
            {
                if (pattern.StartsWith("[") && pattern.EndsWith("]") && pattern.Contains("-") && pattern.Length == 5)
                {
                    var start = pattern[1];
                    var end   = pattern[3];
                    RangeTransition(start, end, precondition);
                    for (var i = 1; i < count; i++)
                    {
                        RangeTransition(start, end);
                    }
                }
                else
                {
                    ConstantTransition(pattern, precondition);
                    for (var i = 1; i < count; i++)
                    {
                        ConstantTransition(pattern);
                    }
                    ConstantTransition(pattern, precondition);
                }
            }

            return(this);
        }
Ejemplo n.º 2
0
        public FSMLexerBuilder <N> ExceptTransitionTo(char[] exceptions, string toNodeMark,
                                                      TransitionPrecondition precondition)
        {
            var toNode = Marks[toNodeMark];

            return(ExceptTransitionTo(exceptions, toNode, precondition));
        }
Ejemplo n.º 3
0
        public FSMLexerBuilder <N> RepetitionTransition(int count, string pattern,
                                                        TransitionPrecondition precondition = null)
        {
            var parsedPattern = ParseRepeatedPattern(pattern);

            if (count > 0 && !string.IsNullOrEmpty(pattern))
            {
                if (parsedPattern.ranges != null && parsedPattern.ranges.Any())
                {
                    for (int i = 0; i < count; i++)
                    {
                        MultiRangeTransition(precondition, parsedPattern.ranges.ToArray());
                    }
                }
//                if (pattern.StartsWith("[") && pattern.EndsWith("]") && pattern.Contains("-") && pattern.Length == 5)
//                {
//                    var start = pattern[1];
//                    var end = pattern[3];
//                    RangeTransition(start, end, precondition);
//                    for (var i = 1; i < count; i++) RangeTransition(start, end);
//                }
                else
                {
                    ConstantTransition(pattern, precondition);
                    for (var i = 1; i < count; i++)
                    {
                        ConstantTransition(pattern);
                    }
                    ConstantTransition(pattern, precondition);
                }
            }

            return(this);
        }
Ejemplo n.º 4
0
        public FSMLexerBuilder <N> RangeTransitionTo(char start, char end, string toNodeMark,
                                                     TransitionPrecondition precondition)
        {
            var toNode = Marks[toNodeMark];

            return(RangeTransitionTo(start, end, toNode, precondition));
        }
Ejemplo n.º 5
0
        public FSMLexerBuilder <N> ConstantTransition(string constant, TransitionPrecondition precondition = null)
        {
            char c = constant[0];

            this.SafeTransition(c, precondition);
            for (int i = 1; i < constant.Length; i++)
            {
                c = constant[i];
                this.SafeTransition(c);
            }
            return(this);
        }
Ejemplo n.º 6
0
        public FSMLexerBuilder <N> AnyTransitionTo(char input, int toNode, TransitionPrecondition precondition)
        {
            AbstractTransitionCheck checker = new TransitionAny(input, precondition);

            if (!Fsm.HasState(toNode))
            {
                Fsm.AddNode();
            }
            var transition = new FSMTransition(checker, CurrentState, toNode);

            Fsm.AddTransition(transition);
            CurrentState = toNode;
            return(this);
        }
Ejemplo n.º 7
0
        public FSMLexerBuilder <N> SafeTransition(char input, TransitionPrecondition precondition)
        {
            var transition = Fsm.GetTransition(CurrentState, input);

            if (transition != null)
            {
                CurrentState = transition.ToNode;
            }
            else
            {
                return(TransitionTo(input, Fsm.NewNodeId, precondition));
            }
            return(this);
        }
Ejemplo n.º 8
0
        public FSMLexerBuilder <N> RangeTransitionTo(char start, char end, int toNode,
                                                     TransitionPrecondition precondition)
        {
            AbstractTransitionCheck checker = new TransitionRange(start, end, precondition);

            if (!Fsm.HasState(toNode))
            {
                Fsm.AddNode();
            }
            var transition = new FSMTransition(checker, CurrentState, toNode);

            Fsm.AddTransition(transition);
            CurrentState = toNode;
            return(this);
        }
Ejemplo n.º 9
0
 public TransitionAny(char token, TransitionPrecondition transitionPrecondition)
 {
     Precondition = transitionPrecondition;
 }
 public TransitionAnyExcept(TransitionPrecondition precondition, params char[] tokens)
 {
     TokenExceptions = new List <char>();
     TokenExceptions.AddRange(tokens);
     Precondition = precondition;
 }
Ejemplo n.º 11
0
 public TransitionSingle(char token, TransitionPrecondition precondition)
 {
     TransitionToken = token;
     Precondition    = precondition;
 }
Ejemplo n.º 12
0
 public TransitionRange(char start, char end, TransitionPrecondition precondition)
 {
     RangeStart   = start;
     RangeEnd     = end;
     Precondition = precondition;
 }
Ejemplo n.º 13
0
 public TransitionMany(char[] token, TransitionPrecondition precondition)
 {
     TransitionToken = token;
     Precondition    = precondition;
 }
Ejemplo n.º 14
0
 public FSMLexerBuilder <N> AnyTransition(char input, TransitionPrecondition precondition)
 {
     return(AnyTransitionTo(input, Fsm.NewNodeId, precondition));
 }
Ejemplo n.º 15
0
 public FSMLexerBuilder <N> ExceptTransition(char[] exceptions, TransitionPrecondition precondition)
 {
     return(ExceptTransitionTo(exceptions, Fsm.NewNodeId, precondition));
 }
Ejemplo n.º 16
0
 public FSMLexerBuilder <N> Transition(char[] inputs, TransitionPrecondition precondition)
 {
     return(TransitionTo(inputs, Fsm.NewNodeId, precondition));
 }
Ejemplo n.º 17
0
        public FSMLexerBuilder <N> AnyTransitionTo(char input, string toNodeMark, TransitionPrecondition precondition)
        {
            var toNode = Marks[toNodeMark];

            return(AnyTransitionTo(input, toNode, precondition));
        }
Ejemplo n.º 18
0
 public FSMLexerBuilder <N> RangeTransition(char start, char end, TransitionPrecondition precondition)
 {
     return(RangeTransitionTo(start, end, Fsm.NewNodeId, precondition));
 }
Ejemplo n.º 19
0
 public TransitionAny(TransitionPrecondition transitionPrecondition)
 {
     Precondition = transitionPrecondition;
 }