示例#1
0
        private void button1_Click(object sender, EventArgs e)
        {
            if (ValidarParametros(txtPunto.Text, cbGradoPertenencia.Text))
            {
                this.Size = new Size(1400, 600);
                Controls.Remove(pv);
                double punto       = double.Parse(txtPunto.Text);
                string pertenencia = cbGradoPertenencia.Text;

                if (rbDiscreto.Checked)
                {
                    ConjuntoDifusoDiscreto conjuntoDiscreto = new ConjuntoDifusoDiscreto((int)punto, pertenencia);
                    var valores    = conjuntoDiscreto.ObtenerValores();
                    var segmentos  = conjuntoDiscreto.ObtenerSegmentos();
                    var ecuaciones = conjuntoDiscreto.ObtenerEcuaciones();
                    pv = Graficador.Generar_Grafica(valores, segmentos, ecuaciones, "Discreto", (int)punto);
                    Controls.Add(pv);
                }
                else if (rbContinuo.Checked)
                {
                    ConjuntoDifusoContinuo conjuntoContinuo = new ConjuntoDifusoContinuo(punto, pertenencia);
                    var valores  = conjuntoContinuo.ObtenerValores();
                    var ecuacion = conjuntoContinuo.OtenerEcuacion();
                    var segmento = conjuntoContinuo.ObtenerSegmento();
                    pv = Graficador.Generar_Grafica(valores, segmento, ecuacion, "Continuo", punto);
                    Controls.Add(pv);
                }
            }
            else
            {
                MessageBox.Show("Debe ingresar los parametros correctamente");
            }
        }
        //Grafico las Reglas Lexicas -> AFND
        private void graficarAFN_Reglas()
        {
            Graficador g = new Graficador();

            foreach (var item in arch.reglas)
            {
                g.AFND_graficar(item.ruta_relativa, item.afn.listaEstados);
            }
        }
        private void graficarAFN_Conjuntos_si()
        {
            Graficador g = new Graficador();

            int i = 1;

            foreach (var item in arch.conjuntos)
            {
                contador = 0;
                Automata tempo = item.Value.getAFND_Conjuntos();
                g.AFND_graficar("Conjunto_" + i + "_" + item.Value.nombre, tempo.start);
                i++;
            }
        }
示例#4
0
        private void btnAnalizar_Click(object sender, EventArgs e)
        {
            this.cbxExpresion.Items.Clear();
            this.richConsola.Text = "";
            CreatePage       page             = new CreatePage();
            AnalizadorLexico analizadorLexico = new AnalizadorLexico();

            ListaTk  = analizadorLexico.analizar(tab.searchTxt()); //Optenemos la lista de tokens
            ListaErr = analizadorLexico.getListErr();              //Optenemos la lista de erros
            if (ListaErr.Count == 0)                               //En dado caso la lista de errores este vacia, podremos imprimir la lista de tokens
            {
                // xml.Tokens(ListaTk);
                page.pageTokens(ListaTk);
                AnalizarTokens analizarTK = new AnalizarTokens(ListaTk);
                analizarTK.analizarTokens();


                foreach (var item in analizarTK.LstThompson)
                {
                    Graficador graficador = new Graficador();
                    //* Gra gra = new Gra();
                    //*  gra.graficar(item.Raiz.dot(), item.NameEr); //Mandamos el contenido del dot y el nombre que contendra el archivo(sera el mismo de la expresion)
                    //* gra.abrirGrafo();
                    graficador.graficar(item.Raiz.dot(), item.NameEr); //Mandamos el contenido del dot y el nombre que contendra el archivo(sera el mismo de la expresion)
                    //  graficador.abrirGrafo();
                    graficador.graficar(item.Transiciones.dot(), item.NameEr + "-table");
                    //  graficador.abrirGrafo();
                    graficador.graficar(item.Transiciones.dotAFD(), item.NameEr + "-AFD");
                    //  graficador.abrirGrafo
                    graficador.graficar(item.Transiciones.dotTableC(), item.NameEr + "-tableC");
                    File.WriteAllText(item.NameEr + ".xml", "Reporete Tokens de la expresion regular: " + item.NameEr + " \n \n");
                    this.cbxExpresion.Items.Add(item.NameEr);
                    this.cbxExpresion.SelectedIndex = 0;
                }

                foreach (var item in analizarTK.LstLexamas)
                {
                    richConsola.Text += "Lexema: " + item.Cadena + " de la expresion: " + item.ExpresionName + " es: " + item.Valido.ToString() + "\n";
                    xml.Tokens(item.LstToken, " Tokens de lexema \"" + item.Cadena + "\" \n", item.ExpresionName);
                    xml.Errores(item.LstErrores, " Errores de lexema \"" + item.Cadena + "\" \n", item.ExpresionName);
                }
                MessageBox.Show("Analicis Correcto");
            }
            else //de lo contrario imprimeremos la lista de errores
            {
                page.pageError(ListaErr);
                //xml.Errores(ListaErr);
            }
        }
        //Grafico conjuntos
        private void graficarAFN_Conjuntos()
        {
            Graficador g = new Graficador();
            int        i = 1;

            foreach (var item in arch.conjuntos)
            {
                contador = 0;
                Automata tempo = item.Value.getAFND_Conjuntos();
                tempo.listaEstados = new Dictionary <String, Nodo>();
                this.enumerarEstadosAFN(tempo.start, tempo.listaEstados);
                g.AFND_graficar("Conjunto_" + i + "_" + item.Value.nombre, tempo.listaEstados);
                i++;
            }
        }
