private void TerminoPrima(int Jerarquia)
        {
            TrazarEntrada("<TerminoPrima>", Jerarquia);

            if (Categoria.MULTIPLICACION.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
                Factor(Jerarquia + 1);

                double derecho = Pila.Pop();
                TrazarPop(Jerarquia, derecho);

                double izquierdo = Pila.Pop();
                TrazarPop(Jerarquia, izquierdo);

                double Valor = izquierdo * derecho;
                TrazarSalida(izquierdo + " * " + derecho + " = " + Valor, Jerarquia);
                Pila.Push(Valor);
                TrazarPush(Jerarquia, Valor);
                TerminoSinFactor(Jerarquia + 1);
            }
            else if (Categoria.DIVISION.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
                Factor(Jerarquia + 1);

                double derecho = Pila.Pop();
                TrazarPop(Jerarquia, derecho);

                double izquierdo = Pila.Pop();
                TrazarPop(Jerarquia, izquierdo);

                if (derecho == 0)
                {
                    derecho = 1;

                    String Causa    = "No es posible llevar a cabo una división por cero " + Componente.ObtenerCategoria();
                    String Falla    = "Divisor cero.";
                    String Solucion = "Asegúrese que el divisor sea diferente de cero.";

                    Error error = Error.CrearErrorSemantico(Componente.ObtenerLexema(), Componente.ObtenerCategoria(), Componente.ObtenerNumeroLinea(), Componente.ObetenerPosicionInicial(), Componente.ObtenerPosicionFinal(), Falla, Causa, Solucion);
                    ManejadorErrores.Reportar(error);
                }
                double Valor = izquierdo / derecho;
                TrazarSalida(izquierdo + " / " + derecho + " = " + Valor, Jerarquia);
                Pila.Push(izquierdo / derecho);
                TrazarPush(Jerarquia, Valor);
                TerminoSinFactor(Jerarquia + 1);
            }

            TrazarSalida("</TerminoPrima>", Jerarquia);
        }
        public static ComponenteLexico ComprobarPalabraReservada(ComponenteLexico Componente)
        {
            if (Componente != null && INSTANCIA.EsPalabraReservada(Componente.ObtenerLexema()))
            {
                Categoria        Categoria       = INSTANCIA.ObtenerPalabraReservada(Componente.ObtenerLexema()).ObtenerCategoria();
                ComponenteLexico NuevoComponente = ComponenteLexico.CrearComponenteSimbolo(Componente.ObtenerLexema(), Categoria, Componente.ObtenerNumeroLinea(), Componente.ObetenerPosicionInicial(), Componente.ObtenerPosicionFinal());

                return(NuevoComponente);
            }

            return(Componente);
        }
Example #3
0
        //<simboloMorse>:: .| |-  {., ,-}
        private void SimboloMorse()
        {
            if (Categoria.LETRA_A.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.LETRA_B.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.LETRA_C.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.LETRA_D.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.LETRA_E.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.LETRA_F.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.LETRA_G.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.LETRA_H.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.LETRA_I.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.LETRA_J.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.LETRA_K.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.LETRA_L.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.LETRA_M.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.LETRA_M.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.LETRA_O.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.LETRA_P.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.LETRA_Q.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.LETRA_R.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.LETRA_S.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.LETRA_T.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.LETRA_U.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.LETRA_V.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.LETRA_W.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.LETRA_X.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.LETRA_Y.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.LETRA_Z.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.TILDE_A_MORSE.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.TILDE_E_MORSE.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.TILDE_O_MORSE.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.NUMERO_CERO.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.NUMERO_UNO.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.NUMERO_DOS.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.NUMERO_TRES.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.NUMERO_CUATRO.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.NUMERO_CINCO.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.NUMERO_SEIS.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.NUMERO_SIETE.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.NUMERO_OCHO.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.NUMERO_NUEVE.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.NUMERO_CERO.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.LETRA_ET.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.LETRA_ENYE.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.PUNTO.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.COMA.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.INTERROGACION_ABRE.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.INTERROGACION_CIERRA.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.DOS_PUNTOS.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.COMILLA_SIMPLE.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.ADMIRACION_ABRE.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.ADMIRACION_CIERRA.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.PARENTESIS_ABRE.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.PARENTESIS_CIERRA.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.PUNTO_Y_COMA.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.IGUAL.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.MAS.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.GUION.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.GUION_BAJO.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.COMILLAS_DOBLES.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.BARRA_INCLINADA.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.ESPACIO.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.SIGNO_PESOS.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }
            else if (Categoria.ARROBA.Equals(Componente.ObtenerCategoria()))
            {
                Avanzar();
            }

            else
            {
                String Causa    = "Caracter leido no valido " + Componente.ObtenerCategoria();
                String falla    = "Caracter no valido";
                String Solucion = "Asegurese que el morse esta biene escrito";

                Error Error = Error.CrearErrorSintactico(Componente.ObtenerLexema(), Componente.ObtenerCategoria(), Componente.ObtenerNumeroLinea(), Componente.ObetenerPosicionInicial(), Componente.ObtenerPosicionFinal(), falla, Causa, Solucion);
                ManejadorErrores.Reportar(Error);
                throw new Exception("se ha presentado un error de tipo stopper dentro del proceso de compilacion. Por favor revise la consola de errores...");
            }
        }