示例#1
0
        /// <summary>
        /// Guarda la sentencia Analizada en la lista de Tokens General
        /// </summary>
        /// <param name="lista"></param>
        /// <returns></returns>
        private Cola GuardarTokens(ListaSimple lista)
        {
            //Declara la Cola de salida
            Cola instrucciones = new Cola("Instrucciones");

            //El loop verificará que no este vacia la lista
            //Sacará de la lista los tokens y los guardará en la lista general
            while (!lista.EsVacia())
            {
                //Saca el primer dato de la lista y lo caste a Token
                Token temp = (Token)lista.Listar();
                //Guarda la instruccion a realizar
                instrucciones.Encolar(temp.lexema);
                //Guarda el token temp en la lista general, con diferente id
                //Verifica si el token es un error y lo guarda en otra lista
                if (temp.token.Equals("Error"))
                {
                    err.Enlistar(new Error(err.GetLargo() + 1, temp.lexema, temp.fila, temp.columna, "Error léxico"));
                }
                else
                {
                    token.Enlistar(new Token(token.GetLargo() + 1, temp.lexema, temp.fila, temp.columna, temp.token));
                }
            }
            return(instrucciones);
        }
示例#2
0
        /// <summary>
        /// Determina si se ejecuta o no una sentencia Analizada.
        /// Si en la lista se encuentra un Error entonces no
        /// </summary>
        /// <param name="lista"></param>
        /// <returns></returns>
        private bool Escanear(ListaSimple lista)
        {
            //Realiza una copia de la lista
            Nodo aux = lista.inicio;

            //Recorre la lista siempre que existan nodos válidos
            while (aux != null)
            {
                //Castea el objeto a Token
                Token temp = (Token)aux.objeto;
                //Verifica que no existan Tokens con error
                if (temp.token.Equals("Error"))
                {
                    //Informa al usuario de cual es el error
                    //No se reconoce <lexema>. [Lín ##, Col ##],
                    TxtArea.Text += "Error en <" + temp.lexema + ">.  [Lín " + temp.fila + ", Col " + temp.columna + "]";
                    //Si existe un token error devuelve false
                    return(false);
                }
                else
                {
                    //Si no pasa al siguiente nodo
                    aux = aux.siguiente;
                }
            }
            //El loop terminó y no existe error la sentencia es válida léxicamente
            return(true);
        }
 public void Insertar(Object Dato, String Clave)
 {
     Posicion = DispersionMod(Clave);
     if (tabla[Posicion] == null)
     {
         tabla[Posicion] = new ListaSimple();
     }
     tabla[Posicion].insertarCabezaLista(Dato);
     cont++;
 }
示例#4
0
 /// <summary>
 /// Incializa todo el formulario
 /// </summary>
 public Main()
 {
     InitializeComponent();
     TxtArea.Text = "  PRIMERA PRACTICA DE LABORATORIO" + Environment.NewLine + "© LP-CLOUD [Lenguajes Formales y de Programación] 1S 2018" + Environment.NewLine;
     pdf          = new ListaSimple("PDF");
     fila         = new ListaSimple("Fila");
     token        = new ListaSimple("Token");
     texto        = new Cola("Texto");
     imagen       = new Cola("Imagen");
     tabla        = new Cola("Tabla");
     err          = new ListaSimple("Error");
     ///Agrega SFOG<< y coloca el puntero al final
     TxtArea.Text += Environment.NewLine + iniciales;
     TxtArea.Select(TxtArea.Text.Length, 0);
 }
