예제 #1
0
 public void Graficar(ref string cadenaGraphviz)
 {
     foreach (Transicion transicion in Transiciones)
     {
         if (!transicion.Graficado)
         {
             Terminal terminal    = transicion.Terminal;
             Nodo     nodoDestino = transicion.NodoDestino;
             if (terminal.GetTipoTerminal() == Terminal.Tipo.EPSILON)
             {
                 this.Cerradura.AddLast(nodoDestino);
             }
             cadenaGraphviz      += "\tn" + Numero + "->n" + nodoDestino.Numero + "[label = \"" + terminal.GetRepresentacion() + "\"];\n";
             transicion.Graficado = true;
             transicion.NodoDestino.Graficar(ref cadenaGraphviz);
         }
     }
 }
예제 #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);
     }
 }