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); }
//<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..."); } }