示例#6
0
        private void analizar_Click(object sender, EventArgs e)
        {
            try
            {
                string text = System.IO.File.ReadAllText(@"entrada.txt");

                Gramatica      grammar  = new Gramatica();
                LanguageData   lenguaje = new LanguageData(grammar);
                Parser         parser   = new Parser(lenguaje);
                ParseTree      arbol    = parser.Parse(text);
                ParseTreeNode  raiz     = arbol.Root;
                ConstructorAST builder  = new ConstructorAST();

                if (arbol.ParserMessages.Count == 0)
                {
                    Graficador j = new Graficador();
                    j.graficar(arbol.Root);
                    ConstructorAST an       = new ConstructorAST();
                    AST            auxArbol = an.Analizar(arbol.Root);
                    if (auxArbol != null)
                    {
                        auxArbol.ejecutar();
                    }
                    else
                    {
                        MessageBox.Show("No gener bien mi arbol aux en form1");
                    }
                }
                else
                {
                    for (int i = 0; i < arbol.ParserMessages.Count; i++)
                    {
                        int fila = arbol.ParserMessages.ElementAt(i).Location.Line + 1;
                        MessageBox.Show("USL-Mensaje: " + arbol.ParserMessages.ElementAt(i).Message +
                                        " Linea: " + fila +
                                        " Columna: " + arbol.ParserMessages.ElementAt(i).Location.Column);
                    }
                    MessageBox.Show("Hay errores lexicos o sintacticos\n El arbol de Irony no se construyo. Cadena invalida!\n");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + " " + ex.Source + "  " + ex.ToString());
            }
        }
        private void Accciones(ParseTree arbol)
        {
            //------------------------> Objeto que grafica
            Graficador g = new Graficador();

            g.Arbol_graficar(arbol);

            F1_Clasificar(arbol.Root.ChildNodes[0]);

            if (arch.errores.Count > 0)
            {
                return;
            }
            //------------------------> Aplicar Metodo Subconjuntos
            F2_A_MetodoSubconjuntos();

            //------------------------> Generar AFD's
        }
示例#8
0
 private void load()
 {
     try
     {
         using (System.Windows.Forms.OpenFileDialog dialog = new OpenFileDialog())
         {
             if (dialog.ShowDialog() == DialogResult.OK)
             {
                 using (Stream st = File.Open(dialog.FileName, FileMode.Open))
                 {
                     var binfor = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
                     G = (Graficador)binfor.Deserialize(st);
                     PanelDibujo.Refresh();
                     actEtiquetas();
                     MessageBox.Show("CARGADO");
                 }
             }
         }
     }
     catch (Exception)
     {
         throw;
     }
 }