示例#5
0
        /// <summary>
        /// Crea un String con el codigo HTML
        /// </summary>
        /// <param name="token"></param>
        /// <param name="err"></param>
        /// <returns></returns>
        public String ReporteTokens(ListaSimple token, ListaSimple err)
        {
            //Aquí se alojará el string final a retornar
            string htmlString = "";
            //Ayudará a crear el string a retornar
            StringBuilder htmlBuilder = new StringBuilder();

            //Crea un html
            htmlBuilder.Append("<!DOCTYPE html>");
            htmlBuilder.Append("<html>");
            //Crea un css
            htmlBuilder.Append("<style type=\"text / css\">");
            htmlBuilder.Append(".token  {border-collapse:collapse;border-spacing:0;border-color:#aaa;margin:0px auto;}");
            htmlBuilder.Append(".token td{font-family:Arial, sans-serif;font-size:14px;padding:10px 5px;border-style:solid;border-width:0px;overflow:hidden;word-break:normal;border-color:#aaa;color:#333;background-color:#fff;border-top-width:1px;border-bottom-width:1px;}");
            htmlBuilder.Append(".token th{font-family:Arial, sans-serif;font-size:14px;font-weight:normal;padding:10px 5px;border-style:solid;border-width:0px;overflow:hidden;word-break:normal;border-color:#aaa;color:#fff;background-color:#f38630;border-top-width:1px;border-bottom-width:1px;}");
            htmlBuilder.Append(".err  {border-collapse:collapse;border-spacing:0;border-color:#999;margin:0px auto;}");
            htmlBuilder.Append(".err td{font-family:Arial, sans-serif;font-size:14px;padding:10px 5px;border-style:solid;border-width:0px;overflow:hidden;word-break:normal;border-color:#999;color:#444;background-color:#F7FDFA;border-top-width:1px;border-bottom-width:1px;}");
            htmlBuilder.Append(".err th{font-family:Arial, sans-serif;font-size:14px;font-weight:normal;padding:10px 5px;border-style:solid;border-width:0px;overflow:hidden;word-break:normal;border-color:#999;color:#fff;background-color:#26ADE4;border-top-width:1px;border-bottom-width:1px;}");
            htmlBuilder.Append(".tg-f4we{font-weight:bold;font-size:15px;font-family:Arial, Helvetica, sans-serif !important;;text-align:center;vertical-align:top}");
            htmlBuilder.Append(".tg-cjcd{font-style:italic;font-size:12px;font-family:Arial, Helvetica, sans-serif !important;;vertical-align:top}");
            htmlBuilder.Append(".tg-do2s{font-size:12px;font-family:Arial, Helvetica, sans-serif !important;;vertical-align:top}");
            htmlBuilder.Append("</style>");
            //Permite la utilización de acentos utf-8
            htmlBuilder.Append("<head>");
            htmlBuilder.Append("<meta charset =\"UTF-8\">");
            htmlBuilder.Append("<title>");
            htmlBuilder.Append("Reporte-");
            htmlBuilder.Append(Guid.NewGuid().ToString());
            htmlBuilder.Append("</title>");
            htmlBuilder.Append("</head>");
            htmlBuilder.Append("<body>");
            ///
            ///Inicia tabla de TOKEN
            ///
            htmlBuilder.Append("<table class= \"token\">");
            htmlBuilder.Append("<tr>" +
                               "<th class=\"tg-f4we\" colspan=\"5\">TOKEN</th> " +
                               "</tr>");
            htmlBuilder.Append("<tr>" +
                               "<td class=\"tg-cjcd\">#<br></td>" +
                               "<td class=\"tg-cjcd\">LEXEMA<br></td>" +
                               "<td class=\"tg-cjcd\">FILA</td>" +
                               "<td class=\"tg-cjcd\">COLUMNA</td>" +
                               "<td class=\"tg-cjcd\">TOKEN</td>" +
                               "</tr>");
            ///Realiza una copia de la lista de TOKENS
            Nodo aux = token.inicio;

            ///Agrega los elementos de la lista a la tabla recién creada
            while (aux != null)
            {
                LFP_P1.ADF.Token cast = (LFP_P1.ADF.Token)aux.objeto;
                htmlBuilder.Append("<tr>");
                htmlBuilder.Append("<td class=\"tg-do2s\">" + cast.indice + "</td>");
                htmlBuilder.Append("<td class=\"tg-do2s\">" + cast.lexema + "</td>");
                htmlBuilder.Append("<td class=\"tg-do2s\">" + cast.fila + "</td>");
                htmlBuilder.Append("<td class=\"tg-do2s\">" + cast.columna + "</td>");
                htmlBuilder.Append("<td class=\"tg-do2s\">" + cast.token + "</td>");
                htmlBuilder.Append("</tr>");
                aux = aux.siguiente;
            }
            htmlBuilder.Append("<tr>" +
                               "<th class=\"tg-cjcd\" colspan=\"5\"> ---------- Fin de línea. " + token.GetLargo() + " tokens ---------- </th> " +
                               "</tr>");
            htmlBuilder.Append("</table><br><br>");
            ///
            ///Inicia tabla de ERRORES
            ///
            htmlBuilder.Append("<table class= \"err\">");
            htmlBuilder.Append("<tr>" +
                               "<th class=\"tg-f4we\" colspan=\"5\">ERROR</th> " +
                               "</tr>");
            htmlBuilder.Append("<tr>" +
                               "<td class=\"tg-cjcd\">#<br></td>" +
                               "<td class=\"tg-cjcd\">LEXEMA<br></td>" +
                               "<td class=\"tg-cjcd\">FILA</td>" +
                               "<td class=\"tg-cjcd\">COLUMNA</td>" +
                               "<td class=\"tg-cjcd\">ERROR</td>" +
                               "</tr>");
            ///Realiza una copia de la lista de TOKENS
            aux = err.inicio;
            ///Agrega los elementos de la lista a la tabla recién creada
            while (aux != null)
            {
                LFP_P1.ADF.Error cast = (LFP_P1.ADF.Error)aux.objeto;
                htmlBuilder.Append("<tr>");
                htmlBuilder.Append("<td class=\"tg-do2s\">" + cast.indice + "</td>");
                htmlBuilder.Append("<td class=\"tg-do2s\">" + cast.lexema + "</td>");
                htmlBuilder.Append("<td class=\"tg-do2s\">" + cast.fila + "</td>");
                htmlBuilder.Append("<td class=\"tg-do2s\">" + cast.columna + "</td>");
                htmlBuilder.Append("<td class=\"tg-do2s\">" + cast.error + "</td>");
                htmlBuilder.Append("</tr>");
                aux = aux.siguiente;
            }
            htmlBuilder.Append("<tr>" +
                               "<th class=\"tg-cjcd\" colspan=\"5\"> ---------- Fin de línea. " + err.GetLargo() + " errores ---------- </th> " +
                               "</tr>");
            htmlBuilder.Append("<tr>" +
                               "<th class=\"tg-f4we\" colspan=\"5\"> -1 ► Durante tiempo de ejecución </th> " +
                               "</tr>");
            htmlBuilder.Append("</table><br><br>");
            htmlBuilder.Append("</body>");
            htmlBuilder.Append("</html>");
            //Crea un string de todo lo escrito anteriormente
            htmlString = htmlBuilder.ToString();
            return(htmlString);
        }
