Example #1
0
        public IReduce <T> GetReduce(IActionInput <T> Input)
        {
            IReduce <T> action;

            action = reduceActions.FirstOrDefault(item => item.Input.Match(Input));
            return(action);
        }
Example #2
0
        public IShift <T> GetShift(IActionInput <T> Input)
        {
            IShift <T> action;

            action = shiftActions.FirstOrDefault(item => item.Input.Match(Input));
            return(action);
        }
Example #3
0
        public override void SetActionInputName(string name, Type type)
        {
            IActionInput ai = _valuePointer as IActionInput;

            if (ai != null)
            {
                ai.SetActionInputName(name, type);
            }
        }
Example #4
0
File: Shift.cs Project: dfgs/FSMLib
        public Shift(IActionInput <T> Input, int TargetStateIndex)
        {
            if (Input == null)
            {
                throw new ArgumentNullException("Input");
            }

            this.Input            = Input;
            this.TargetStateIndex = TargetStateIndex;
        }
Example #5
0
        public bool Parse(IActionInput <char> Input)
        {
            IShift <char> action;

            action = automatonTable.GetState(stateIndex).GetShift(Input);
            if (action == null)
            {
                return(false);
            }

            stateIndex = action.TargetStateIndex;
            return(true);
        }
Example #6
0
        public IEnumerable <ISituation <T> > CreateNextSituations(IEnumerable <ISituation <T> > CurrentSituations, IActionInput <T> Input)
        {
            IEnumerable <ISituation <T> > matchingSituations;
            ISituationEdge <T>            edge;
            Situation <T> nextSituation;


            matchingSituations = CurrentSituations.Where(s => s.Predicate.GetInputs().Where(i => i.Match(Input)).Any());

            foreach (Situation <T> situation in matchingSituations)
            {
                edge = GetEdge(situation.Predicate);

                foreach (SituationEdge <T> nextEdge in edge.TargetNode.Edges)
                {
                    nextSituation = new Situation <T>(nextEdge.Rule, nextEdge.Predicate, situation.Input);
                    yield return(nextSituation);
                }
            }
        }