示例#9
0
        //private static LinkedList<Background> lista_background = new LinkedList<Background>();
        //private static LinkedList<Figure> lista_figure = new LinkedList<Figure>();
        //private static LinkedList<Design> lista_design = new LinkedList<Design>();

        public static bool analizar1(String entrada)
        {
            Gramatica1    gramatica = new Gramatica1();
            LanguageData  lenguaje  = new LanguageData(gramatica);
            Parser        parser    = new Parser(lenguaje);
            ParseTree     arbol     = parser.Parse(entrada);
            ParseTreeNode raiz      = arbol.Root;

            if (arbol.Root == null)
            {
                Analizadores.Error error;

                for (int i = 0; i < arbol.ParserMessages.Count(); i++)
                {
                    String tipo;
                    String mensaje = arbol.ParserMessages.ElementAt(i).Message;
                    int    line    = arbol.ParserMessages.ElementAt(i).Location.Line;;
                    int    column  = arbol.ParserMessages.ElementAt(i).Location.Column;

                    if (arbol.ParserMessages.ElementAt(i).Message.Contains("Invalid"))
                    {
                        tipo  = "Lexico";
                        error = new Error(tipo, mensaje, line, column);
                        Form1.LErrores.Add(error);
                    }
                    else
                    {
                        tipo  = "Sintactico";
                        error = new Error(tipo, mensaje, line, column);
                        Form1.LErrores.Add(error);
                    }
                }
                return(false);
            }
            else
            {
                Analizadores.Error error;
                for (int i = 0; i < arbol.ParserMessages.Count(); i++)
                {
                    String tipo;
                    String mensaje = arbol.ParserMessages.ElementAt(i).Message;
                    int    line    = arbol.ParserMessages.ElementAt(i).Location.Line;;
                    int    column  = arbol.ParserMessages.ElementAt(i).Location.Column;;
                    if (arbol.ParserMessages.ElementAt(i).Message.Contains("Invalid"))
                    {
                        tipo  = "Lexico";
                        error = new Error(tipo, mensaje, line, column);
                        Form1.LErrores.Add(error);
                    }
                    else
                    {
                        tipo  = "Sintactico";
                        error = new Error(tipo, mensaje, line, column);
                        Form1.LErrores.Add(error);
                    }
                }
                Graficador r = new Graficador();
                r.graficar(arbol);
                recorrer(arbol.Root);
                //r.GraficarFlujo();
                //Ejecucion.Ejecutor ejecutor = new Ejecucion.Ejecutor();
                //ejecutor.ejecutarAST(arbol.Root);
                // ya tenes lo de consola
                //Form1 form = new Form1();
                //String consola = ejecutor.salida.ToString();
                return(true);
            }
        }
示例#10
0
        private void button1_Click(object sender, System.EventArgs e)
        {
            if (!TextArea.Text.Equals(string.Empty))
            {
                Consola.Text = "";
                Gramatica    grammar  = new Gramatica();
                LanguageData lenguaje = new LanguageData(grammar);
                Parser       parser   = new Parser(lenguaje);
                ParseTree    arbol    = parser.Parse(TextArea.Text);

                if (arbol.ParserMessages.Count != 0)
                {
                    MessageBox.Show("Se han encontrado errores", "Errores",
                                    MessageBoxButtons.OK,
                                    MessageBoxIcon.Error);

                    List <LogMessage> errores = arbol.ParserMessages;
                    foreach (LogMessage error in errores)
                    {
                        if (error.Message.Contains("Sintax"))
                        {
                            Consola.AppendText("Error Sintactico, " + error.Message + " Linea: " + error.Location.Line + ", Columna: " + error.Location.Column);
                        }
                        else
                        {
                            Consola.AppendText("Error Lexico, " + error.Message + " Linea: " + error.Location.Line + ", Columna: " + error.Location.Column);
                        }
                    }
                }
                else
                {
                    GeneradorAST generadorAST = new GeneradorAST(arbol);
                    AST          ast          = generadorAST.arbol;
                    Entorno      ent          = new Entorno(null);

                    if (ast != null)
                    {
                        foreach (Instruccion ins in ast.Instrucciones)
                        {
                            ins.ejecutar(ent, ast);
                        }

                        if (ast.existeFuncion("main"))
                        {
                            Funcion main = ast.getFuncion("main");
                            foreach (Instruccion ins in main.instrucciones)
                            {
                                ins.ejecutar(ent, ast);
                            }
                        }
                        else
                        {
                            MessageBox.Show("No se encontró la funcion main!!", "Errores",
                                            MessageBoxButtons.OK,
                                            MessageBoxIcon.Error);
                        }

                        Graficador j = new Graficador();
                        j.graficar(arbol.Root);
                    }
                    else
                    {
                        MessageBox.Show("Error generando el AST", "Errores",
                                        MessageBoxButtons.OK,
                                        MessageBoxIcon.Error);
                    }
                }
            }
        }
