public MaquinaDeTuring(string estadoActual, Cabezal cabezal, DataGridView dataGridView, int intervaloDeTiempo) { try { TablaTransiciones = Utilidades.Utilidades.GenerarTablaDeTransiciones(dataGridView); Transicion transicionInicial = TablaTransiciones.FirstOrDefault(t => t.Estado == estadoActual && t.Leer == cabezal.Leer()); if (transicionInicial == null) { throw new ArgumentException(string.Format("Por favor, verifique el estado inicial y/o la tabla de transiciones. No se encontró transición para el estado {0} leyendo el caracter {1}.", estadoActual, cabezal.Leer())); } if (!TablaTransiciones.Any(x => x.Estado.Contains("accept")) && !TablaTransiciones.Any(x => x.EstadoSiguiente.Contains("accept"))) { throw new ArgumentException(string.Format("Por favor, verifique la tabla de transiciones. No se encontro ningún estado 'accept'.", estadoActual, cabezal.Leer())); } EstadoActual = estadoActual; Cabezal = cabezal; IntervaloDeTiempo = intervaloDeTiempo; Estado = Estado.Pausada; IndiceEnLaTabla = transicionInicial.RowIndex; IndiceEnLaTablaAnterior = IndiceEnLaTabla; Pasos = 0; } catch (ArgumentException) { throw; } catch (Exception) { throw; } }
public MaquinaDeTuring Step() { try { Transicion transicionDeLaTabla = ObtenerSiguienteTransicion(EstadoActual, Cabezal.Leer()); IndiceEnLaTablaAnterior = IndiceEnLaTabla; IndiceEnLaTabla = transicionDeLaTabla.RowIndex; Cabezal.Escribir(transicionDeLaTabla.Escribir); Cabezal.Moverse(transicionDeLaTabla.Direccion); EstadoActual = transicionDeLaTabla.EstadoSiguiente; IndiceEnLaTabla = transicionDeLaTabla.RowIndex; Pasos++; return(this); } catch (ArgumentException) { throw; } catch (Exception) { throw; } }