public override void Ejecutar(ContextoDePrograma contexto) { var función = contexto.Declaración.FuncionesNativas[_nombre]; var contextoDeFunción = new ContextoDePrograma(función.Clonar()); if (función != null) { //Queue<string> cola = new Queue<string>(Parámetros); foreach (var parámetro in función.Parámetros) { contextoDeFunción.Variables.Add(new Variable { Tipo = parámetro.Tipo, Nombre = parámetro.Nombre, Valor = contexto.DesapilarDato() //cola.Dequeue() }); } } while (contextoDeFunción.Declaración.Instrucciones.Count > 0) { var instrucción = contextoDeFunción.Declaración.Instrucciones.Dequeue(); instrucción.Ejecutar(contextoDeFunción); } contexto.ValorDeRetorno = contextoDeFunción.ValorDeRetorno; }
public override void Ejecutar(ContextoDePrograma contexto) { var función = contexto.Declaración.Funciones[_nombre]; var contextoDeFunción = new ContextoDePrograma(función.Clonar()); contexto.ApilarContexto(contextoDeFunción); }
private void BotónEmpezar_Click(object sender, System.EventArgs e) { _programa = _constructor.Construir(Código.Text); if (!_programa.Declaración.Correcto) { Código.Select(_programa.Declaración.Error.InicioDeInstrucción, _programa.Declaración.Error.LongitudDeInstrucción); Código.ScrollToCaret(); Código.SelectionBackColor = Color.Red; Estado.Text = _programa.Declaración.Error.Mensaje; return; } var siguienteInstrucción = _programa.SiguienteInstrucción; if (siguienteInstrucción != null) { Estado.Text = "En depurando"; btnSiguiente.Enabled = true; _visualizador = new VisualizadorDeContextoDePrograma(_programa); VisualizadorDeContextoDeEjecución.SelectedObject = _visualizador; Código.Select(siguienteInstrucción.Inicio, siguienteInstrucción.Longitud); Código.ScrollToCaret(); Código.SelectionBackColor = Color.Yellow; } }
static void Main(string[] args) { if (args.Length > 0 && File.Exists(args[0])) { Console.OutputEncoding = System.Text.Encoding.UTF8; Constructor constructor = new Constructor(new LenguajeBase()); var código = File.ReadAllText(args[0]); ContextoDePrograma programa = constructor.Construir(código); if (programa.Declaración.Correcto) { while (programa.SiguienteInstrucción != null) { programa.EjecutarSiguienteInstrucción(); } } else { int línea = código.Take(programa.Declaración.Error.InicioDeInstrucción).Count(c => c == '\n') + 1; string instrucciónErronea = programa.Declaración.Error.Instrucción, mensaje = programa.Declaración.Error.Mensaje; Console.WriteLine($"Error en línea {línea}: {instrucciónErronea} => {mensaje}"); } } }
public override void Ejecutar(ContextoDePrograma contexto) { var variable = contexto.Variables.Where(v => v.Nombre == _nombreDeVariable).First(); if (variable != null) { contexto.ApilarDato(variable.Valor.ToString()); } }
public override void Ejecutar(ContextoDePrograma contexto) { string nombreDeFichero = contexto.Variables.Where(v => v.Nombre == _nombreDeVariable).FirstOrDefault().Valor.ToString(); if (!File.Exists(nombreDeFichero)) { //Lanzo mi propia excepción o como hago?? En contexto un Errores a lo Lezana?? } contexto.ValorDeRetorno = File.ReadAllText(nombreDeFichero); }
public override void Ejecutar(ContextoDePrograma contexto) { //Aqui leo y dejo el resultado en ... contexto.ValorDeRetorno = contexto.Consola.Leer(); }
public override void Ejecutar(ContextoDePrograma contexto) { contexto.Consola.Escribir(contexto.Variables.Where(v => v.Nombre == _nombreDeVariable).FirstOrDefault().Valor.ToString()); }
public override void Ejecutar(ContextoDePrograma contexto) { contexto.ApilarDato(_dato); }
public ContextoDeProgramaVisualizable(ContextoDePrograma contexto) { _contexto = contexto; }
public override void Ejecutar(ContextoDePrograma contexto) { //_variable.Valor = contexto.DesapilarDato(); contexto.Variables.Add(_variable); }
public override void Ejecutar(ContextoDePrograma contexto) { var valor = contexto.DesapilarDato(); contexto.Variables.Where(v => v.Nombre == _nombreDeVariable).First().Valor = valor; }
public override void Ejecutar(ContextoDePrograma contexto) { contexto.DesapilarContexto(_valorDeRetorno); //contextoActual?? }
public abstract void Ejecutar(ContextoDePrograma contexto);
public VisualizadorDeContextoDePrograma(ContextoDePrograma contexto) { _contexto = contexto; _visualizadorDePilaDeLlamadas = new VisualizadorDePilaDeLlamadas(); }