示例#11
0
 private void btnInterpretar_Click(object sender, EventArgs e)
 {
     if (!txtEntrada.Text.Equals(string.Empty))
     {
         Gramatica    grammar  = new Gramatica();
         LanguageData lenguaje = new LanguageData(grammar);
         Parser       parser   = new Parser(lenguaje);
         ParseTree    arbol    = parser.Parse(txtEntrada.Text);
         if (arbol.ParserMessages.Count == 0)
         {
             Graficador j = new Graficador();
             j.graficar(arbol.Root);
             ConstructorAST an       = new ConstructorAST();
             AST            auxArbol = an.Analizar(arbol.Root);
             Entorno        global   = new Entorno(null);
             try
             {
                 if (auxArbol != null)
                 {
                     foreach (Instruccion ins in auxArbol.Instrucciones)
                     {
                         if (ins is Funcion)
                         {
                             Funcion funcion = (Funcion)ins;
                             global.agregar(funcion.Identificador, funcion);
                             foreach (NodoAST instruccion in funcion.Instrucciones)
                             {
                                 if (instruccion is DefinicionStruct)
                                 {
                                     DefinicionStruct crear = (DefinicionStruct)instruccion;
                                     crear.ejecutar(global, auxArbol);
                                 }
                             }
                         }
                         if (ins is Declaracion)
                         {
                             Declaracion declaracion = (Declaracion)ins;
                             declaracion.ejecutar(global, auxArbol);
                         }
                         if (ins is DefinicionStruct)
                         {
                             DefinicionStruct crear = (DefinicionStruct)ins;
                             crear.ejecutar(global, auxArbol);
                         }
                     }
                     foreach (Instruccion ins in auxArbol.Instrucciones)
                     {
                         if (ins is Main)
                         {
                             Main main = (Main)ins;
                             foreach (NodoAST instruccion in main.Instrucciones)
                             {
                                 if (instruccion is DefinicionStruct)
                                 {
                                     DefinicionStruct crear = (DefinicionStruct)instruccion;
                                     crear.ejecutar(global, auxArbol);
                                 }
                             }
                             Entorno local = new Entorno(global);
                             main.ejecutar(local, auxArbol);
                         }
                     }
                 }
                 else
                 {
                     MessageBox.Show("El arbol de Irony no se construyo. Cadena invalida!\n");
                 }
             }
             catch (Exception ex)
             {
                 MessageBox.Show(ex.ToString());
             }
         }
         else
         {
             // Aca deben gestionar esos errores :)
             MessageBox.Show("Hay errores lexicos o sintacticos\n El arbol de Irony no se construyo. Cadena invalida!\n");
         }
     }
 }
示例#12
0
        private void compilarToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (tabsEntradas.TabCount > 0)
            {
                String entrada = obtenerEntrada().Replace("”", "\"").Replace("“", "\"").Replace("\r", "").Replace("\f", "").Trim();
                if (entrada.Length > 0)
                {
                    Importar.Reset();
                    Gramatica     gramatica = new Gramatica();
                    LanguageData  lenguaje  = new LanguageData(gramatica);
                    Parser        parser    = new Parser(lenguaje);
                    ParseTree     arbol     = parser.Parse(entrada);
                    ParseTreeNode AST       = arbol.Root;

                    List <Instruccion> myAST = new List <Instruccion>();
                    if (AST != null)
                    {
                        myAST = new GeneradorAST().Analizar(AST);
                    }
                    bool debug = true;
                    if (!debug)
                    {
                        if (AST != null)
                        {
                            Graficador g = new Graficador();
                            string     s = g.GenerarGrafo(AST);

                            StreamWriter archivo = new StreamWriter("debug.dot", false);
                            archivo.Write(s);
                            archivo.Close();

                            Process p = new Process();
                            p.StartInfo.FileName    = @"C:\Program Files (x86)\Graphviz2.38\bin\dot.exe";
                            p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                            p.StartInfo.Arguments   = "-Tpng debug.dot -o debug.png";
                            p.EnableRaisingEvents   = true;
                            p.Exited += (sender1, e1) =>
                            {
                                Thread.Sleep(100);
                                Process.Start("debug.png");
                            };
                            p.Start();
                        }
                    }

                    Stuff stuff = new Stuff(textBoxConsola);
                    foreach (Irony.LogMessage error in parser.Context.CurrentParseTree.ParserMessages)
                    {
                        stuff.erroresLexicosSintacticos.Add(new Irony.LogMessage(error.Level, error.Location, ((((MyTab)tabsEntradas.SelectedTab).file != null) ? Path.GetFileName(((MyTab)tabsEntradas.SelectedTab).file) + ": " : "No File: ") + error.Message, error.ParserState));
                    }
                    ejecutar(myAST, stuff);
                }
                else
                {
                    MessageBox.Show("Entrada vacía", "Advertencia");
                }
            }
            else
            {
                MessageBox.Show("No hay ni una tab para compilar", "Advertencia");
            }
        }