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