public IReduce <T> GetReduce(IActionInput <T> Input) { IReduce <T> action; action = reduceActions.FirstOrDefault(item => item.Input.Match(Input)); return(action); }
public IShift <T> GetShift(IActionInput <T> Input) { IShift <T> action; action = shiftActions.FirstOrDefault(item => item.Input.Match(Input)); return(action); }
public override void SetActionInputName(string name, Type type) { IActionInput ai = _valuePointer as IActionInput; if (ai != null) { ai.SetActionInputName(name, type); } }
public Shift(IActionInput <T> Input, int TargetStateIndex) { if (Input == null) { throw new ArgumentNullException("Input"); } this.Input = Input; this.TargetStateIndex = TargetStateIndex; }
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); }
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); } } }