//------------------------------------------------------ private void match(Token_lenguaje.TOKEN token_a_verificar) { try { //si hace match y no es el ultimo token ,pasa al siguiente if (token_a_verificar == simbolo_preanalisis.getTipo() && simbolo_preanalisis.getTipo() != Lista_Tokens.Last.Value.getTipo()) { numero_preanalisis++; simbolo_preanalisis = Lista_Tokens.ElementAt(numero_preanalisis); } else if (simbolo_preanalisis.getTipo() == Lista_Tokens.Last.Value.getTipo()) { MessageBox.Show("Analisis Sintactico Concluido"); } else { MessageBox.Show("Analisis Sintactico Incorrecto Se esperaba : " + especificar_error(token_a_verificar)); analisisCorrecto = false; } } catch (Exception e) { MessageBox.Show("Error Fatal de sintaxis"); } }
/* * @reportarToken * niega el token si no cumple alguna expreison del arbol de analisis lexico * */ private void reportarToken(Token_lenguaje.TOKEN tipo, Object Lexema, int fila, int columna) { ListaErroresLexicos.AddLast(new Token_lenguaje(tipo, Lexema, fila, columna)); // se agrega el token a mi lista lexema = ""; //limpiamos el lexema estado = 0; // el estado regresa al estado inicial }
//---------------------------------------------------------------- private String especificar_error(Token_lenguaje.TOKEN tipo) { switch (tipo) { case TOKEN.LLAVE_A: return("Llave de apertura"); case TOKEN.LLAVE_C: return("Llave de cierre"); case TOKEN.COMILLA_DOBLE: return("Comilla doble"); case TOKEN.SIMBOLO_OR: return("Simbolo OR |"); case TOKEN.SIMBOLO_0_1vez: return("Simbolo cerradura ?"); case TOKEN.SIMBOLO_0_MAS: return("Simbolo cerradura *"); case TOKEN.SIMBOLO_1_MAS: return("Simbolo cerradura +"); case TOKEN.SIMBOLO_RANGO: return("Simbolo de rango de una macro ~"); case TOKEN.PTOCOMA: return("Punto y coma"); case TOKEN.DOSPUNTOS: return("Dos puntos"); case TOKEN.SIMBOLO_AND: return("Simbolo AND ."); case TOKEN.PORCENTAJES: return("Simbolos de porcentaje doble"); case TOKEN.FLECHA: return("Simbolo de asignacion de expresion regular"); case TOKEN.COMENAMUL: return("Comentario multilinea apertura"); case TOKEN.COMENSIMPLE: return("Comentario simple"); case TOKEN.CONJ: return("Palabra reservada CONJ"); case TOKEN.ASCIII: return("Simbolos ASCCI comprendidos del 32-47, 58-64, 91-96, 123-125"); case TOKEN.COMENCMUL: return("Comentario multulinea cierre"); case TOKEN.ID: return("Identificador"); case TOKEN.DIGITO: return("Digito"); case TOKEN.CADENA: return("Cadena"); case TOKEN.EXPRESION: return("expresion regular"); case TOKEN.MACROS: return("Macro de rangos de caracteres ASCII 32 al 125"); case TOKEN.ERROR: return("Error Lexico, simbolo no admitido"); case TOKEN.COMA: return("Coma ,"); case TOKEN.CONJUNTOFINITIO: return("Conjunto finito de caracteres ASCCI 32 al 125"); case TOKEN.CARACTERESPECIAL: return("Caracter Especial"); case TOKEN.CARACTERTODO: return("Caracter especial excepto salto de linea"); default: return("error!"); } }