private static string TranstionToString(MachineState state, MachineTransition transition) { const string formato = "{0},{1},{2},{3},{4}"; string direction = transition.Direction == Direction.Right ? "D" : "E"; return(string.Format(formato, state.Name, transition.TargetState.Name, transition.SymbolRead, transition.SymbolWrite, direction)); }
// Deterministically Get Next State public ProcessState GetNext(ProcessTransitions procTransitions) { MachineTransition transition = new MachineTransition(CurrentState, procTransitions); ProcessState nextProcState; if (!transitions.TryGetValue(transition, out nextProcState)) { throw new Exception("No known Transition: " + CurrentState + "->" + procTransitions); } return(nextProcState); }
private void RunStepByStep() { if (!WordAccepted.HasValue) { int tapeSelectionIndex = CurrentTapeSelectionIndex = Math.Max(CurrentTapeSelectionIndex, 0); string currentSymbol = CurrentTape[tapeSelectionIndex]; MachineTransition machineTransition = CurrentState.Transitions.FirstOrDefault(t => t.SymbolRead == currentSymbol); if (machineTransition != null) { CurrentTape[tapeSelectionIndex] = machineTransition.SymbolWrite; CurrentTapeSelectionIndex = tapeSelectionIndex + (int)machineTransition.Direction; CurrentState = machineTransition.TargetState; if (CurrentState.Equals(FinalState)) { WordAccepted = true; } } else { WordAccepted = false; } } }
public override bool Equals(object obj) { MachineTransition mt = obj as MachineTransition; return(mt != null && (this.CurrentState == mt.CurrentState) && (this.Transitions == mt.Transitions)); }