public ProcesadorDeLiteralBool(ILenguaje lenguaje, IRepositorioDeProcesadores repositorio, IEvaluador evaluador) : base(repositorio) { //RepositorioDeTipos YA!! _lenguaje = lenguaje; _evaluador = evaluador; }
public ProcesadorDeTipoDeRetornoInt(ILenguaje lenguaje, IRepositorioDeProcesadores repositorio, IEvaluador evaluador) : base(repositorio) { //RepositorioDeTipos YA!! _lenguaje = lenguaje; _evaluador = evaluador; EXPRESION = $@"{_lenguaje.NombreTipoEntero}"; }
protected ProcesadorDeDeclaración(ILenguaje lenguaje, IRepositorioDeProcesadores repositorio) : base(repositorio) { Lenguaje = lenguaje; _evaluador = new ProcesadorDeEvaluación(Repositorio); }
public IProcesadorSucesible ObtenerProcesadorDeApilaciónDeVariable(IEvaluador evaluador) { return(new ProcesadorDeApilaciónDeVariable(this, evaluador)); }
public IProcesadorSucesible ObtenerProcesadorDeLiteralBool(IEvaluador evaluador) { return(new ProcesadorDeLiteralBool(_lenguaje, this, evaluador)); }
public IProcesadorSucesible ObtenerProcesadorDeTipoDeRetornoBool(IEvaluador evaluador) { return(new ProcesadorDeTipoDeRetornoBool(_lenguaje, this, evaluador)); }
public IProcesadorSucesible ObtenerProcesadorDeLlamadaFunción(IEvaluador evaluador) { return(new ProcesadorDeLlamadaFunción(this, evaluador)); }
public ProcesadorDeLlamadaFunción(IRepositorioDeProcesadores repositorio, IEvaluador evaluador) : base(repositorio) { _evaluador = evaluador; }
/// <summary> /// Agrega un evaluador (individual o compuesto) al evaluador compuesto /// </summary> /// <param name="pEvaluador">Evaluador a Agregar</param> public void AgregarEvaluador( IEvaluador pEvaluador) { Evaluadores.Add(pEvaluador); }
/// <summary> /// Metodo que agrega evaluadores nuevos /// </summary> /// <param name="pEvaluador"></param> public void AagregarEvaluador(IEvaluador pEvaluador) { this.iEvaluadores.Add(pEvaluador); }
public ProcesadorDeLiteralString(ILenguaje lenguaje, IRepositorioDeProcesadores repositorio, IEvaluador evaluador) : base(repositorio) { _lenguaje = lenguaje; _evaluador = evaluador; }
/// <summary> /// Metodo que valida segun el tipo de cliente /// </summary> /// <param name="pSolicitud"></param> /// <returns></returns> public bool EsValida(SolicitudPrestamo pSolicitud) { IEvaluador evaluador = this.iEvaluadoresPorCliente[pSolicitud.Cliente.TipoCliente]; return(evaluador.EsValida(pSolicitud)); }
public ProcesadorDeApilaciónDeVariable(IRepositorioDeProcesadores repositorio, IEvaluador evaluador) : base(repositorio) { _evaluador = evaluador; }
protected override void ProcesarCadena(string cadena, MatchCollection coincidencias, DeclaraciónDeContexto declaración, int desplazamiento) { //_evaluador = new ProcesadorDeEvaluación(Repositorio); var nombreDeFunción = coincidencias[0].Groups[NOMBRE_GRUPO_NOMBRE_DE_FUNCION].Value; bool esNativa = true; var función = declaración.FuncionesNativas[nombreDeFunción]; if (función == null) { función = declaración.Funciones[nombreDeFunción]; esNativa = false; } if (función == null) { GenerarExcepción(cadena, ERROR_FUNCION_NO_ENCONTRADA, coincidencias[0].Index + desplazamiento, cadena.Length); } //Esto queda cerdo que no veas if (_evaluador == null) { _evaluador = new ProcesadorDeEvaluación(Repositorio); } int índice = función.Parámetros.Total - 1; string subexpresion = $@"{SEPARADORES}(?<valor>{FORMATO_VALIDO_VALOR_DE_INT}|{FORMATO_VALIDO_VALOR_DE_STRING}|{FORMATO_VALIDO_NOMBRE_DE_VARIABLE}){SEPARADORES}"; Regex separadorDeValores = new Regex($@"{SEPARADOR_DE_PARAMETROS}{subexpresion}"); MatchCollection valoresEncontrados = separadorDeValores.Matches(SEPARADOR_DE_PARAMETROS + coincidencias[0].Groups[NOMBRE_GRUPO_PARAMETROS].Value); Stack <Match> pilaDeValores = new Stack <Match>(); foreach (Match valorEncontrado in valoresEncontrados) { pilaDeValores.Push(valorEncontrado); } while (pilaDeValores.Count > 0) { Match coincidencia = pilaDeValores.Pop(); var valor = coincidencia.Groups["valor"].Value; _evaluador.Procesar(valor, declaración, desplazamiento + coincidencias[0].Groups[NOMBRE_GRUPO_PARAMETROS].Index + coincidencia.Groups["valor"].Index - 1); var declaraciónDeParámetro = función.Parámetros[índice]; if (declaraciónDeParámetro == null) { GenerarExcepción( valor, "Parámetro no declarado", coincidencias[0].Groups[NOMBRE_GRUPO_PARAMETROS].Index + desplazamiento + coincidencia.Groups["valor"].Index, valor.Length); } else if (declaraciónDeParámetro.Tipo.Nombre != _evaluador.TipoDeSalida.Nombre) { GenerarExcepción( valor, string.Format(ERROR_VALOR_DE_PARAMETRO_INVALIDO, declaraciónDeParámetro.Tipo.Nombre), coincidencias[0].Groups[NOMBRE_GRUPO_PARAMETROS].Index + desplazamiento + coincidencia.Groups["valor"].Index, valor.Length); } índice--; } _evaluador.TipoDeSalida = función.TipoDeRetorno; if (esNativa) { Instrucción instrucción = new LlamadaAFunciónNativa(nombreDeFunción, cadena) { Inicio = desplazamiento }; declaración.Instrucciones.Enqueue(instrucción); } else { Instrucción instrucción = new LlamadaAFunción(nombreDeFunción, cadena) { Inicio = desplazamiento }; declaración.Instrucciones.Enqueue(instrucción); } }
public void AgregarEvaluador(IEvaluador pEvaluador) { iEvaluadores.Add(pEvaluador); }
public ManejadorDeEvaluación(IRepositorioDeProcesadores repositorioDeProcesadores, IEvaluador evaluador) { IProcesadorSucesible procesadorDeLiteralInt = repositorioDeProcesadores.ObtenerProcesadorDeLiteralInt(evaluador), procesadorDeLiteralString = repositorioDeProcesadores.ObtenerProcesadorDeLiteralString(evaluador), procesadorDeLiteralBool = repositorioDeProcesadores.ObtenerProcesadorDeLiteralBool(evaluador), procesadorDeValorDeVariable = repositorioDeProcesadores.ObtenerProcesadorDeApilaciónDeVariable(evaluador), procesadorDeLlamadaAFunción = repositorioDeProcesadores.ObtenerProcesadorDeLlamadaFunción(evaluador); _inicial = procesadorDeLiteralInt; procesadorDeLiteralInt.EstablecerSucesor(procesadorDeLiteralString); procesadorDeLiteralString.EstablecerSucesor(procesadorDeLiteralBool); procesadorDeLiteralBool.EstablecerSucesor(procesadorDeValorDeVariable); procesadorDeValorDeVariable.EstablecerSucesor(procesadorDeLlamadaAFunción); }
public void AgregarEvaluador(IEvaluador pEvaluador) { this.iEvaluadores.Add(pEvaluador); //Agrega un evaluador a la lista de evaluadores. }
public Boolean EsValida(SolicitudPrestamo pSolicitud) //Implementacion del metodo de la interface IEvaluador. { IEvaluador evaluador = this.iEvaluadoresPorCliente[pSolicitud.Cliente.TipoCliente]; //Selecciona el evaluador correspondiente al tipo de cliente de la solicitud. return(evaluador.EsValida(pSolicitud)); //Verifica si es valida la solicitud, con respecto a ese evaluador. }
public ManejadorDeProcesadores(IRepositorioDeProcesadores repositorioDeProcesadores, IEvaluador evaluador) { _repositorioDeProcesadores = repositorioDeProcesadores; var procesadorDeBucleFor = _repositorioDeProcesadores.ObtenerProcesadorDeBucleFor(); _inicial = procesadorDeBucleFor; var procesadorDeVariables = _repositorioDeProcesadores.ObtenerProcesadorDeDeclaraciónDeVariable(); var procesadorDeDeclaraciónDeFunción = repositorioDeProcesadores.ObtenerProcesadorDeDeclaraciónDeFunción(); var procesadorDeAsignación = _repositorioDeProcesadores.ObtenerProcesadorDeAsignación(); var procesadorDeLlamadaFunción = _repositorioDeProcesadores.ObtenerProcesadorDeLlamadaFunción(evaluador); var procesadorDeRetornoDeValor = _repositorioDeProcesadores.ObtenerProcesadorDeRetornoDeValor(); procesadorDeBucleFor.EstablecerSucesor(procesadorDeDeclaraciónDeFunción); procesadorDeDeclaraciónDeFunción.EstablecerSucesor(procesadorDeLlamadaFunción); procesadorDeLlamadaFunción.EstablecerSucesor(procesadorDeVariables); procesadorDeVariables.EstablecerSucesor(procesadorDeAsignación); procesadorDeAsignación.EstablecerSucesor(procesadorDeRetornoDeValor); }