public static void inicializar() { tabla.Add("ON", ComponenteLexico.crear("ON", Categoria.PALABRA_RESERVADA_ON)); tabla.Add("OFF", ComponenteLexico.crear("OFF", Categoria.PALABRA_RESERVADA_OFF)); tabla.Add("SHUTDOWN", ComponenteLexico.crear("SHUTDOWN", Categoria.PALABRA_RESERVADA_SHUTDOWN)); tabla.Add("IN", ComponenteLexico.crear("IN", Categoria.PALABRA_RESERVADA_IN)); tabla.Add("R", ComponenteLexico.crear("RANKINE", Categoria.PALABRA_RESERVADA_RANKINE)); tabla.Add("F", ComponenteLexico.crear("FARENHEIT", Categoria.PALABRA_RESERVADA_FARENHEIT)); tabla.Add("FAIL", ComponenteLexico.crear("FAIL", Categoria.PALABRA_RESERVADA_FAIL)); tabla.Add("RESTART", ComponenteLexico.crear("RESTART", Categoria.PALABRA_RESERVADA_RESTART)); tabla.Add("SUCCESS", ComponenteLexico.crear("SUCCESS", Categoria.PALABRA_RESERVADA_SUCCESS)); tabla.Add("STATUS", ComponenteLexico.crear("STATUS", Categoria.PALABRA_RESERVADA_STATUS)); tabla.Add("START", ComponenteLexico.crear("START", Categoria.PALABRA_RESERVADA_START)); tabla.Add("GET", ComponenteLexico.crear("GET", Categoria.PALABRA_RESERVADA_GET)); tabla.Add("DOWN", ComponenteLexico.crear("DOWN", Categoria.PALABRA_RESERVADA_DOWN)); tabla.Add("UP", ComponenteLexico.crear("UP", Categoria.PALABRA_RESERVADA_UP)); tabla.Add("OUT", ComponenteLexico.crear("OUT", Categoria.PALABRA_RESERVADA_OUT)); tabla.Add("C", ComponenteLexico.crear("CENTIGRADOS", Categoria.PALABRA_RESERVADA_CENTIGRADOS)); tabla.Add("K", ComponenteLexico.crear("KELVIN", Categoria.PALABRA_RESERVADA_KELVIN)); //agregar }
public ComponenteLexico devolverComponenteLexico() { int estadoActual = 0; string lexema = ""; string lexemareserva = ""; bool continuarAnalisis = true; ComponenteLexico componente = null; while (continuarAnalisis) { switch (estadoActual) { case 0: leerSiguienteCaracter(); while (" ".Equals(caracterActual)) { leerSiguienteCaracter(); } if (".".Equals(caracterActual)) { lexemareserva += caracterActual; //lexema = lexema + caracterActual; estadoActual = 1; } else if (caracterActual.Equals("-")) { lexemareserva += caracterActual; estadoActual = 40; } else if (caracterActual.Equals("/")) { //lexema = lexema + " "; lexemareserva += caracterActual; estadoActual = 78; } else if ("@EOF@".Equals(caracterActual)) { estadoActual = 77; } else if ("@FL@".Equals(caracterActual)) { //lexema = lexema + caracterActual; estadoActual = 76; } else { lexemareserva += caracterActual; lexema += caracterActual; estadoActual = 39; } break; case 1: leerSiguienteCaracter(); if (caracterActual.Equals(" ")) { estadoActual = 2; } else if (caracterActual.Equals(".")) { lexemareserva += caracterActual; estadoActual = 3; } else if (caracterActual.Equals("-")) { lexemareserva += caracterActual; estadoActual = 4; } else { estadoActual = 39; } break; case 2: //leerSiguienteCaracter(); lexema = lexema + 'E'; devolverPuntero(); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Letra", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 3: leerSiguienteCaracter(); if (caracterActual.Equals(" ")) { estadoActual = 5; } else if (caracterActual.Equals(".")) { lexemareserva += caracterActual; estadoActual = 6; } else if (caracterActual.Equals("-")) { lexemareserva += caracterActual; estadoActual = 18; } else { estadoActual = 39; } break; case 4: leerSiguienteCaracter(); if (caracterActual.Equals(" ")) { estadoActual = 25; } else if (caracterActual.Equals(".")) { lexemareserva += caracterActual; estadoActual = 26; } else if (caracterActual.Equals("-")) { lexemareserva += caracterActual; estadoActual = 27; } else { estadoActual = 39; } break; case 5: leerSiguienteCaracter(); lexema = lexema + 'I'; devolverPuntero(); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Letra", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 6: leerSiguienteCaracter(); if (caracterActual.Equals(" ")) { estadoActual = 7; } else if (caracterActual.Equals(".")) { lexemareserva += caracterActual; estadoActual = 8; } else if (caracterActual.Equals("-")) { lexemareserva += caracterActual; estadoActual = 14; } else { estadoActual = 39; } break; case 7: leerSiguienteCaracter(); lexema = lexema + 'S'; devolverPuntero(); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Letra", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 8: leerSiguienteCaracter(); if (caracterActual.Equals(" ")) { estadoActual = 9; } else if (caracterActual.Equals(".")) { lexemareserva += caracterActual; estadoActual = 10; } else if (caracterActual.Equals("-")) { lexemareserva += caracterActual; estadoActual = 12; } else { estadoActual = 39; } break; case 9: leerSiguienteCaracter(); lexema = lexema + 'H'; devolverPuntero(); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Letra", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 10: leerSiguienteCaracter(); if (caracterActual.Equals(" ")) { estadoActual = 11; } else { estadoActual = 39; } break; case 11: leerSiguienteCaracter(); lexema = lexema + '5'; devolverPuntero(); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Número", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 12: leerSiguienteCaracter(); if (caracterActual.Equals(" ")) { estadoActual = 13; } else { estadoActual = 39; } break; case 13: leerSiguienteCaracter(); lexema = lexema + '4'; devolverPuntero(); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Número", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 14: leerSiguienteCaracter(); if (caracterActual.Equals(" ")) { estadoActual = 15; } else if (caracterActual.Equals(".")) { lexemareserva += caracterActual; estadoActual = 39; } else if (caracterActual.Equals("-")) { lexemareserva += caracterActual; estadoActual = 16; } else { estadoActual = 39; } break; case 15: leerSiguienteCaracter(); lexema = lexema + 'V'; devolverPuntero(); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Letra", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 16: leerSiguienteCaracter(); if (caracterActual.Equals(" ")) { estadoActual = 17; } else { estadoActual = 39; } break; case 17: leerSiguienteCaracter(); lexema = lexema + '3'; devolverPuntero(); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Número", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 18: leerSiguienteCaracter(); if (caracterActual.Equals(" ")) { estadoActual = 19; } else if (caracterActual.Equals(".")) { lexemareserva += caracterActual; estadoActual = 20; } else if (caracterActual.Equals("-")) { lexemareserva += caracterActual; estadoActual = 22; } else { estadoActual = 39; } break; case 19: leerSiguienteCaracter(); lexema = lexema + 'U'; devolverPuntero(); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Letra", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 20: leerSiguienteCaracter(); if (caracterActual.Equals(" ")) { estadoActual = 21; } else { estadoActual = 39; } break; case 21: leerSiguienteCaracter(); lexema = lexema + 'F'; devolverPuntero(); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Letra", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 22: leerSiguienteCaracter(); if (caracterActual.Equals(" ")) { estadoActual = 39; } else if (caracterActual.Equals(".")) { lexemareserva += caracterActual; estadoActual = 39; } else if (caracterActual.Equals("-")) { lexemareserva += caracterActual; estadoActual = 23; } else { estadoActual = 39; } break; case 23: leerSiguienteCaracter(); if (caracterActual.Equals(" ")) { estadoActual = 24; } else { estadoActual = 39; } break; case 24: leerSiguienteCaracter(); lexema = lexema + '2'; devolverPuntero(); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Número", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 25: leerSiguienteCaracter(); lexema = lexema + 'A'; devolverPuntero(); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Letra", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 26: leerSiguienteCaracter(); if (caracterActual.Equals(" ")) { estadoActual = 28; } else if (caracterActual.Equals(".")) { lexemareserva += caracterActual; estadoActual = 29; } else if (caracterActual.Equals("-")) { lexemareserva += caracterActual; estadoActual = 39; } else { estadoActual = 39; } break; case 27: leerSiguienteCaracter(); if (caracterActual.Equals(" ")) { estadoActual = 31; } else if (caracterActual.Equals(".")) { lexemareserva += caracterActual; estadoActual = 32; } else if (caracterActual.Equals("-")) { lexemareserva += caracterActual; estadoActual = 33; } else { estadoActual = 39; } break; case 28: leerSiguienteCaracter(); lexema = lexema + 'R'; devolverPuntero(); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Letra", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 29: leerSiguienteCaracter(); if (caracterActual.Equals(" ")) { estadoActual = 30; } else { estadoActual = 39; } break; case 30: leerSiguienteCaracter(); lexema = lexema + 'L'; devolverPuntero(); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Letra", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 31: leerSiguienteCaracter(); lexema = lexema + 'W'; devolverPuntero(); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Letra", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 32: leerSiguienteCaracter(); if (caracterActual.Equals(" ")) { estadoActual = 36; } else { estadoActual = 39; } break; case 33: leerSiguienteCaracter(); if (caracterActual.Equals(" ")) { estadoActual = 37; } else if (caracterActual.Equals("-")) { lexemareserva += caracterActual; estadoActual = 34; } else { estadoActual = 39; } break; case 34: leerSiguienteCaracter(); if (caracterActual.Equals(" ")) { estadoActual = 35; } else { estadoActual = 39; } break; case 35: leerSiguienteCaracter(); lexema = lexema + '1'; devolverPuntero(); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Número", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 36: leerSiguienteCaracter(); lexema = lexema + 'P'; devolverPuntero(); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Letra", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 37: leerSiguienteCaracter(); lexema = lexema + 'J'; devolverPuntero(); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Letra", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 38: // el / retorna Lexema leerSiguienteCaracter(); break; case 39: // ESTADO DE ERROR bool control = controlExcepcion(caracterActual); while (!control) { leerSiguienteCaracter(); control = controlExcepcion(caracterActual); if (!control) { lexemareserva += caracterActual; } } //devolverPuntero(); Error r = Error.crear(lexemareserva, "LEXICOS", "ERROR CADENA", "No se reconoce ninguna letra con la cadena ingresada", numeroLineaActual, puntero - lexemareserva.Length, (puntero - 1)); ManejadorErrores.obtenerManejadorErrores().reportarError(r); componente = ComponenteLexico.crear(lexemareserva, lexema, "ERROR SINTACTICO", numeroLineaActual, puntero - lexemareserva.Length, (puntero - 1)); //TablaSimbolos.ObtenerInstancia().agregar(componente); TablaErrores.ObtenerInstancia().agregar(r); continuarAnalisis = false; break; case 40: leerSiguienteCaracter(); if (caracterActual.Equals(" ")) { estadoActual = 41; } else if (caracterActual.Equals(".")) { lexemareserva += caracterActual; estadoActual = 47; } else if (caracterActual.Equals("-")) { lexemareserva += caracterActual; estadoActual = 42; } else { estadoActual = 39; } break; case 41: leerSiguienteCaracter(); lexema = lexema + 'T'; devolverPuntero(); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Letra", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 42: leerSiguienteCaracter(); if (caracterActual.Equals(" ")) { estadoActual = 43; } else if (caracterActual.Equals(".")) { lexemareserva += caracterActual; estadoActual = 49; } else if (caracterActual.Equals("-")) { lexemareserva += caracterActual; estadoActual = 44; } else { estadoActual = 39; } break; case 43: leerSiguienteCaracter(); lexema = lexema + 'M'; devolverPuntero(); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Letra", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 44: leerSiguienteCaracter(); if (caracterActual.Equals(" ")) { estadoActual = 45; } else if (caracterActual.Equals(".")) { lexemareserva += caracterActual; estadoActual = 69; } else if (caracterActual.Equals("-")) { lexemareserva += caracterActual; estadoActual = 46; } else { estadoActual = 39; } break; case 45: leerSiguienteCaracter(); lexema = lexema + 'O'; devolverPuntero(); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Letra", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 46: leerSiguienteCaracter(); if (caracterActual.Equals(".")) { lexemareserva += caracterActual; estadoActual = 70; } else if (caracterActual.Equals("-")) { lexemareserva += caracterActual; estadoActual = 72; } break; case 47: leerSiguienteCaracter(); if (caracterActual.Equals(" ")) { estadoActual = 48; } else if (caracterActual.Equals(".")) { lexemareserva += caracterActual; estadoActual = 57; } else if (caracterActual.Equals("-")) { lexemareserva += caracterActual; estadoActual = 58; } else { estadoActual = 39; } break; case 48: leerSiguienteCaracter(); lexema = lexema + 'N'; devolverPuntero(); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Letra", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 49: leerSiguienteCaracter(); if (caracterActual.Equals(" ")) { estadoActual = 50; } else if (caracterActual.Equals(".")) { lexemareserva += caracterActual; estadoActual = 51; } else if (caracterActual.Equals("-")) { lexemareserva += caracterActual; estadoActual = 55; } else { estadoActual = 39; } break; case 50: leerSiguienteCaracter(); lexema = lexema + 'G'; devolverPuntero(); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Letra", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 51: leerSiguienteCaracter(); if (caracterActual.Equals(" ")) { estadoActual = 52; } else if (caracterActual.Equals(".")) { lexemareserva += caracterActual; estadoActual = 53; } else if (caracterActual.Equals("-")) { lexemareserva += caracterActual; estadoActual = 39; } else { estadoActual = 39; } break; case 52: leerSiguienteCaracter(); lexema = lexema + 'Z'; devolverPuntero(); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Letra", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 53: leerSiguienteCaracter(); if (caracterActual.Equals(" ")) { estadoActual = 54; } else { estadoActual = 39; } break; case 54: leerSiguienteCaracter(); lexema = lexema + '7'; devolverPuntero(); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Número", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 55: leerSiguienteCaracter(); if (caracterActual.Equals(" ")) { estadoActual = 56; } else { estadoActual = 39; } break; case 56: leerSiguienteCaracter(); lexema = lexema + 'Q'; devolverPuntero(); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Letra", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 57: leerSiguienteCaracter(); if (caracterActual.Equals(" ")) { estadoActual = 59; } else if (caracterActual.Equals(".")) { lexemareserva += caracterActual; estadoActual = 60; } else if (caracterActual.Equals("-")) { lexemareserva += caracterActual; estadoActual = 61; } else { estadoActual = 39; } break; case 58: leerSiguienteCaracter(); if (caracterActual.Equals(" ")) { estadoActual = 66; } else if (caracterActual.Equals(".")) { lexemareserva += caracterActual; estadoActual = 67; } else if (caracterActual.Equals("-")) { lexemareserva += caracterActual; estadoActual = 79; } else { estadoActual = 39; } break; case 59: leerSiguienteCaracter(); lexema = lexema + 'D'; devolverPuntero(); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Letra", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 60: leerSiguienteCaracter(); if (caracterActual.Equals(" ")) { estadoActual = 62; } else if (caracterActual.Equals(".")) { lexemareserva += caracterActual; estadoActual = 63; } else { estadoActual = 39; } break; case 61: leerSiguienteCaracter(); if (caracterActual.Equals(" ")) { estadoActual = 65; } else { estadoActual = 39; } break; case 62: leerSiguienteCaracter(); lexema = lexema + 'B'; devolverPuntero(); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Letra", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 63: leerSiguienteCaracter(); if (caracterActual.Equals(" ")) { estadoActual = 64; } else { estadoActual = 39; } break; case 64: leerSiguienteCaracter(); lexema = lexema + '6'; devolverPuntero(); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Número", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 65: leerSiguienteCaracter(); lexema = lexema + 'X'; devolverPuntero(); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Letra", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 66: leerSiguienteCaracter(); lexema = lexema + 'K'; devolverPuntero(); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Letra", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 67: leerSiguienteCaracter(); if (caracterActual.Equals(" ")) { estadoActual = 68; } else { estadoActual = 39; } break; case 68: leerSiguienteCaracter(); lexema = lexema + 'C'; devolverPuntero(); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Letra", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 69: leerSiguienteCaracter(); if (caracterActual.Equals(".")) { lexemareserva += caracterActual; estadoActual = 74; } else { estadoActual = 39; } break; case 70: leerSiguienteCaracter(); if (caracterActual.Equals(" ")) { estadoActual = 71; } else { estadoActual = 39; } break; case 71: leerSiguienteCaracter(); lexema = lexema + '9'; devolverPuntero(); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Número", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 72: leerSiguienteCaracter(); if (caracterActual.Equals(" ")) { estadoActual = 73; } else { estadoActual = 39; } break; case 73: leerSiguienteCaracter(); lexema = lexema + '0'; devolverPuntero(); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Número", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 74: leerSiguienteCaracter(); if (caracterActual.Equals(" ")) { estadoActual = 75; } else { estadoActual = 39; } break; case 75: leerSiguienteCaracter(); lexema = lexema + '8'; devolverPuntero(); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Número", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 76: //Salto de línea continuarAnalisis = true; estadoActual = 0; lexema = lexema + " "; cargarNuevaLinea(); break; case 77: //Cargar componente continuarAnalisis = false; estadoActual = 0; componente = ComponenteLexico.crear(lexemareserva, lexema, "FIN DE ARCHIVO", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 78: leerSiguienteCaracter(); continuarAnalisis = true; estadoActual = 0; lexema = lexema + " "; //devolverPuntero(); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Espacio", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 79: leerSiguienteCaracter(); if (" ".Equals(caracterActual)) { estadoActual = 80; } else { estadoActual = 39; } break; case 80: //leerSiguienteCaracter(); lexema = lexema + 'Y'; devolverPuntero(); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Letra", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; } } return(componente); }
public static void inicializar() { tabla.Add("int", ComponenteLexico.crear("int", Categoria.PALABRA_RESERVADA_ON)); tabla.Add("on", ComponenteLexico.crear("on", Categoria.PALABRA_RESERVADA_OFF)); tabla.Add("off", ComponenteLexico.crear("off", Categoria.PALABRA_RESERVADA_OFF)); }
public ComponenteLexico Analizar() { ComponenteLexico componenteLexico = new ComponenteLexico(); limpiarLexema(); int estadoActual = 0; bool continuarAnalisis = true; while (continuarAnalisis) { if (estadoActual == 0) { LeerSiguienteCaracter(); DevorarEspaciosBlanco(); if (CaracterActual == "0" || CaracterActual == "1") { estadoActual = 1; concatenarLexema(); } else if (CaracterActual == "#") { estadoActual = 6; concatenarLexema(); } else if (CaracterActual == "K") { estadoActual = 60; concatenarLexema(); } else if (CaracterActual == "C") { estadoActual = 58; concatenarLexema(); } else if (CaracterActual == "I") { estadoActual = 7; concatenarLexema(); } else if (CaracterActual == "O") { estadoActual = 9; concatenarLexema(); } else if (CaracterActual == "U") { estadoActual = 15; concatenarLexema(); } else if (CaracterActual == "D") { estadoActual = 17; concatenarLexema(); } else if (CaracterActual == "G") { estadoActual = 21; concatenarLexema(); } else if (CaracterActual == "S") { estadoActual = 24; concatenarLexema(); } else if (CaracterActual == "R") { estadoActual = 46; concatenarLexema(); } else if (CaracterActual == "F") { estadoActual = 54; concatenarLexema(); } else if (CaracterActual == "@FL@") { estadoActual = 61; } else if (CaracterActual == "@EOF@") { estadoActual = 62; concatenarLexema(); } else { estadoActual = 63; } } else if (estadoActual == 1) { LeerSiguienteCaracter(); if (CaracterActual == "0" || CaracterActual == "1") { estadoActual = 2; concatenarLexema(); } else { estadoActual = 96; } } else if (estadoActual == 2) { LeerSiguienteCaracter(); if (CaracterActual == "0" || CaracterActual == "1") { estadoActual = 3; concatenarLexema(); } else { estadoActual = 96; } } else if (estadoActual == 3) { LeerSiguienteCaracter(); if (CaracterActual == "0" || CaracterActual == "1") { estadoActual = 4; concatenarLexema(); } else { estadoActual = 5; } } else if (estadoActual == 4) { estadoActual = 64; } else if (estadoActual == 5) { DevolverPuntero(); continuarAnalisis = false; componenteLexico = ComponenteLexico.crear(lexema, Categoria.VALOR_ENVIO, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1); TablaMaestra.SincronizarSimbolo(componenteLexico); limpiarLexema(); } else if (estadoActual == 6) { estadoActual = 65; } else if (estadoActual == 7) { LeerSiguienteCaracter(); if (CaracterActual == "N") { estadoActual = 8; concatenarLexema(); } else { estadoActual = 83; } } else if (estadoActual == 8) { estadoActual = 78; } else if (estadoActual == 9) { LeerSiguienteCaracter(); if (CaracterActual == "U") { estadoActual = 10; concatenarLexema(); } else if (CaracterActual == "N") { estadoActual = 12; concatenarLexema(); } else if (CaracterActual == "F") { estadoActual = 13; concatenarLexema(); } else { estadoActual = 63; } } else if (estadoActual == 10) { LeerSiguienteCaracter(); if (CaracterActual == "T") { estadoActual = 11; concatenarLexema(); } else { estadoActual = 85; } } else if (estadoActual == 11) { estadoActual = 66; } else if (estadoActual == 12) { estadoActual = 67; } else if (estadoActual == 13) { LeerSiguienteCaracter(); if (CaracterActual == "F") { estadoActual = 14; concatenarLexema(); } else { estadoActual = 86; } } else if (estadoActual == 14) { estadoActual = 68; } else if (estadoActual == 15) { LeerSiguienteCaracter(); if (CaracterActual == "P") { estadoActual = 16; concatenarLexema(); } else { estadoActual = 88; } } else if (estadoActual == 16) { estadoActual = 69; } else if (estadoActual == 17) { LeerSiguienteCaracter(); if (CaracterActual == "O") { estadoActual = 18; concatenarLexema(); } else { estadoActual = 89; } } else if (estadoActual == 18) { LeerSiguienteCaracter(); if (CaracterActual == "W") { estadoActual = 19; concatenarLexema(); } else { estadoActual = 89; } } else if (estadoActual == 19) { LeerSiguienteCaracter(); if (CaracterActual == "N") { estadoActual = 20; concatenarLexema(); } else { estadoActual = 89; } } else if (estadoActual == 20) { estadoActual = 70; } else if (estadoActual == 21) { LeerSiguienteCaracter(); if (CaracterActual == "E") { estadoActual = 22; concatenarLexema(); } else { estadoActual = 90; } } else if (estadoActual == 22) { LeerSiguienteCaracter(); if (CaracterActual == "T") { estadoActual = 23; concatenarLexema(); } else { estadoActual = 90; } } else if (estadoActual == 23) { estadoActual = 71; } else if (estadoActual == 24) { LeerSiguienteCaracter(); if (CaracterActual == "T") { estadoActual = 25; concatenarLexema(); } else if (CaracterActual == "H") { estadoActual = 32; concatenarLexema(); } else if (CaracterActual == "U") { estadoActual = 40; concatenarLexema(); } else { estadoActual = 63; } } else if (estadoActual == 25) { LeerSiguienteCaracter(); if (CaracterActual == "A") { estadoActual = 26; concatenarLexema(); } else { estadoActual = 63; } } else if (estadoActual == 26) { LeerSiguienteCaracter(); if (CaracterActual == "R") { estadoActual = 27; concatenarLexema(); } else if (CaracterActual == "T") { estadoActual = 29; concatenarLexema(); } else { estadoActual = 63; } } else if (estadoActual == 27) { LeerSiguienteCaracter(); if (CaracterActual == "T") { estadoActual = 28; concatenarLexema(); } else { estadoActual = 92; } } else if (estadoActual == 28) { estadoActual = 79; } else if (estadoActual == 29) { LeerSiguienteCaracter(); if (CaracterActual == "U") { estadoActual = 30; concatenarLexema(); } else { estadoActual = 93; } } else if (estadoActual == 30) { LeerSiguienteCaracter(); if (CaracterActual == "S") { estadoActual = 31; concatenarLexema(); } else { estadoActual = 93; } } else if (estadoActual == 31) { estadoActual = 72; } else if (estadoActual == 32) { LeerSiguienteCaracter(); if (CaracterActual == "U") { estadoActual = 33; concatenarLexema(); } else { estadoActual = 94; } } else if (estadoActual == 33) { LeerSiguienteCaracter(); if (CaracterActual == "T") { estadoActual = 34; concatenarLexema(); } else { estadoActual = 94; } } else if (estadoActual == 34) { LeerSiguienteCaracter(); if (CaracterActual == "D") { estadoActual = 35; concatenarLexema(); } else { estadoActual = 94; } } else if (estadoActual == 35) { LeerSiguienteCaracter(); if (CaracterActual == "O") { estadoActual = 36; concatenarLexema(); } else { estadoActual = 94; } } else if (estadoActual == 36) { LeerSiguienteCaracter(); if (CaracterActual == "W") { estadoActual = 37; concatenarLexema(); } else { estadoActual = 94; } } else if (estadoActual == 37) { LeerSiguienteCaracter(); if (CaracterActual == "N") { estadoActual = 38; concatenarLexema(); } else { estadoActual = 94; } } else if (estadoActual == 38) { estadoActual = 80; } else if (estadoActual == 39) { DevolverPuntero(); continuarAnalisis = false; componenteLexico = ComponenteLexico.crear(lexema, Categoria.FARENHEIT, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1); TablaMaestra.SincronizarSimbolo(componenteLexico); limpiarLexema(); } else if (estadoActual == 40) { LeerSiguienteCaracter(); if (CaracterActual == "C") { estadoActual = 41; concatenarLexema(); } else { estadoActual = 95; } } else if (estadoActual == 41) { LeerSiguienteCaracter(); if (CaracterActual == "C") { estadoActual = 42; concatenarLexema(); } else { estadoActual = 95; } } else if (estadoActual == 42) { LeerSiguienteCaracter(); if (CaracterActual == "E") { estadoActual = 43; concatenarLexema(); } else { estadoActual = 95; } } else if (estadoActual == 43) { LeerSiguienteCaracter(); if (CaracterActual == "S") { estadoActual = 44; concatenarLexema(); } else { estadoActual = 95; } } else if (estadoActual == 44) { LeerSiguienteCaracter(); if (CaracterActual == "S") { estadoActual = 45; concatenarLexema(); } else { estadoActual = 95; } } else if (estadoActual == 45) { estadoActual = 73; } else if (estadoActual == 46) { LeerSiguienteCaracter(); if (CaracterActual == "E") { estadoActual = 47; concatenarLexema(); } else { estadoActual = 53; } } else if (estadoActual == 47) { LeerSiguienteCaracter(); if (CaracterActual == "S") { estadoActual = 48; concatenarLexema(); } else { estadoActual = 87; } } else if (estadoActual == 48) { LeerSiguienteCaracter(); if (CaracterActual == "T") { estadoActual = 49; concatenarLexema(); } else { estadoActual = 87; } } else if (estadoActual == 49) { LeerSiguienteCaracter(); if (CaracterActual == "A") { estadoActual = 50; concatenarLexema(); } else { estadoActual = 87; } } else if (estadoActual == 50) { LeerSiguienteCaracter(); if (CaracterActual == "R") { estadoActual = 51; concatenarLexema(); } else { estadoActual = 87; } } else if (estadoActual == 51) { LeerSiguienteCaracter(); if (CaracterActual == "T") { estadoActual = 52; concatenarLexema(); } else { estadoActual = 87; } } else if (estadoActual == 52) { estadoActual = 74; } else if (estadoActual == 53) { DevolverPuntero(); continuarAnalisis = false; componenteLexico = ComponenteLexico.crear(lexema, Categoria.RANKINE, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1); TablaMaestra.SincronizarSimbolo(componenteLexico); limpiarLexema(); } else if (estadoActual == 54) { LeerSiguienteCaracter(); if (CaracterActual == "A") { estadoActual = 55; concatenarLexema(); } else { estadoActual = 39; } } else if (estadoActual == 55) { LeerSiguienteCaracter(); if (CaracterActual == "I") { estadoActual = 56; concatenarLexema(); } else { estadoActual = 91; } } else if (estadoActual == 56) { LeerSiguienteCaracter(); if (CaracterActual == "L") { estadoActual = 57; concatenarLexema(); } else { estadoActual = 91; } } else if (estadoActual == 57) { estadoActual = 75; } else if (estadoActual == 58) { estadoActual = 76; } else if (estadoActual == 59) { continuarAnalisis = false; componenteLexico = ComponenteLexico.crear(lexema, Categoria.KELVIN, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1); TablaMaestra.SincronizarSimbolo(componenteLexico); limpiarLexema(); } else if (estadoActual == 60) { estadoActual = 59; } else if (estadoActual == 61) { CargarNuevaLinea(); limpiarLexema(); estadoActual = 0; } else if (estadoActual == 62) { estadoActual = 77; } else if (estadoActual == 64) { continuarAnalisis = false; componenteLexico = ComponenteLexico.crear(lexema, Categoria.VALOR_RETORNO, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1); TablaMaestra.SincronizarSimbolo(componenteLexico); limpiarLexema(); } else if (estadoActual == 65) { continuarAnalisis = false; componenteLexico = ComponenteLexico.crear(lexema, Categoria.SEPARADOR, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1); TablaMaestra.SincronizarSimbolo(componenteLexico); limpiarLexema(); } else if (estadoActual == 66) { continuarAnalisis = false; componenteLexico = ComponenteLexico.crear(lexema, Categoria.OUT, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1); TablaMaestra.SincronizarSimbolo(componenteLexico); limpiarLexema(); } else if (estadoActual == 72) { continuarAnalisis = false; componenteLexico = ComponenteLexico.crear(lexema, Categoria.STATUS, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1); TablaMaestra.SincronizarSimbolo(componenteLexico); limpiarLexema(); } else if (estadoActual == 73) { continuarAnalisis = false; componenteLexico = ComponenteLexico.crear(lexema, Categoria.SUCCESS, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1); TablaMaestra.SincronizarSimbolo(componenteLexico); limpiarLexema(); } else if (estadoActual == 74) { continuarAnalisis = false; componenteLexico = ComponenteLexico.crear(lexema, Categoria.RESTART, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1); TablaMaestra.SincronizarSimbolo(componenteLexico); limpiarLexema(); } //eof else if (estadoActual == 77) { continuarAnalisis = false; componenteLexico = ComponenteLexico.crear(lexema, Categoria.EOF, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1); limpiarLexema(); } else if (estadoActual == 78) { continuarAnalisis = false; componenteLexico = ComponenteLexico.crear(lexema, Categoria.IN, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1); TablaMaestra.SincronizarSimbolo(componenteLexico); limpiarLexema(); } else if (estadoActual == 67) { continuarAnalisis = false; componenteLexico = ComponenteLexico.crear(lexema, Categoria.ON, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1); TablaMaestra.SincronizarSimbolo(componenteLexico); limpiarLexema(); } else if (estadoActual == 68) { continuarAnalisis = false; componenteLexico = ComponenteLexico.crear(lexema, Categoria.OFF, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1); TablaMaestra.SincronizarSimbolo(componenteLexico); limpiarLexema(); } else if (estadoActual == 69) { continuarAnalisis = false; componenteLexico = ComponenteLexico.crear(lexema, Categoria.UP, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1); TablaMaestra.SincronizarSimbolo(componenteLexico); limpiarLexema(); } else if (estadoActual == 70) { continuarAnalisis = false; componenteLexico = ComponenteLexico.crear(lexema, Categoria.DOWN, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1); TablaMaestra.SincronizarSimbolo(componenteLexico); limpiarLexema(); } else if (estadoActual == 71) { continuarAnalisis = false; componenteLexico = ComponenteLexico.crear(lexema, Categoria.GET, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1); TablaMaestra.SincronizarSimbolo(componenteLexico); limpiarLexema(); } else if (estadoActual == 75) { continuarAnalisis = false; componenteLexico = ComponenteLexico.crear(lexema, Categoria.FAIL, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1); TablaMaestra.SincronizarSimbolo(componenteLexico); limpiarLexema(); } else if (estadoActual == 76) { continuarAnalisis = false;; componenteLexico = ComponenteLexico.crear(lexema, Categoria.CENTIGRADOS, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1); TablaMaestra.SincronizarSimbolo(componenteLexico); limpiarLexema(); } else if (estadoActual == 79) { continuarAnalisis = false; componenteLexico = ComponenteLexico.crear(lexema, Categoria.START, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1); TablaMaestra.SincronizarSimbolo(componenteLexico); limpiarLexema(); } else if (estadoActual == 80) { continuarAnalisis = false; componenteLexico = ComponenteLexico.crear(lexema, Categoria.SHUTDOWN, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1); TablaMaestra.SincronizarSimbolo(componenteLexico); limpiarLexema(); } //stopper else if (estadoActual == 63) { Error error = Error.CrearErrorLexico( CaracterActual, Categoria.CARACTER_NO_VALIDO, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1, "Caracter no reconocido", "Leí " + CaracterActual, "Asegurese que el caracter sera valido"); GestorErrores.Reportar(error); throw new Exception("Se ha presentado un error de tipo STOPPER durante el análisis lexico. Por favor verifique la consola de errores"); } else if (estadoActual == 83) { continuarAnalisis = false; DevolverPuntero(); Error error = Error.CrearErrorLexico( lexema, Categoria.IN, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1, "IN no válido", "Leí " + lexema + " y se esperaba un IN", "asegurese de que la instrucción esté escrita correctamente"); GestorErrores.Reportar(error); componenteLexico = ComponenteLexico.crear("IN", Categoria.IN, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1); componenteLexico.Tipo = TipoComponente.DUMMY; TablaMaestra.SincronizarSimbolo(componenteLexico); limpiarLexema(); } else if (estadoActual == 85) { continuarAnalisis = false; DevolverPuntero(); Error error = Error.CrearErrorLexico( lexema, Categoria.OUT, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1, "OUT no válido", "Leí " + lexema + " y se esperaba un OUT", "asegurese de que la instrucción esté escrita correctamente"); GestorErrores.Reportar(error); componenteLexico = ComponenteLexico.crear("OUT", Categoria.OUT, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1); componenteLexico.Tipo = TipoComponente.DUMMY; TablaMaestra.SincronizarSimbolo(componenteLexico); limpiarLexema(); } else if (estadoActual == 86) { continuarAnalisis = false; DevolverPuntero(); Error error = Error.CrearErrorLexico( lexema, Categoria.OFF, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1, "OFF no válido", "Leí " + lexema + " y se esperaba un OFF", "asegurese de que la instrucción esté escrita correctamente"); GestorErrores.Reportar(error); componenteLexico = ComponenteLexico.crear("OFF", Categoria.OFF, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1); componenteLexico.Tipo = TipoComponente.DUMMY; TablaMaestra.SincronizarSimbolo(componenteLexico); limpiarLexema(); } else if (estadoActual == 88) { continuarAnalisis = false; DevolverPuntero(); Error error = Error.CrearErrorLexico( lexema, Categoria.UP, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1, "UP no válido", "Leí " + lexema + " y se esperaba un UP", "asegurese de que la instrucción esté escrita correctamente"); GestorErrores.Reportar(error); componenteLexico = ComponenteLexico.crear("UP", Categoria.UP, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1); componenteLexico.Tipo = TipoComponente.DUMMY; TablaMaestra.SincronizarSimbolo(componenteLexico); limpiarLexema(); } else if (estadoActual == 89) { continuarAnalisis = false; DevolverPuntero(); Error error = Error.CrearErrorLexico( lexema, Categoria.DOWN, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1, "DOWN no válido", "Leí " + lexema + " y se esperaba un DOWN", "asegurese de que la instrucción esté escrita correctamente"); GestorErrores.Reportar(error); componenteLexico = ComponenteLexico.crear("DOWN", Categoria.DOWN, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1); componenteLexico.Tipo = TipoComponente.DUMMY; TablaMaestra.SincronizarSimbolo(componenteLexico); limpiarLexema(); } else if (estadoActual == 90) { continuarAnalisis = false; DevolverPuntero(); Error error = Error.CrearErrorLexico( lexema, Categoria.GET, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1, "GET no válido", "Leí " + lexema + " y se esperaba un GET", "asegurese de que la instrucción esté escrita correctamente"); GestorErrores.Reportar(error); componenteLexico = ComponenteLexico.crear("GET", Categoria.GET, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1); componenteLexico.Tipo = TipoComponente.DUMMY; TablaMaestra.SincronizarSimbolo(componenteLexico); limpiarLexema(); } else if (estadoActual == 92) { continuarAnalisis = false; DevolverPuntero(); Error error = Error.CrearErrorLexico( lexema, Categoria.START, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1, "START no válido", "Leí " + lexema + " y se esperaba un START", "asegurese de que la instrucción esté escrita correctamente"); GestorErrores.Reportar(error); componenteLexico = ComponenteLexico.crear("START", Categoria.START, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1); componenteLexico.Tipo = TipoComponente.DUMMY; TablaMaestra.SincronizarSimbolo(componenteLexico); limpiarLexema(); } else if (estadoActual == 93) { continuarAnalisis = false; DevolverPuntero(); Error error = Error.CrearErrorLexico( lexema, Categoria.STATUS, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1, "STATUS no válido", "Leí " + lexema + " y se esperaba un STATUS", "asegurese de que la instrucción esté escrita correctamente"); GestorErrores.Reportar(error); componenteLexico = ComponenteLexico.crear("STATUS", Categoria.STATUS, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1); componenteLexico.Tipo = TipoComponente.DUMMY; TablaMaestra.SincronizarSimbolo(componenteLexico); limpiarLexema(); } else if (estadoActual == 94) { continuarAnalisis = false; DevolverPuntero(); Error error = Error.CrearErrorLexico( lexema, Categoria.SHUTDOWN, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1, "SHUTDOWN no válido", "Leí " + lexema + " y se esperaba un SHUTDOWN", "asegurese de que la instrucción esté escrita correctamente"); GestorErrores.Reportar(error); componenteLexico = ComponenteLexico.crear("SHUTDOWN", Categoria.SHUTDOWN, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1); componenteLexico.Tipo = TipoComponente.DUMMY; TablaMaestra.SincronizarSimbolo(componenteLexico); limpiarLexema(); } else if (estadoActual == 95) { continuarAnalisis = false; DevolverPuntero(); Error error = Error.CrearErrorLexico( lexema, Categoria.SUCCESS, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1, "SUCCESS no válido", "Leí " + lexema + " y se esperaba un SUCCESS", "asegurese de que la instrucción esté escrita correctamente"); GestorErrores.Reportar(error); componenteLexico = ComponenteLexico.crear("SUCCESS", Categoria.SUCCESS, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1); componenteLexico.Tipo = TipoComponente.DUMMY; TablaMaestra.SincronizarSimbolo(componenteLexico); limpiarLexema(); } else if (estadoActual == 87) { continuarAnalisis = false; DevolverPuntero(); Error error = Error.CrearErrorLexico( lexema, Categoria.RESTART, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1, "RESTART no válido", "Leí " + lexema + " y se esperaba un RESTART", "asegurese de que la instrucción esté escrita correctamente"); GestorErrores.Reportar(error); componenteLexico = ComponenteLexico.crear("RESTART", Categoria.RESTART, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1); componenteLexico.Tipo = TipoComponente.DUMMY; TablaMaestra.SincronizarSimbolo(componenteLexico); limpiarLexema(); } else if (estadoActual == 91) { continuarAnalisis = false; DevolverPuntero(); Error error = Error.CrearErrorLexico( lexema, Categoria.FAIL, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1, "FAIL no válido", "Leí " + lexema + " y se esperaba un FAIL", "asegurese de que la instrucción esté escrita correctamente"); GestorErrores.Reportar(error); componenteLexico = ComponenteLexico.crear("FAIL", Categoria.FAIL, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1); componenteLexico.Tipo = TipoComponente.DUMMY; TablaMaestra.SincronizarSimbolo(componenteLexico); limpiarLexema(); } else if (estadoActual == 96) { continuarAnalisis = false; DevolverPuntero(); Error error = Error.CrearErrorLexico( lexema, Categoria.VALOR_ENVIO, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1, "VALOR_ENVIO no válido", "Leí " + lexema + " y se esperaba un VALOR_ENVIO", "asegurese de que la instrucción esté escrita correctamente"); GestorErrores.Reportar(error); componenteLexico = ComponenteLexico.crear("000", Categoria.VALOR_ENVIO, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1); componenteLexico.Tipo = TipoComponente.DUMMY; TablaMaestra.SincronizarSimbolo(componenteLexico); limpiarLexema(); } } return(componenteLexico); }
public ComponenteLexico Analizar() { ComponenteLexico componenteLexico = new ComponenteLexico(); limpiarLexema(); int estadoActual = 0; bool continuarAnalisis = true; while (continuarAnalisis) { if (estadoActual == 0) { LeerSiguienteCaracter(); DevorarEspaciosBlanco(); if (EsLetra(CaracterActual) || CaracterActual.Equals("$") || CaracterActual.Equals("_")) { estadoActual = 4; concatenarLexema(); } else if (EsDigito(CaracterActual)) { estadoActual = 1; concatenarLexema(); } else if (CaracterActual.Equals("+")) { estadoActual = 5; concatenarLexema(); } else if (CaracterActual.Equals("-")) { estadoActual = 6; concatenarLexema(); } else if (CaracterActual.Equals("*")) { estadoActual = 7; concatenarLexema(); } else if (CaracterActual.Equals("/")) { estadoActual = 8; concatenarLexema(); } else if (CaracterActual.Equals("(")) { estadoActual = 10; concatenarLexema(); } else if (CaracterActual.Equals(")")) { estadoActual = 11; concatenarLexema(); } else if (CaracterActual.Equals("@EOF@")) { estadoActual = 12; concatenarLexema(); } else if (CaracterActual.Equals("=")) { estadoActual = 19; concatenarLexema(); } else if (CaracterActual.Equals("<")) { estadoActual = 20; concatenarLexema(); } else if (CaracterActual.Equals(">")) { estadoActual = 21; concatenarLexema(); } else if (CaracterActual.Equals(":")) { estadoActual = 22; concatenarLexema(); } else if (CaracterActual.Equals("!")) { estadoActual = 30; concatenarLexema(); } else if (CaracterActual.Equals("@FL@")) { estadoActual = 13; } else { estadoActual = 18; } } else if (estadoActual == 1) { LeerSiguienteCaracter(); if (EsDigito(CaracterActual)) { estadoActual = 1; concatenarLexema(); } else if (CaracterActual.Equals(",")) { estadoActual = 2; concatenarLexema(); } else { estadoActual = 14; } } else if (estadoActual == 2) { LeerSiguienteCaracter(); if (EsDigito(CaracterActual)) { estadoActual = 3; concatenarLexema(); } else { estadoActual = 17; } } else if (estadoActual == 3) { LeerSiguienteCaracter(); if (EsDigito(CaracterActual)) { estadoActual = 3; concatenarLexema(); } else { estadoActual = 15; } } else if (estadoActual == 4) { LeerSiguienteCaracter(); if (EsLetraODigito(CaracterActual) || CaracterActual.Equals("$") || CaracterActual.Equals("_")) { estadoActual = 4; concatenarLexema(); } else { estadoActual = 16; } } else if (estadoActual == 5) { continuarAnalisis = false; componenteLexico = ComponenteLexico.crear(lexema, Categoria.SUMA, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1); componenteLexico.Tipo = TipoComponente.SIMBOLO; MensajeRetorno(componenteLexico); TablaMaestra.SincronizarSimbolo(componenteLexico); limpiarLexema(); } else if (estadoActual == 6) { continuarAnalisis = false; componenteLexico = ComponenteLexico.crear(lexema, Categoria.RESTA, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1); componenteLexico.Tipo = TipoComponente.SIMBOLO; MensajeRetorno(componenteLexico); TablaMaestra.SincronizarSimbolo(componenteLexico); limpiarLexema(); } else if (estadoActual == 7) { continuarAnalisis = false; componenteLexico = ComponenteLexico.crear(lexema, Categoria.MULTIPLICACION, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1); componenteLexico.Tipo = TipoComponente.SIMBOLO; MensajeRetorno(componenteLexico); TablaMaestra.SincronizarSimbolo(componenteLexico); limpiarLexema(); } else if (estadoActual == 8) { LeerSiguienteCaracter(); if (CaracterActual.Equals("*")) { estadoActual = 34; concatenarLexema(); } else if (CaracterActual.Equals("/")) { estadoActual = 36; concatenarLexema(); } else { estadoActual = 33; } } else if (estadoActual == 9) { continuarAnalisis = false; componenteLexico = ComponenteLexico.crear(lexema, Categoria.MODULO, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1); componenteLexico.Tipo = TipoComponente.SIMBOLO; MensajeRetorno(componenteLexico); TablaMaestra.SincronizarSimbolo(componenteLexico); limpiarLexema(); } else if (estadoActual == 10) { continuarAnalisis = false; componenteLexico = ComponenteLexico.crear(lexema, Categoria.PARENTESIS_ABRE, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1); componenteLexico.Tipo = TipoComponente.SIMBOLO; MensajeRetorno(componenteLexico); TablaMaestra.SincronizarSimbolo(componenteLexico); limpiarLexema(); } else if (estadoActual == 11) { continuarAnalisis = false; componenteLexico = ComponenteLexico.crear(lexema, Categoria.PARENTESIS_CIERRA, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1); componenteLexico.Tipo = TipoComponente.SIMBOLO; MensajeRetorno(componenteLexico); TablaMaestra.SincronizarSimbolo(componenteLexico); limpiarLexema(); } //fin de archivo else if (estadoActual == 12) { continuarAnalisis = false; componenteLexico = ComponenteLexico.crear(lexema, Categoria.EOF, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1); componenteLexico.Tipo = TipoComponente.SIMBOLO; //TablaMaestra.SincronizarSimbolo(componenteLexico); limpiarLexema(); } //cargar nueva linea else if (estadoActual == 13) { CargarNuevaLinea(); limpiarLexema(); estadoActual = 0; } else if (estadoActual == 14) { continuarAnalisis = false; DevolverPuntero(); componenteLexico = ComponenteLexico.crear(lexema, Categoria.ENTERO, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1); componenteLexico.Tipo = TipoComponente.SIMBOLO; MensajeRetorno(componenteLexico); TablaMaestra.SincronizarSimbolo(componenteLexico); limpiarLexema(); } else if (estadoActual == 15) { continuarAnalisis = false; DevolverPuntero(); componenteLexico = ComponenteLexico.crear(lexema, Categoria.NUMERO_DECIMAL, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1); componenteLexico.Tipo = TipoComponente.SIMBOLO; MensajeRetorno(componenteLexico); TablaMaestra.SincronizarSimbolo(componenteLexico); limpiarLexema(); } else if (estadoActual == 16) { continuarAnalisis = false; DevolverPuntero(); componenteLexico = ComponenteLexico.crear(lexema, Categoria.IDENTIFICADOR, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1); componenteLexico.Tipo = TipoComponente.SIMBOLO; MensajeRetorno(componenteLexico); TablaMaestra.SincronizarSimbolo(componenteLexico); limpiarLexema(); } //estado de error else if (estadoActual == 17) { continuarAnalisis = false; DevolverPuntero(); Error error = Error.CrearErrorLexico( lexema, Categoria.NUMERO_DECIMAL, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1, "Numero decimal no válido", "Leí" + CaracterActual + "y esperaba un digito del cero al 9", "asegurese que el caracter que reciba sea un caracter del 0 al 9"); GestorErrores.Reportar(error); componenteLexico = new ComponenteLexico(); componenteLexico.Categoria = Categoria.NUMERO_DECIMAL; componenteLexico.Lexema = lexema + "0"; componenteLexico.NumeroLinea = NumeroLineaActual; componenteLexico.PosicionInicial = Puntero - lexema.Length; componenteLexico.PosicionFinal = Puntero - 1; componenteLexico.Tipo = TipoComponente.DUMMY; MensajeRetorno(componenteLexico); TablaMaestra.SincronizarSimbolo(componenteLexico); limpiarLexema(); } //estado de error else if (estadoActual == 18) { Error error = Error.CrearErrorLexico( CaracterActual, Categoria.CARACTER_NO_VALIDO, NumeroLineaActual, Puntero - 1, Puntero - 1, "Caracter no reconocido", "Leí" + CaracterActual, "Asegurese que el caracter sera valido"); GestorErrores.Reportar(error); throw new Exception("Se ha presentado un error de tipo STOPPER durante el analisis lexico. Por favor verifique la consola de errores"); } else if (estadoActual == 19) { continuarAnalisis = false; DevolverPuntero(); componenteLexico = new ComponenteLexico(); componenteLexico.Categoria = Categoria.IGUAL_QUE; componenteLexico.Lexema = lexema; componenteLexico.NumeroLinea = NumeroLineaActual; componenteLexico.PosicionInicial = Puntero - lexema.Length; componenteLexico.PosicionFinal = Puntero - 1; MensajeRetorno(componenteLexico); TablaMaestra.SincronizarSimbolo(componenteLexico); limpiarLexema(); } else if (estadoActual == 20) { LeerSiguienteCaracter(); if (CaracterActual.Equals(">")) { estadoActual = 23; concatenarLexema(); } else if (CaracterActual.Equals("=")) { estadoActual = 24; concatenarLexema(); } else { estadoActual = 24; } } else if (estadoActual == 21) { LeerSiguienteCaracter(); if (CaracterActual.Equals("=")) { estadoActual = 26; concatenarLexema(); } else { estadoActual = 27; } } else if (estadoActual == 22) { LeerSiguienteCaracter(); if (CaracterActual.Equals("=")) { estadoActual = 28; concatenarLexema(); } else { estadoActual = 29; } } else if (estadoActual == 23) { continuarAnalisis = false; componenteLexico = ComponenteLexico.crear(lexema, Categoria.DIFERENTE_QUE, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1); componenteLexico.Tipo = TipoComponente.SIMBOLO; MensajeRetorno(componenteLexico); TablaMaestra.SincronizarSimbolo(componenteLexico); limpiarLexema(); } else if (estadoActual == 24) { continuarAnalisis = false; componenteLexico = ComponenteLexico.crear(lexema, Categoria.MENOR_IGUAL_QUE, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1); componenteLexico.Tipo = TipoComponente.SIMBOLO; MensajeRetorno(componenteLexico); TablaMaestra.SincronizarSimbolo(componenteLexico); limpiarLexema(); } else if (estadoActual == 25) { continuarAnalisis = false; DevolverPuntero(); componenteLexico = ComponenteLexico.crear(lexema, Categoria.MENOR_QUE, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1); componenteLexico.Tipo = TipoComponente.SIMBOLO; MensajeRetorno(componenteLexico); TablaMaestra.SincronizarSimbolo(componenteLexico); limpiarLexema(); } else if (estadoActual == 26) { continuarAnalisis = false; componenteLexico = ComponenteLexico.crear(lexema, Categoria.MAYOR_IGUAL_QUE, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1); componenteLexico.Tipo = TipoComponente.SIMBOLO; MensajeRetorno(componenteLexico); TablaMaestra.SincronizarSimbolo(componenteLexico); limpiarLexema(); } else if (estadoActual == 27) { continuarAnalisis = false; DevolverPuntero(); componenteLexico = ComponenteLexico.crear(lexema, Categoria.MAYOR_QUE, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1); componenteLexico.Tipo = TipoComponente.SIMBOLO; MensajeRetorno(componenteLexico); TablaMaestra.SincronizarSimbolo(componenteLexico); limpiarLexema(); } else if (estadoActual == 28) { continuarAnalisis = false; componenteLexico = ComponenteLexico.crear(lexema, Categoria.ASIGNACION, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1); componenteLexico.Tipo = TipoComponente.SIMBOLO; TablaMaestra.SincronizarSimbolo(componenteLexico); MensajeRetorno(componenteLexico); limpiarLexema(); } //estado de error else if (estadoActual == 29) { continuarAnalisis = false; DevolverPuntero(); Error error = Error.CrearErrorLexico( lexema, Categoria.NUMERO_DECIMAL, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1, "Asignación no válida", "Leí" + CaracterActual + " y esperaba =", "asegurese que el caracter que reciba sea ="); GestorErrores.Reportar(error); } else if (estadoActual == 30) { LeerSiguienteCaracter(); if (CaracterActual.Equals("=")) { estadoActual = 31; concatenarLexema(); } else { estadoActual = 32; } } else if (estadoActual == 31) { continuarAnalisis = false; componenteLexico = ComponenteLexico.crear(lexema, Categoria.DIFERENTE_QUE, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1); componenteLexico.Tipo = TipoComponente.SIMBOLO; TablaMaestra.SincronizarSimbolo(componenteLexico); MensajeRetorno(componenteLexico); limpiarLexema(); } //estado de error else if (estadoActual == 32) { continuarAnalisis = false; DevolverPuntero(); Error error = Error.CrearErrorLexico( lexema, Categoria.NUMERO_DECIMAL, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1, "Asignación no válida", "Leí" + CaracterActual + " y esperaba *", "asegurese que el caracter que reciba sea *"); GestorErrores.Reportar(error); } else if (estadoActual == 33) { continuarAnalisis = false; DevolverPuntero(); componenteLexico = ComponenteLexico.crear(lexema, Categoria.DIVISION, NumeroLineaActual, Puntero - lexema.Length, Puntero - 1); componenteLexico.Tipo = TipoComponente.SIMBOLO; MensajeRetorno(componenteLexico); TablaMaestra.SincronizarSimbolo(componenteLexico); limpiarLexema(); } //revisar else if (estadoActual == 34) { LeerSiguienteCaracter(); if (CaracterActual.Equals("@FL@")) { estadoActual = 37; CargarNuevaLinea(); } else if (CaracterActual.Equals("*")) { estadoActual = 35; concatenarLexema(); } else { estadoActual = 34; concatenarLexema(); } } else if (estadoActual == 35) { LeerSiguienteCaracter(); if (CaracterActual.Equals("*")) { estadoActual = 35; concatenarLexema(); } else if (CaracterActual.Equals("/")) { estadoActual = 0; concatenarLexema(); } else { estadoActual = 34; concatenarLexema(); } } else if (estadoActual == 36) { LeerSiguienteCaracter(); if (CaracterActual.Equals("@FL@")) { estadoActual = 13; } else { estadoActual = 36; } } //estado para arreglar else if (estadoActual == 37) { CargarNuevaLinea(); if (CaracterActual.Equals("@FL@")) { estadoActual = 34; } } } return(componenteLexico); }
public ComponenteLexico devolverComponenteLexico() { int estadoActual = 0; string lexema = ""; string lexemareserva = ""; bool continuarAnalisis = true; ComponenteLexico componente = null; while (continuarAnalisis) { switch (estadoActual) { case 0: leerSiguienteCaracter(); while (" ".Equals(caracterActual)) { leerSiguienteCaracter(); } if ("A".Equals(caracterActual) || "a".Equals(caracterActual)) { lexemareserva = caracterActual; estadoActual = 1; } else if ("B".Equals(caracterActual) || "b".Equals(caracterActual)) { lexemareserva = caracterActual; estadoActual = 2; } else if ("C".Equals(caracterActual) || "c".Equals(caracterActual)) { lexemareserva = caracterActual; estadoActual = 3; } else if ("D".Equals(caracterActual) || "d".Equals(caracterActual)) { lexemareserva = caracterActual; estadoActual = 4; } else if ("E".Equals(caracterActual) || "e".Equals(caracterActual)) { lexemareserva = caracterActual; estadoActual = 5; } else if ("F".Equals(caracterActual) || "f".Equals(caracterActual)) { lexemareserva = caracterActual; estadoActual = 6; } else if ("G".Equals(caracterActual) || "g".Equals(caracterActual)) { lexemareserva = caracterActual; estadoActual = 7; } else if ("H".Equals(caracterActual) || "h".Equals(caracterActual)) { lexemareserva = caracterActual; estadoActual = 8; } else if ("I".Equals(caracterActual) || "i".Equals(caracterActual)) { lexemareserva = caracterActual; estadoActual = 9; } else if ("J".Equals(caracterActual) || "j".Equals(caracterActual)) { lexemareserva = caracterActual; estadoActual = 10; } else if ("K".Equals(caracterActual) || "k".Equals(caracterActual)) { lexemareserva = caracterActual; estadoActual = 11; } else if ("L".Equals(caracterActual) || "l".Equals(caracterActual)) { lexemareserva = caracterActual; estadoActual = 12; } else if ("M".Equals(caracterActual) || "m".Equals(caracterActual)) { lexemareserva = caracterActual; estadoActual = 13; } else if ("N".Equals(caracterActual) || "n".Equals(caracterActual)) { lexemareserva = caracterActual; estadoActual = 14; } else if ("O".Equals(caracterActual) || "o".Equals(caracterActual)) { lexemareserva = caracterActual; estadoActual = 15; } else if ("P".Equals(caracterActual) || "p".Equals(caracterActual)) { lexemareserva = caracterActual; estadoActual = 16; } else if ("Q".Equals(caracterActual) || "q".Equals(caracterActual)) { lexemareserva = caracterActual; estadoActual = 17; } else if ("R".Equals(caracterActual) || "r".Equals(caracterActual)) { lexemareserva = caracterActual; estadoActual = 18; } else if ("@EOF@".Equals(caracterActual)) { estadoActual = 20; } else if ("@FL@".Equals(caracterActual)) { lexemareserva = lexemareserva + caracterActual; estadoActual = 21; } else if ("S".Equals(caracterActual) || "s".Equals(caracterActual)) { lexemareserva = caracterActual; estadoActual = 22; } else if ("T".Equals(caracterActual) || "t".Equals(caracterActual)) { lexemareserva = caracterActual; estadoActual = 23; } else if ("U".Equals(caracterActual) || "u".Equals(caracterActual)) { lexemareserva = caracterActual; estadoActual = 24; } else if ("V".Equals(caracterActual) || "v".Equals(caracterActual)) { lexemareserva = caracterActual; estadoActual = 25; } else if ("W".Equals(caracterActual) || "w".Equals(caracterActual)) { lexemareserva = caracterActual; estadoActual = 26; } else if ("X".Equals(caracterActual) || "x".Equals(caracterActual)) { lexemareserva = caracterActual; estadoActual = 27; } else if ("Y".Equals(caracterActual) || "y".Equals(caracterActual)) { lexemareserva = caracterActual; estadoActual = 28; } else if ("Z".Equals(caracterActual) || "z".Equals(caracterActual)) { lexemareserva = caracterActual; estadoActual = 29; } else if ("0".Equals(caracterActual)) { lexemareserva = caracterActual; estadoActual = 30; } else if ("1".Equals(caracterActual)) { lexemareserva = caracterActual; estadoActual = 31; } else if ("2".Equals(caracterActual)) { lexemareserva = caracterActual; estadoActual = 32; } else if ("3".Equals(caracterActual)) { lexemareserva = caracterActual; estadoActual = 33; } else if ("4".Equals(caracterActual)) { lexemareserva = caracterActual; estadoActual = 34; } else if ("5".Equals(caracterActual)) { lexemareserva = caracterActual; estadoActual = 35; } else if ("6".Equals(caracterActual)) { lexemareserva = caracterActual; estadoActual = 36; } else if ("7".Equals(caracterActual)) { lexemareserva = caracterActual; estadoActual = 37; } else if ("8".Equals(caracterActual)) { lexemareserva = caracterActual; estadoActual = 38; } else if ("9".Equals(caracterActual)) { lexemareserva = caracterActual; estadoActual = 39; } else { lexemareserva = caracterActual; estadoActual = 19; } break; case 1: //leerSiguienteCaracter(); lexema = TablaPalabrasReservadas.ObtenerInstancia().obtenerPalabraReservada(lexemareserva); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Letra", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 2: //leerSiguienteCaracter(); lexema = TablaPalabrasReservadas.ObtenerInstancia().obtenerPalabraReservada(lexemareserva); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Letra", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 3: //leerSiguienteCaracter(); lexema = TablaPalabrasReservadas.ObtenerInstancia().obtenerPalabraReservada(lexemareserva); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Letra", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 4: //leerSiguienteCaracter(); lexema = TablaPalabrasReservadas.ObtenerInstancia().obtenerPalabraReservada(lexemareserva); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Letra", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 5: //leerSiguienteCaracter(); lexema = TablaPalabrasReservadas.ObtenerInstancia().obtenerPalabraReservada(lexemareserva); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Letra", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 6: //leerSiguienteCaracter(); lexema = TablaPalabrasReservadas.ObtenerInstancia().obtenerPalabraReservada(lexemareserva); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Letra", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 7: //leerSiguienteCaracter(); lexema = TablaPalabrasReservadas.ObtenerInstancia().obtenerPalabraReservada(lexemareserva); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Letra", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 8: //leerSiguienteCaracter(); lexema = TablaPalabrasReservadas.ObtenerInstancia().obtenerPalabraReservada(lexemareserva); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Letra", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 9: //leerSiguienteCaracter(); lexema = TablaPalabrasReservadas.ObtenerInstancia().obtenerPalabraReservada(lexemareserva); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Letra", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 10: //leerSiguienteCaracter(); lexema = TablaPalabrasReservadas.ObtenerInstancia().obtenerPalabraReservada(lexemareserva); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Letra", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 11: //leerSiguienteCaracter(); lexema = TablaPalabrasReservadas.ObtenerInstancia().obtenerPalabraReservada(lexemareserva); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Letra", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 12: //leerSiguienteCaracter(); lexema = TablaPalabrasReservadas.ObtenerInstancia().obtenerPalabraReservada(lexemareserva); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Letra", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 13: //leerSiguienteCaracter(); lexema = TablaPalabrasReservadas.ObtenerInstancia().obtenerPalabraReservada(lexemareserva); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Letra", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 14: //leerSiguienteCaracter(); lexema = TablaPalabrasReservadas.ObtenerInstancia().obtenerPalabraReservada(lexemareserva); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Letra", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 15: //leerSiguienteCaracter(); lexema = TablaPalabrasReservadas.ObtenerInstancia().obtenerPalabraReservada(lexemareserva); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Letra", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 16: //leerSiguienteCaracter(); lexema = TablaPalabrasReservadas.ObtenerInstancia().obtenerPalabraReservada(lexemareserva); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Letra", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 17: //leerSiguienteCaracter(); lexema = TablaPalabrasReservadas.ObtenerInstancia().obtenerPalabraReservada(lexemareserva); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Letra", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 18: //leerSiguienteCaracter(); lexema = TablaPalabrasReservadas.ObtenerInstancia().obtenerPalabraReservada(lexemareserva); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Letra", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 19: continuarAnalisis = false; Error r = Error.crear(lexemareserva, "LEXICOS", "Caracter no valido.", "Ingrese una letra o un numero.", numeroLineaActual, puntero - lexemareserva.Length, (puntero - 1)); ManejadorErrores.obtenerManejadorErrores().reportarError(r); componente = ComponenteLexico.crear(lexemareserva, lexema, "ERROR SINTACTICO", numeroLineaActual, puntero - lexemareserva.Length, (puntero - 1)); //TablaSimbolos.ObtenerInstancia().agregar(componente); TablaErrores.ObtenerInstancia().agregar(r); break; case 20: continuarAnalisis = false; estadoActual = 0; lexemareserva = ""; lexema = ""; //Console.WriteLine("FIN DE ARCHIVO"); componente = ComponenteLexico.crear(lexemareserva, lexema, "FIN DE ARCHIVO", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 21: // Salto de linea continuarAnalisis = true; estadoActual = 0; lexema = lexema + " "; cargarNuevaLinea(); break; case 22: //leerSiguienteCaracter(); lexema = TablaPalabrasReservadas.ObtenerInstancia().obtenerPalabraReservada(lexemareserva); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Letra", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 23: //leerSiguienteCaracter(); lexema = TablaPalabrasReservadas.ObtenerInstancia().obtenerPalabraReservada(lexemareserva); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Letra", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 24: //leerSiguienteCaracter(); lexema = TablaPalabrasReservadas.ObtenerInstancia().obtenerPalabraReservada(lexemareserva); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Letra", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 25: //leerSiguienteCaracter(); lexema = TablaPalabrasReservadas.ObtenerInstancia().obtenerPalabraReservada(lexemareserva); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Letra", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 26: //leerSiguienteCaracter(); lexema = TablaPalabrasReservadas.ObtenerInstancia().obtenerPalabraReservada(lexemareserva); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Letra", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 27: //leerSiguienteCaracter(); lexema = TablaPalabrasReservadas.ObtenerInstancia().obtenerPalabraReservada(lexemareserva); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Letra", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 28: //leerSiguienteCaracter(); lexema = TablaPalabrasReservadas.ObtenerInstancia().obtenerPalabraReservada(lexemareserva); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Letra", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 29: //leerSiguienteCaracter(); lexema = TablaPalabrasReservadas.ObtenerInstancia().obtenerPalabraReservada(lexemareserva); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Letra", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 30: //leerSiguienteCaracter(); lexema = TablaPalabrasReservadas.ObtenerInstancia().obtenerPalabraReservada(lexemareserva); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Numero", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 31: //leerSiguienteCaracter(); lexema = TablaPalabrasReservadas.ObtenerInstancia().obtenerPalabraReservada(lexemareserva); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Numero", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 32: //leerSiguienteCaracter(); lexema = TablaPalabrasReservadas.ObtenerInstancia().obtenerPalabraReservada(lexemareserva); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Numero", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 33: //leerSiguienteCaracter(); lexema = TablaPalabrasReservadas.ObtenerInstancia().obtenerPalabraReservada(lexemareserva); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Numero", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 34: //leerSiguienteCaracter(); lexema = TablaPalabrasReservadas.ObtenerInstancia().obtenerPalabraReservada(lexemareserva); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Numero", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 35: //leerSiguienteCaracter(); lexema = TablaPalabrasReservadas.ObtenerInstancia().obtenerPalabraReservada(lexemareserva); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Numero", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 36: //leerSiguienteCaracter(); lexema = TablaPalabrasReservadas.ObtenerInstancia().obtenerPalabraReservada(lexemareserva); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Numero", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 37: //leerSiguienteCaracter(); lexema = TablaPalabrasReservadas.ObtenerInstancia().obtenerPalabraReservada(lexemareserva); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Numero", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 38: //leerSiguienteCaracter(); lexema = TablaPalabrasReservadas.ObtenerInstancia().obtenerPalabraReservada(lexemareserva); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Numero", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; case 39: //leerSiguienteCaracter(); lexema = TablaPalabrasReservadas.ObtenerInstancia().obtenerPalabraReservada(lexemareserva); continuarAnalisis = false; componente = ComponenteLexico.crear(lexemareserva, lexema, "Numero", numeroLineaActual, puntero - lexemareserva.Length, puntero - 1); AgregarComponente(componente); break; } } return(componente); }
private static void inicializar() { tabla.Add("INT", ComponenteLexico.crear("INT", Categoria.PALABRA_RESERVADA_INT)); tabla.Add("ON", ComponenteLexico.crear("ON", Categoria.PALABRA_RESERVADA_ON)); tabla.Add("OFF", ComponenteLexico.crear("OFF", Categoria.PALABRA_RESERVADA_OFF)); }