Пример #1
0
        public override Result GetC3D(Ent e, bool funcion, bool ciclo, bool isDeclaracion, bool isObjeto, LinkedList <Error> errores)
        {
            if (!isDeclaracion)
            {
                Debugger(e, "Import");
            }

            string archivo = DirActual + Direccion.Substring(1, Direccion.Length - 2);

            archivo = archivo.Replace("\\\\", "\\");
            archivo = archivo.Replace("/", "");

            if (Path.HasExtension(archivo))
            {
                if (Path.GetExtension(archivo).ToLower().Equals(".colette"))
                {
                    StreamReader reader = null;

                    try
                    {
                        reader = new StreamReader(archivo);
                        string contenido = reader.ReadToEnd();

                        if (contenido != null)
                        {
                            if (!contenido.Equals(string.Empty))
                            {
                                AnalizadorColette analizador = new AnalizadorColette();

                                if (analizador.AnalizarEntrada(contenido))
                                {
                                    Arbol arbol = (Arbol)analizador.GenerarArbol(analizador.Raiz.Root);

                                    if (arbol != null)
                                    {
                                        Sentencias = new LinkedList <Nodo>();
                                        LinkedList <Import> imports = new LinkedList <Import>();

                                        foreach (Nodo n in arbol.Sentencias)
                                        {
                                            if (n is Import import)
                                            {
                                                import.DirActual = DirActual;
                                                import.GetC3D(e, false, false, false, false, errores);
                                                imports.AddLast(import);
                                            }
                                            else
                                            {
                                                Sentencias.AddLast(n);
                                            }
                                        }

                                        foreach (Import import in imports)
                                        {
                                            if (import.Sentencias != null)
                                            {
                                                foreach (Nodo n in import.Sentencias)
                                                {
                                                    Sentencias.AddLast(n);
                                                }
                                            }
                                        }
                                    }
                                }

                                for (int i = 0; i < analizador.Raiz.ParserMessages.Count(); i++)
                                {
                                    LogMessage m = analizador.Raiz.ParserMessages.ElementAt(i);
                                    if (m.Message.ToString().Contains("character"))
                                    {
                                        errores.AddLast(new Error("Léxico", m.Message.Replace("Invalid character", "Carácter inválido"), (m.Location.Line + 1), (m.Location.Column + 1)));
                                    }
                                    else
                                    {
                                        errores.AddLast(new Error("Sintáctico", m.Message.Replace("Syntax error, expected:", "Error de sintáxis, se esperaba:"), (m.Location.Line + 1), (m.Location.Column + 1)));
                                    }
                                }

                                return(null);
                            }
                        }
                        errores.AddLast(new Error("Semántico", "Ocurrió un error leyendo el archivo " + archivo + ".", Linea, Columna));
                    }
                    catch (Exception)
                    {
                        errores.AddLast(new Error("Semántico", "Ocurrió un error abriendo el archivo " + archivo + ".", Linea, Columna));
                    }
                }
                else
                {
                    errores.AddLast(new Error("Semántico", "La extensión del archivo debe ser .colette " + archivo + ".", Linea, Columna));
                }
            }
            else
            {
                errores.AddLast(new Error("Semántico", "No es un archivo lo que se desea importar" + archivo + ".", Linea, Columna));
            }

            return(null);
        }
Пример #2
0
        private void TraducirColette()
        {
            if (tabArchivo.SelectedIndex != -1)
            {
                TabPage            sPage      = tabArchivo.SelectedTab;
                FastColoredTextBox ctbArchivo = (FastColoredTextBox)sPage.Controls[0];

                TabControl tControl = (TabControl)sPage.Controls[2];

                TabPage            sPage3d = tControl.TabPages[0];
                FastColoredTextBox ctb3D   = (FastColoredTextBox)sPage3d.Controls[0];

                if (!ctbArchivo.Text.Equals(string.Empty))
                {
                    AnalizadorColette analizador = new AnalizadorColette();
                    string            entrada    = ctbArchivo.Text;//.Replace("\\", "\\\\");
                    ctb3D.Clear();
                    txtOutput.Clear();

                    if (analizador.AnalizarEntrada(entrada))
                    {
                        //MessageBox.Show("Archivo sin errores.");
                        ReporteErrores(analizador.Raiz);

                        Arbol arbol = (Arbol)analizador.GenerarArbol(analizador.Raiz.Root);

                        if (ctbArchivo.Name.Equals(""))
                        {
                            arbol.DirActual = Directory.GetCurrentDirectory() + "\\";
                        }
                        else
                        {
                            string archivo = ctbArchivo.Name;
                            arbol.DirActual = Directory.GetParent(archivo) + "\\";
                        }

                        arbol.Debug = Debugger;

                        if (arbol != null)
                        {
                            //MessageBox.Show("todo bien");
                            LinkedList <Error> errores = new LinkedList <Error>();
                            string             c3d     = arbol.GenerarC3D(errores);
                            ctb3D.Text           = c3d;
                            tControl.SelectedTab = sPage3d;

                            if (errores.Count() > 0)
                            {
                                MessageBox.Show("El archivo tiene errores.");
                                tabSalida.SelectedTab = pageErrores;
                                ReporteErroresAnalisis(errores);
                            }
                        }
                    }
                    else
                    {
                        MessageBox.Show("El archivo tiene errores.");
                        tabSalida.SelectedTab = pageErrores;
                        ReporteErrores(analizador.Raiz);
                    }
                }
            }
            else
            {
                MessageBox.Show("No ha abierto un archivo colette.", "Error");
            }
        }