示例#6
0
        /// <summary>
        /// Toma todas las colas y listas de la edición, y conforme el indiceEdicion, va editando el PDF
        /// de lo que contengan las colas y listas
        /// Algoritmo:
        ///		Cada una de los objeto alojados en las colas y listas, tiene un índice
        ///		ese indice va incrementando segun se vaya editado el PDF en general,
        ///		A la larga puede que los indices queden así:
        ///		-> Texto {1,4,8,9}
        ///		-> Imagen {2,3,5}
        ///		-> Tabla {6,7}
        ///		El ciclo for que contiene el metodo va recorriendo el indice de cada objeto alojado
        ///		en las listas/colas y las va agregando al PDF, en el orden en el que fue editado originalmente el PDF
        ///		a través de comandos
        ///		Conforme se vayan agregando las colas/listas, estas se van vaciando
        /// </summary>
        /// <param name="url"></param>
        /// <param name="indiceEdicion"></param>
        /// <param name="Textos"></param>
        /// <param name="Imagenes"></param>
        /// <param name="Tablas"></param>
        /// <param name="Filas"></param>
        /// <returns>Respuesta del sistema</returns>
        public String GenerarPDF(String url, int indiceEdicion, Cola Textos, Cola Imagenes, Cola Tablas, ListaSimple Filas)
        {
            //Se guardará la respuesta del sistema
            String respuesta = "";
            //Aquí se guardarán las intancias que ayudaran en la creación del PDF
            Document   doc    = null;
            FileStream fs     = null;
            PdfWriter  writer = null;

            //Edita el PDF en un entorno a prueba de idiotas :v
            try
            {
                //Crea el documento pdf (lo instancia)
                doc = new Document(PageSize.A4, 30f, 30f, 30f, 30f);
                //Prepara el documento para su escritura
                fs = new FileStream(url + "\\" + nombre + ".pdf", FileMode.Create, FileAccess.Write, FileShare.None);
                //Determina la localización del PDF dentro de
                writer = PdfWriter.GetInstance(doc, fs);
                if (!Textos.EsVacia() || !Imagenes.EsVacia() || !Tablas.EsVacia())
                {
                    //Abre el documento para editarlo
                    doc.Open();
                }
                for (int i = 1; i <= indiceEdicion; i++)
                {
                    //Verifica si la cola está vacía
                    if (!Textos.EsVacia())
                    {
                        //Castea a Texto
                        Texto text = (Texto)Textos.ShutearPrimero();
                        //Verifica que el indice guardado coincida con la <i>
                        if (text.indice == i)
                        {
                            //Agrega texto al PDF
                            doc.Add(text.texto);
                            //Elimna información de la lista
                            Textos.Desencolar();
                        }
                    }
                    //Verifica si la cola está vacía
                    if (!Imagenes.EsVacia())
                    {
                        //Esta instancia ayudara a agregar imagenes si las hubiera
                        iTextSharp.text.Image jpg;
                        //Caste a Imagen
                        Imagen image = (Imagen)Imagenes.ShutearPrimero();
                        //Verifica que el indice guardado coincida con la <i>
                        if (image.indice == i)
                        {
                            //Aloja la referencia guardada
                            jpg = image.imagen;
                            //Encaja la imagen en el documento
                            jpg.ScaleToFit(400f, 300f);
                            //Deja un espacio antes y despues de la imagen
                            jpg.SpacingBefore = 12f;
                            jpg.SpacingAfter  = 12f;
                            //Establece al alineacion
                            jpg.Alignment = image.alineacion;
                            //Agrega la imagen al PDF
                            doc.Add(jpg);
                            //Elimina infomación de la cola
                            Imagenes.Desencolar();
                        }
                    }
                    //Verifica si la cola está vacía
                    if (!Tablas.EsVacia())
                    {
                        //Esta instancia ayudara a agrega tablas si las hubiera
                        iTextSharp.text.pdf.PdfPTable pTable;
                        //Catea a Tabla
                        Tabla table = (Tabla)Tablas.ShutearPrimero();
                        //Verifica que el indice guardado coincida con la <i>
                        if (table.indice == i)
                        {
                            //Aloja la referencia guardada
                            pTable = new PdfPTable(1)
                            {
                                //Alinea la tabla
                                HorizontalAlignment = Element.ALIGN_CENTER,
                                //Espacio antes y despues
                                SpacingBefore = 12f,
                                SpacingAfter  = 12f
                            };
                            //Añade el encabezado
                            PdfPCell encabezado = new PdfPCell(new Phrase(table.encabezado))
                            {
                                Colspan             = 1,                            //Indica cuantas columna se combinan
                                HorizontalAlignment = 1                             //Indica la alineación de la tabla
                            };
                            //Añade el encabezado a la tabla
                            pTable.AddCell(encabezado);
                            //Busca en la lista de Filas todas las filas relacionadas
                            for (int j = 0; j < Filas.GetLargo(); j++)
                            {
                                //Busca una Fila (desde adelante hasta atrás) que tenga el nombre de la Tabla
                                Fila auxRow = Filas.BuscarFila(table.nombre);
                                //Verifica que auxRow no sea nulo
                                if (Filas.Buscar(auxRow))
                                {
                                    //Agrega la Fila almacenada en Filas que se relacionen con la tabla en cuestión :v
                                    pTable.AddCell(auxRow.textoplano);
                                    //Elimina la Fila de la Lista
                                    Filas.Remover(auxRow);
                                }
                            }
                            //Añade la tabla al documento
                            doc.Add(pTable);
                            //Elimina información de la Cola
                            Tablas.Desencolar();
                        }
                    }
                }
            }
            catch (Exception ex)            //Ocurre un error
            {
                respuesta += "La escritura de archivo PDF se detuvo. Posible pérdida de datos " + ex.Message;
            }
            finally
            {
                try
                {
                    //Si la instancia doc no es nula intentará cerrarla
                    if (doc != null)
                    {
                        doc.Close();
                        respuesta += "Archivo PDF creado con éxito. Absolute Path -> " + url + "\\" + nombre + ".pdf";
                    }
                }
                catch (Exception ex2)
                {
                    //Ocurre un error al cerrar
                    respuesta += Environment.NewLine + "No se pudo cerrar la escritura de PDF. " + ex2.Message;
                }
            }
            return(respuesta);
        }
