Example #1
0
 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}";
 }
Example #3
0
 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;
 }
Example #9
0
 /// <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);
 }
Example #10
0
 /// <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;
 }
Example #12
0
        /// <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);
 }
Example #16
0
        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);
        }
Example #17
0
 public void AgregarEvaluador(IEvaluador pEvaluador)
 {
     this.iEvaluadores.Add(pEvaluador);              //Agrega un evaluador a la lista de evaluadores.
 }
Example #18
0
        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.
        }
Example #19
0
        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);
        }