Esempio n. 1
0
        public void Validacion_ER(string id)
        {
            Parea(Token.Tipo.S_DOS_PUNTOS);
            string lexema = tokenActual.GetValor();

            lexema = lexema.Remove(0, 1);
            lexema = lexema.Remove(lexema.Length - 1, 1);
            int filaInicio    = tokenActual.GetFila();
            int columnaInicio = tokenActual.GetColumna() + 1;

            Parea(Token.Tipo.CADENA);
            Parea(Token.Tipo.S_PUNTO_Y_COMA);
            //Aqui continua la validacion del lexema.
            consola += "**Evaluando Expresion Regular: " + id + "**\n";
            try
            {
                Simbolo simbolo = tablaSimbolos[id];    //Posible Exception.
                if (!simbolo.GetTipo().Equals("Estado"))
                {
                    throw new KeyNotFoundException();   //Como no es compatible el tipo entonces no se puede trabajar con él. Se manda Exception.
                }
                Cerradura estado   = (Cerradura)simbolo.GetValor();
                int       contador = 0;
                if (estado.Validar(lexema, ref contador, ref filaInicio, ref columnaInicio, ref ListaTokensAnalizados))
                {
                    consola += "El lexema: \"" + lexema + "\", es válido para la Expresion Regular: " + id + "\n";
                }
                else
                {
                    consola += "El lexema: \"" + lexema + "\", no es válido para la Expresion Regular: " + id + "\n";
                }
            }
            catch (KeyNotFoundException)
            {
                consola += "No se pudo validar el lexema: " + lexema + ", no se encontró su expresión regular\n**Fin evaluacion**\n";
            }
        }
Esempio n. 2
0
 /*  Estructura_P:
  *
  */
 public Estructura Estructura_P(ref LinkedList <Terminal> terminals)
 {
     if (Comparador(Token.Tipo.S_LLAVE_IZQ))
     {
         Parea(Token.Tipo.S_LLAVE_IZQ);
         Terminal id     = new Terminal(Terminal.Tipo.ID, tokenActual.GetValor());
         bool     existe = this.ComprobarExistenciaEnLista(terminals, id);
         if (!existe)
         {
             try
             {   //Revisa en la tabla de simbolos si existe un conjunto con el id solicitado y añade los elementos del conjunto a su lista de valores.
                 Simbolo  simbolo  = tablaSimbolos[tokenActual.GetValor()];
                 Conjunto conjunto = (Conjunto)simbolo.GetValor();
                 id.ListaValores = new LinkedList <string>(conjunto.GetElementos());
                 terminals.AddLast(id);
                 consola += "*Elementos para conjunto " + id.GetRepresentacion() + ":";
                 foreach (string elemento in id.ListaValores)
                 {
                     consola += "-" + elemento;
                 }
                 consola += "-*\n";
             }
             catch (KeyNotFoundException)
             {
                 //No se pudo obtener el conjunto de la tabla de simbolos, asi que no se guarda el Terminal en la lista de Terminales para la validacion.
             }
         }
         Parea(Token.Tipo.ID);
         Parea(Token.Tipo.S_LLAVE_DER);
         return(id);
     }
     else if (Comparador(Token.Tipo.CADENA))
     {
         Terminal cadena = new Terminal(Terminal.Tipo.CADENA, tokenActual.GetValor());
         bool     existe = this.ComprobarExistenciaEnLista(terminals, cadena);
         if (!existe)
         {
             terminals.AddLast(cadena);
         }
         Parea(Token.Tipo.CADENA);
         return(cadena);
     }
     else if (Comparador(Token.Tipo.CARACTER_ESPECIAL))
     {
         Terminal c_especial = new Terminal(Terminal.Tipo.CARACTER_ESPECIAL, tokenActual.GetValor());
         bool     existe     = this.ComprobarExistenciaEnLista(terminals, c_especial);
         if (!existe)
         {
             terminals.AddLast(c_especial);
         }
         Parea(Token.Tipo.CARACTER_ESPECIAL);
         return(c_especial);
     }
     else if (Comparador(Token.Tipo.C_TODO))
     {
         Terminal c_todo = new Terminal(Terminal.Tipo.C_TODO, tokenActual.GetValor());
         bool     existe = this.ComprobarExistenciaEnLista(terminals, c_todo);
         if (!existe)
         {
             terminals.AddLast(c_todo);
         }
         Parea(Token.Tipo.C_TODO);
         return(c_todo);
     }
     else if (Comparador(Token.Tipo.S_PUNTO) || Comparador(Token.Tipo.S_PLECA) || Comparador(Token.Tipo.S_INTERROGACION) || Comparador(Token.Tipo.S_ASTERISCO) || Comparador(Token.Tipo.S_SUMA))
     {
         return(Estructura(ref terminals));
     }
     else
     {
         Console.WriteLine("Error Sintactico\nEn ID_Token: " + controlToken + "\nSe esperaba [S_LLAVE_IZQ|CADENA|CARACTER_ESPECIAL|C_TODO|S_PUNTO|S_PLECA|S_INTERROGACION|S_ASTERISCO|S_SUMA] en lugar de [" + tokenActual.GetTipo() + ", " + tokenActual.GetValor() + "]");
         consola                  += "*Error Sintactico*\nEn ID_Token: " + controlToken + "\nSe esperaba [S_LLAVE_IZQ|CADENA|CARACTER_ESPECIAL|C_TODO|S_PUNTO|S_PLECA|S_INTERROGACION|S_ASTERISCO|S_SUMA] en lugar de [" + tokenActual.GetTipo() + ", " + tokenActual.GetValor() + "]\n";
         errorSintactico           = true;
         existenciaErrorSintactico = true;
         return(null);
     }
 }