示例#7
0
        /// <summary>
        /// Esta es la joya de la corona. (la corona es el programa en si)
        /// Aqui se realiza el análisis léxico a través de AFD -Automata Finito Determinista-
        /// </summary>
        /// <param name="cadena"></param>
        /// <returns></returns>
        public ListaSimple AnalizarCadena(string cadena)        //, ListaSimple listaSimple)
        {
            //Levara el control de los estados
            int estadoAceptacion = 0;
            //Guardara temporalmente los caracteres de la cadena ingresada
            char cadenaCaracter;
            //Se eliminan espacio al principio y al final
            //cadena = cadena.Trim();
            //Almacenará los caracteres que se van analizando
            String cadenaAceptada = "";
            //Declara el arrayliste que contendrá los tokens almacenados
            ListaSimple listaToken = new ListaSimple("Token");

            //A través del for se analizará caracter por caracter
            for (int i = 0; i < cadena.Length; i++)
            {
                cadenaCaracter = cadena[i];
                //Console.WriteLine(cadenaCaracter);
                switch (estadoAceptacion)
                {
                case 0:
                    //MAYUSCULAS o minusculas o guión bajo o numeros
                    if ((cadenaCaracter >= 65 && cadenaCaracter <= 90) ||
                        (cadenaCaracter >= 97 && cadenaCaracter <= 122) ||
                        cadenaCaracter == 95 || (cadenaCaracter >= 48 && cadenaCaracter <= 57))
                    {
                        //Se mantiene en el estado inicial;
                        estadoAceptacion = 0;
                        //Agrega el caracter a la cadena Aceptada
                        cadenaAceptada += cadenaCaracter;
                        //Aumenta la columna
                        column++;
                    }
                    //Salto de línea
                    else if (cadenaCaracter == 10 || cadenaCaracter == 11)
                    {
                        //Mantiene el estado de Aceptacion
                        estadoAceptacion = 0;
                        //Agrega lo que hay hasta ahora en la cadenaAceptada
                        if (!string.IsNullOrEmpty(cadenaAceptada) || !cadenaAceptada.Equals(""))
                        {
                            Console.WriteLine(estadoAceptacion + " -> " + cadenaAceptada);
                            listaToken.Enlistar(new Token(listaToken.GetLargo() + 1, cadenaAceptada, row, column - cadenaAceptada.Length, 0));
                        }
                        //Aumenta la línea
                        row++;
                        //Empieza nueva columna
                        column = 0;
                        //Limipia la cadena para aceptar otro lexema
                        cadenaAceptada = "";
                    }
                    //Espacio y tab
                    else if (cadenaCaracter == 32 || cadenaCaracter == 9)
                    {
                        //Mantiene el estado de Aceptacion
                        estadoAceptacion = 0;
                        //Agrega lo que hay hasta ahora en la cadenaAceptada
                        if (!string.IsNullOrEmpty(cadenaAceptada) || !cadenaAceptada.Equals(""))
                        {
                            Console.WriteLine(estadoAceptacion + " -> " + cadenaAceptada);
                            listaToken.Enlistar(new Token(listaToken.GetLargo() + 1, cadenaAceptada, row, column - cadenaAceptada.Length, 0));
                        }
                        //Aumenta la columna
                        column++;
                        //Limipia la cadena para aceptar otro lexema
                        cadenaAceptada = "";
                    }
                    //Apostofre
                    else if (cadenaCaracter == 39)
                    {
                        //Limpia la cadena para aceptar la ruta
                        cadenaAceptada = "";
                        //Aumenta la columna
                        column++;
                        //Cambia el estado de Aceptacion
                        estadoAceptacion = 1;
                    }
                    //Comillas
                    else if (cadenaCaracter == 34)
                    {
                        //Limpia la cadena para aceptar el texto
                        cadenaAceptada = "";
                        //Aumenta la columna
                        column++;
                        //Cambia el estado de Aceptación
                        estadoAceptacion = 2;
                    }
                    //Se produce un error léxico
                    else
                    {
                        //Simplemente Agrega el caracter y el error se determinará en las siguientes fases
                        cadenaAceptada += cadenaCaracter;
                        column++;
                    }
                    break;

                case 1:
                    //Apostrofe
                    if (cadenaCaracter == 39)
                    {
                        Console.WriteLine(estadoAceptacion + " -> " + cadenaAceptada);
                        //Debe agregar lo que hay hasta ahora en la cadenaAceptada
                        listaToken.Enlistar(new Token(listaToken.GetLargo() + 1, cadenaAceptada, row, column - cadenaAceptada.Length, "Ruta"));
                        //Limpia la cadena para aceptar un nuevo lexema
                        cadenaAceptada = "";
                        //Aumenta la columna
                        column++;
                        //Regresa el estado de Aceptacion
                        estadoAceptacion = 0;
                    }
                    else
                    {
                        //Guarda lo que esta en la cadena
                        cadenaAceptada += cadenaCaracter;
                        //Aumenta la columna
                        column++;
                        //Mantiene el estado de Aceptacion
                        estadoAceptacion = 1;
                    }
                    break;

                case 2:
                    //Comillas
                    if (cadenaCaracter == 34)
                    {
                        Console.WriteLine(estadoAceptacion + " -> " + cadenaAceptada);
                        //Debe agregar lo que hay hasta ahora en la cadenaAceptada
                        listaToken.Enlistar(new Token(listaToken.GetLargo() + 1, cadenaAceptada, row, column - cadenaAceptada.Length, "Texto"));
                        //Limpia la cadena para aceptar un nuevo lexema
                        cadenaAceptada = "";
                        //Aumenta la columna
                        column++;
                        //Regresa el estado de Aceptacion
                        estadoAceptacion = 0;
                    }
                    else
                    {
                        //Guarda lo que esta en la cadena
                        cadenaAceptada += cadenaCaracter;
                        //Mantiene el estado de Aceptacion
                        estadoAceptacion = 2;
                        //Aumenta la columna
                        column++;
                    }
                    break;
                }
            }
            //Guarda lo último que se encuentra en la cadena si fuera necesario
            if (!String.IsNullOrEmpty(cadenaAceptada))
            {
                //Console.WriteLine(cadenaAceptada);
                //Debe agregar lo que hay en la cadenaAceptada
                Console.WriteLine(estadoAceptacion + " -> " + cadenaAceptada);
                listaToken.Enlistar(new Token(listaToken.GetLargo() + 1, cadenaAceptada, row, column, estadoAceptacion));
            }
            //Devuelve la ListaSimple de token
            return(listaToken);
        }
示例#8
0
        /// <summary>
        /// Consulta los Tokens de la cola recibida y determina la lista en donde guardar los argumentos
        /// </summary>
        /// <param name="instrucciones"></param>
        private void EjecutarToken(Cola instrucciones)
        {
            //Convierte en un array de String la Cola recibida para facilitar su acceso
            string[] instruccion = instrucciones.VolverArray();            // = (string)instrucciones.Desencolar();
            //A través de la instrucción del primer espacio determina que hacer con lo contenido en el resto del Array
            switch (instruccion[0])
            {
            //1
            case "iniciarA":
                if (string.IsNullOrEmpty(focusedPDF) || focusedPDF.Equals(""))                        //Verifica que no haya ya un PDF iniciado
                {
                    //Intentará instanciar un PDF
                    try
                    {
                        //Verifica que no existan nombres duplicados
                        if (!pdf.Buscar(pdf.BuscarPDF(instruccion[1])))
                        {
                            //Crea la instancia de PDF
                            pdf.Enlistar(new PDF(pdf.GetLargo() + 1, instruccion[1]));
                            //Informa al usuario de la creacion de la instancia PDF
                            TxtArea.Text += Environment.NewLine + "Instancia " + instruccion[1] + " creada";
                        }
                        else
                        {
                            //Si existe duplicado se informa al usuario
                            TxtArea.Text += Environment.NewLine + "El PDF " + instruccion[1] + " ya existe. Consulte el Manual de Usuario <mostrar> <ManualUsuario>";
                            //Agrega error a la lista de errores
                            err.Enlistar(new Error(err.GetLargo() + 1, instruccion[1], -1, instruccion[0].Length + 2, "Nombre <PDF> Duplicado"));
                        }
                    }
                    catch (IndexOutOfRangeException)
                    {
                        //Informa al error de un error (generico) sintáctico
                        TxtArea.Text += Environment.NewLine + "Se esperaba Nombre";
                        //No hay argumentos después de iniciar
                        err.Enlistar(new Error(err.GetLargo() + 1, null, -1, instruccion[0].Length + 2, "Se esperaba Nombre"));
                    }
                }
                else
                {
                    //Si ya un PDF ingresado se informa al usuario
                    TxtArea.Text += Environment.NewLine + "Instrucción fuera de entorno. Consulte el Manual de Usuario <mostrar> <ManualUsuario>";
                    //Agrega el error a la lista
                    err.Enlistar(new Error(err.GetLargo() + 1, instruccion[0], -1, 1, "Error de Entorno. Hay un PDF enfocado"));
                }
                break;

            //2
            case "ingresarAPdf":
                //Busca el PDF en la lista de PDF, si existe focusedPDF = instruccion[1]. Sino informa al usuario
                if (pdf.Buscar(pdf.BuscarPDF(instruccion[1])))
                {
                    //Pone en global el nombre del pdf
                    focusedPDF = instruccion[1];
                    //Informa al usuario
                    TxtArea.Text += Environment.NewLine + "Instancia " + instruccion[1] + " enfocada";
                }
                else
                {
                    //Informa al usuario de que no se pudo encontrar el PDF en cuestión
                    TxtArea.Text += Environment.NewLine + "No se pudo encontrar el PDF " + instruccion[1] + ". Intente iniciarA " + instruccion[1] + " y pruebe de nuevo";
                    //Agrega al error a la lista
                    err.Enlistar(new Error(err.GetLargo() + 1, instruccion[1], -1, instruccion[0].Length + 2, "PDF no se encontró"));
                }
                break;

            //3
            case "crear":
                //Determina el largo del String[], si == 3 entonces solo crea, si == 4 abre de una vez el PDF
                if (pdf.Buscar(pdf.BuscarPDF(focusedPDF)))
                {
                    //Obtiene la instancia de PDF
                    LFP_P1.IO.PDF aux = pdf.BuscarPDF(focusedPDF);
                    //Genera el PDF
                    TxtArea.Text += Environment.NewLine + aux.GenerarPDF(new Ruta().GetAbsolutePath(instruccion[2]), this.indiceEdicion, this.texto, this.imagen, this.tabla, this.fila);
                    //Si Abrir esta presente lo abre
                    if (instruccion.Length == 4 && instruccion[3].Equals("Abrir"))
                    {
                        TxtArea.Text += Environment.NewLine + aux.AbrirPDF(new Ruta().GetAbsolutePath(instruccion[2]) + (char)92 + aux.nombre + ".pdf");
                    }
                    //Elimina el PDF de la lista
                    pdf.Remover(aux);
                    //Desenfoca el PDF
                    focusedPDF = null;
                    //Reinicia el indice
                    this.indiceEdicion = 1;
                }
                else
                {
                    //Sino informa al usuario
                    TxtArea.Text += Environment.NewLine + "PDF sin enfocar " + instruccion[1] + ". Intente ingresarAPdf " + instruccion[1] + " y pruebe de nuevo";
                    //Agrega el error a la lista
                    err.Enlistar(new Error(err.GetLargo() + 1, instruccion[1], -1, instruccion[0].Length + 2, "Error de entorno. PDF sin enfocar"));
                }
                break;

            //4
            case "escribirTexto":
                //Determina si el entorno es correcto, buscando el PDF enfocado actualmente
                if (string.IsNullOrEmpty(focusedPDF) || focusedPDF.Equals(""))
                {
                    //Informa al usuario del error y el sistema agrega a la lista el error
                    TxtArea.Text += Environment.NewLine + "Instrucción fuera de entorno. No ha ingresado a PDF, consulte el Manual de Usuario";
                    err.Enlistar(new Error(err.GetLargo() + 1, instruccion[0], -1, 1, "Error de Entorno. No hay PDF enfocado"));
                }
                else
                {
                    //Determina si se subraya o no
                    if (instruccion.Length < 4)
                    {
                        //Añade un texto subrayado
                        texto.Encolar(new Texto(instruccion[1], instruccion[2][0], (char)48, this.indiceEdicion++));
                    }
                    else
                    {
                        //Añade un texto sin subrayar
                        texto.Encolar(new Texto(instruccion[1], instruccion[2][0], instruccion[3][0], this.indiceEdicion++));
                    }
                    //Informa al usuario
                    TxtArea.Text += Environment.NewLine + "Se escribió texto";
                }
                break;

            //5
            case "imagen":
                if (string.IsNullOrEmpty(focusedPDF) || focusedPDF.Equals(""))
                {
                    TxtArea.Text += Environment.NewLine + "Instrucción fuera de entorno. No ha ingresado a PDF, consulte el Manual de Usuario";
                    err.Enlistar(new Error(err.GetLargo() + 1, instruccion[0], -1, 1, "Error de Entorno. No hay PDF enfocado"));
                }
                else
                {
                    //Determina la existencia del archivo de imagen
                    if (File.Exists(new Ruta().GetAbsolutePath(instruccion[1])))
                    {
                        this.imagen.Encolar(new Imagen(new Ruta().GetAbsolutePath(instruccion[1]), instruccion[2], indiceEdicion++));
                        TxtArea.Text += Environment.NewLine + "Imagen agregada correctamente";
                    }
                    else
                    {
                        TxtArea.Text += Environment.NewLine + "No se pudo encontrar la imagen en la ruta especificada.";
                        err.Enlistar(new Error(err.GetLargo() + 1, instruccion[1], -1, instruccion[0].Length + 2, "Archivo no Encontrado. Ruta inválida"));
                    }
                }
                break;

            //6
            case "crearTabla":
                if (string.IsNullOrEmpty(focusedPDF) || focusedPDF.Equals(""))
                {
                    //Informa al usuario que no hay ningun PDF enfocado y lista el error
                    TxtArea.Text += Environment.NewLine + "Instrucción fuera de entorno. No ha ingresado a PDF, consulte el Manual de Usuario";
                    err.Enlistar(new Error(err.GetLargo() + 1, instruccion[0], -1, 0, "Error de Entorno. No hay PDF enfocado."));
                }
                else
                {
                    //Añade la tabla a la cola e informa al usuario
                    this.tabla.Encolar(new Tabla(instruccion[1], instruccion[2], indiceEdicion++));
                    TxtArea.Text += Environment.NewLine + "Tabla agregada correctamente";
                }
                break;

            //7
            case "crearFila":
                if (string.IsNullOrEmpty(focusedPDF) || focusedPDF.Equals(""))
                {
                    //Informa al usuario que no hay ningun PDF enfocado y enlista el error
                    TxtArea.Text += Environment.NewLine + "Instrucción fuera de entorno. No ha ingresado a PDF. Consulte el Manual de Usuario <mostrar> <ManualUsuario>";
                    err.Enlistar(new Error(err.GetLargo() + 1, instruccion[0], -1, 0, "Error de Entorno. No hay PDF enfocado."));
                }
                else
                {
                    //Agrega una nueva fila a la lista e informa al usuario
                    this.fila.Enlistar(new Fila(instruccion[1], instruccion[2]));
                    TxtArea.Text += Environment.NewLine + "Fila agregada a " + instruccion[2];
                }
                break;

            //8
            case "ejecutar":
                if (string.IsNullOrEmpty(focusedPDF) || focusedPDF.Equals(""))
                {
                    //Verifica si hay más de una instrucción ejecutar, es decir si se encuentra un Ruta
                    if (instruccion.Length > 1)
                    {
                        //Verifica que el archivo exista y que sea .If
                        if (File.Exists(new Ruta().GetAbsolutePath(instruccion[1])) && (instruccion[1].Substring(instruccion[1].Length - 3, 3).Equals(".If") || instruccion[1].Substring(instruccion[1].Length - 3, 3).Equals(".if")))
                        {
                            //Limpia el editor y agrega el texto obtenido del archivo
                            this.TxtEditor.Text = new Ruta().GetTextFromFile(new Ruta().GetAbsolutePath(instruccion[1]));
                        }
                        else
                        {
                            //No se encuentra el archivo y se informa al usuario
                            TxtArea.Text += Environment.NewLine + "El archivo no se encuentra en la ruta especificada o la extensión es incorrecta";
                            err.Enlistar(new Error(err.GetLargo() + 1, instruccion[1], -1, instruccion[0].Length + 2, "Archivo no Encontrado. Ruta inválida"));
                        }
                    }
                    //lineaCodigo guarda todo lo que contiene el txt en un array , separados por filas
                    String[] lineaCodigo = TxtEditor.Lines;
                    //Obtiene el número de filas que tiene el array lineaCodigo
                    int rowsCodigo = lineaCodigo.Length;
                    //Instancia un Lenguaje de esta forma se mantiene las filas y columnas
                    Lenguaje leng = new Lenguaje();
                    for (int i = 0; i < rowsCodigo; i++)
                    {
                        //Obtiene la cadena a Escanear
                        String cadenaEscanear = lineaCodigo[i];
                        //Verifica que la cadena no esté vacía y evita crear un loop
                        if (!string.IsNullOrEmpty(cadenaEscanear) && !cadenaEscanear.Equals("") && !cadenaEscanear.Contains("ejecutar"))
                        {
                            //Manda al analizador toda esta onda
                            ListaSimple analizador = leng.AnalizarCadena(cadenaEscanear + (char)10);
                            //Guarda la cadena
                            Cola AEjecutar = GuardarTokens(analizador);
                            //Determina si la cadena se ejecuta o no
                            if (Escanear(analizador))
                            {
                                //Ejecuta la cadena
                                EjecutarToken(AEjecutar);
                            }
                        }
                    }
                }
                else
                {
                    //Informa a usuario que no hay ningun PDF enfocado y lo agrega a la lista
                    TxtArea.Text += Environment.NewLine + "Instrucción fuera de entorno. Consulte el Manual de Usuario <mostrar> <ManualUsuario>";
                    err.Enlistar(new Error(err.GetLargo() + 1, instruccion[0], -1, 0, "Error de entorno. Hay un PDF enfocado"));
                }
                break;

            //9
            case "mostrar":
                if (instruccion[1].Equals("ManualUsuario"))
                {
                    new PDF().AbrirPDF(new Ruta().GetAbsolutePath("raiz/ManualUsuario.pdf"));
                }
                if (instruccion[1].Equals("ManualTecnico"))
                {
                    new PDF().AbrirPDF(new Ruta().GetAbsolutePath("raiz/ManualTecnico.pdf"));
                }
                break;

            //10
            case "reporteTokens":
                //Crea y despliega el pvto >:V HTML xdDXdX
                new Ruta().GenerarYAbrirFile(new Ruta().ReporteTokens(token, err), "ReporteTokens", ".html", true);
                break;

            //11
            case "acercaDe":
                MessageBox.Show("201602782 - Sergio Fernando Otzoy Gonzalez", "Lenguajes Formales y de Programación");
                break;

            default:
                TxtArea.Text += Environment.NewLine + "«" + instruccion[0] + "» no se reconoce como instruccion. Consulte los Manuales -> <mostrar> <ManualUsuario> ó <ManualTecnico>";
                break;
            }
            TxtArea.Text += Environment.NewLine;
        }