public ActionResult Copy(GramaticasMoveViewModel viewModel)
        {
            int       id        = viewModel.Gramatica.GramaticaId;
            Gramatica gramatica = db.Gramaticas.Include(gra => gra.GramaticaCuerpo).Include(g => g.Vocabularios).FirstOrDefault(g => g.GramaticaId == id);

            var subtemaOrigen = db.SubTemas.Include(s => s.Tema).SingleOrDefault(s => s.SubTemaId == gramatica.SubTemaId);

            if (gramatica != null)
            {
                //copia de gramatica y vocabularios
                Gramatica gramaticaNuevo = new Gramatica();
                gramaticaNuevo           = gramatica;
                gramaticaNuevo.SubTemaId = viewModel.SubTemaCopiarId;

                //orden
                int nuevoOrden = db.Gramaticas.Where(g => g.SubTemaId == viewModel.SubTemaCopiarId).Count();
                gramaticaNuevo.Orden = nuevoOrden + 1;

                db.Gramaticas.Add(gramaticaNuevo);
                db.SaveChanges();


                return(RedirectToAction("Index", "Bloques", new { id = gramaticaNuevo.SubTemaId, pestanya = (int)PestanyasBloques.Gramaticas }));
            }

            viewModel.InicializarDesplegables();
            return(View(viewModel));
        }
Ejemplo n.º 2
0
    protected void OnCombobox2Changed(object sender, EventArgs e)
    {
        string[]  indice = combobox2.ActiveText.Split(' ');
        Gramatica temp   = gramaticas[Int32.Parse(indice[1])];
        string    texto  = "";

        foreach (var t in temp.Producoes)
        {
            Gramatica.Regular producao = t.Value;
            string            parte    = "";
            for (int j = 0; j < producao.Proximos.Count; j++)
            {
                if (producao.Proximos.Count > 1)
                {
                    if (j == producao.Proximos.Count - 1)
                    {
                        parte += producao.Proximos[j];
                    }
                    else
                    {
                        parte += producao.Proximos[j] + "|";
                    }
                }
                else
                {
                    parte += producao.Proximos[j];
                }
            }
            //if ((producao.Atual != "" && parte != "") && (producao.Atual != "" || parte != "")) {
            texto += producao.Atual + "->" + parte + "\r\n";
            //}
        }
        textview2.Buffer.Text = texto;
    }
Ejemplo n.º 3
0
    public void coverterAFDGR(int indice)
    {
        Automato  temp  = automatos [indice];
        Gramatica GR    = new Gramatica(temp);
        string    texto = "";

        foreach (var t in GR.Producoes)
        {
            Gramatica.Regular producao = t.Value;
            string            parte    = "";
            for (int j = 0; j < producao.Proximos.Count; j++)
            {
                if (producao.Proximos.Count > 1)
                {
                    if (j == producao.Proximos.Count - 1)
                    {
                        parte += producao.Proximos[j];
                    }
                    else
                    {
                        parte += producao.Proximos[j] + "|";
                    }
                }
                else
                {
                    parte += producao.Proximos[j];
                }
            }
            //if ((producao.Atual != "" && parte != "") && (producao.Atual != "" || parte != "")) {
            texto += producao.Atual + "->" + parte + "\r\n";
            //}
        }
        textview2.Buffer.Text = texto;
    }
        // GET: Admin/Gramaticas/Delete/5
        public ActionResult Delete(int id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            Gramatica gramatica = db.Gramaticas.Find(id);

            if (gramatica == null)
            {
                return(HttpNotFound());
            }

            //Ordenar de nuevo todos los Gramaticas
            foreach (Gramatica gr in db.Gramaticas.Where(b => b.SubTemaId == gramatica.SubTemaId && b.Orden > gramatica.Orden).ToList())
            {
                gr.Orden = (gr.Orden) - 1;

                db.Entry(gr).State = EntityState.Modified;
            }
            db.SaveChanges();

            //Eliminar subtema
            db.Gramaticas.Remove(gramatica);
            db.SaveChanges();
            return(RedirectToAction("Index", "Bloques", new { id = gramatica.SubTemaId, pestanya = (int)PestanyasBloques.Gramaticas }));
        }
        public ActionResult Move(GramaticasMoveViewModel viewModel)
        {
            int       id        = viewModel.Gramatica.GramaticaId;
            Gramatica gramatica = db.Gramaticas.Find(id);
            var       subtema   = db.SubTemas.Include(s => s.Tema).SingleOrDefault(s => s.SubTemaId == gramatica.SubTemaId);

            viewModel.SubTema   = subtema;
            viewModel.Gramatica = gramatica;
            if (gramatica != null)
            {
                //Ordenar de nuevo todas los Gramaticas
                foreach (Gramatica gr in db.Gramaticas.Where(b => b.SubTemaId == gramatica.SubTemaId && b.Orden > gramatica.Orden).ToList())
                {
                    gr.Orden = (gr.Orden) - 1;

                    db.Entry(gr).State = EntityState.Modified;
                }
                db.SaveChanges();

                viewModel.Gramatica.SubTemaId       = viewModel.SubTemaCopiarId;
                viewModel.Gramatica.Orden           = db.Gramaticas.Count(grama => grama.SubTemaId == viewModel.SubTemaCopiarId) + 1;
                db.Entry(viewModel.Gramatica).State = EntityState.Modified;
                db.SaveChanges();

                return(RedirectToAction("Index", "Bloques", new { id = viewModel.Gramatica.SubTemaId, pestanya = (int)PestanyasBloques.Gramaticas }));
            }

            viewModel.InicializarDesplegables();
            return(View(viewModel));
        }
        private void buttonGenAlfa_Click(object sender, EventArgs e)
        {
            //Validando que haya un dato deentrada en el textBoxNombre
            if (textBoxNombre.Text.Length == 0 || textBoxMatricula.Text.Length == 0 || textBoxApellido.Text.Length == 0)
            {
                MessageBox.Show("No se a ingresado nombre, apellido y/o matricula", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            else
            {
                Condiciones cond = new Condiciones();
                bool        mat  = cond.validadorMatricula(textBoxMatricula.Text);

                if (mat)
                {
                    Alfabeto alf2 = new Alfabeto();

                    labelMuestraAlfabeto.Text = "{ " + string.Join(",", alf2.obtenerAlfabeto(textBoxNombre.Text.ToLower() + textBoxApellido.Text.ToLower(), textBoxMatricula.Text)) + " }";

                    Gramatica gram2 = new Gramatica();
                    labelj.Text  = "j={ " + string.Join(",", gram2.obtenernombre(textBoxNombre.Text.ToLower())) + " }";
                    labeli.Text  = "i={ " + string.Join(",", gram2.obtenerMatricula(textBoxMatricula.Text)) + " }";
                    labelw.Text  = "w={ " + string.Join(",", gram2.obteneriniciales(textBoxApellido.Text.ToLower(), 1)) + " }";
                    labelwi.Text = "w^I={ " + string.Join(",", gram2.obteneriniciales(textBoxApellido.Text.ToLower(), 2)) + " }";
                }
                else
                {
                    MessageBox.Show("La matricula debe de tener únicamente números", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
            }
        }
        private void ActualizarCuerpo(Gramatica gramatica)
        {
            gramatica.GramaticaCuerpo.Cuerpo = FileUploadHelper.ActualizarImagenesCuerpo(gramatica.GramaticaCuerpo.Cuerpo, gramatica.GramaticaId, "media/Gramatica/");

            db.Entry(gramatica.GramaticaCuerpo).State = EntityState.Modified;
            db.SaveChanges();
        }
        public AfisareGramaticaLLVM(Gramatica gramatica)
        {
            gramatica1 = gramatica;
            InterpreteazaGramaticaCMD = new RelayCommand(async() => await InterpreteazaGramatica());

            PrintingInformation();
        }
Ejemplo n.º 9
0
 public MenuPage(string fileName)
 {
     InitializeComponent();
     _gramatica = new Gramatica();
     _gramatica.GetData(fileName);
     mainContentFrame.Content = new GreetingPage();
 }
Ejemplo n.º 10
0
        private void Gramatica3(object sender, RoutedEventArgs e)
        {
            _gramatica = new Gramatica()
            {
                NaoTerminais = new List <NT>()
                {
                    new NT("S")
                    {
                        Producoes = new List <Producao> {
                            new Producao("S", "AB")
                        }
                    },
                    new NT("A")
                    {
                        Producoes = new List <Producao> {
                            new Producao("A", "a")
                        }
                    },
                    new NT("B")
                    {
                        Producoes = new List <Producao> {
                            new Producao("B", "b")
                        }
                    }
                },
                Terminais = new List <T>()
                {
                    new T("a"),
                    new T("b")
                }
            };

            Setup();
        }
Ejemplo n.º 11
0
        private void Gramatica2(object sender, RoutedEventArgs e)
        {
            _gramatica = new Gramatica()
            {
                NaoTerminais = new List <NT>()
                {
                    new NT("S")
                    {
                        Producoes = new List <Producao> {
                            new Producao("S", "a"), new Producao("S", "[L]")
                        }
                    },
                    new NT("L")
                    {
                        Producoes = new List <Producao> {
                            new Producao("L", "L;S"), new Producao("L", "S")
                        }
                    },
                },
                Terminais = new List <T>()
                {
                    new T("a"),
                    new T("["),
                    new T("]"),
                    new T(";"),
                }
            };

            Setup();
        }
Ejemplo n.º 12
0
        public static ParseTree AnalisisSemantico(string entrada)
        {
            var gramatica  = new Gramatica();
            var sintactico = new Parser(gramatica);

            return(sintactico.Parse(entrada));
        }
Ejemplo n.º 13
0
        public MainWindow()
        {
            InitializeComponent();

            _gramatica = new Gramatica();
            _producoes = new ObservableCollection <NT>();
            itemsControl.ItemsSource = _producoes;
        }
 public ShowTABPage(Gramatica gramatica)
 {
     gram = gramatica;
     InitializeComponent();
     gram.TabelaDeAnalizaSintactica();
     gram.PopulareTabela();
     TAB.ItemsSource = gram.Tab.DefaultView;
 }
Ejemplo n.º 15
0
        public static ParseTreeNode analizarArbol(string cadena)
        {
            Gramatica     gramatica = new Gramatica();
            LanguageData  lenguaje  = new LanguageData(gramatica);
            Parser        parser    = new Parser(lenguaje);
            ParseTree     arbol     = parser.Parse(cadena);
            ParseTreeNode raiz      = arbol.Root;

            return(arbol.Root);
        }
Ejemplo n.º 16
0
        public TabelaWindow(Gramatica gramatica, List <List <string> > tabelaLSR)
        {
            InitializeComponent();

            this.gramatica = gramatica;
            this.gramatica.NumerarProducoes();
            this.tabelaLSR = tabelaLSR;

            PrintarProducoes();
        }
Ejemplo n.º 17
0
        public Resultado ejecutar(Contexto ctx, int nivel)
        {
            //construir nombre

            String Nombre = "";

            Nombre = Interprete.Ruta + "EXP_" + Interprete.NoEXP + ".png";
            Gramatica.getEXP(instruccion.ChildNodes[0], Nombre);
            Interprete.NoEXP++;
            return(FabricarResultado.creaOk());
        }
        private void buttonAceptar_Click(object sender, EventArgs e)
        {
            //Validando que haya un dato deentrada en el textBoxNombre
            if (textBoxNombre.Text.Length == 0 || textBoxMatricula.Text.Length == 0 || textBoxApellido.Text.Length == 0)
            {
                MessageBox.Show("No se a ingresado nombre, apellido y/o matricula", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            else
            {
                Condiciones cond = new Condiciones();
                bool        mat  = cond.validadorMatricula(textBoxMatricula.Text);

                if (mat)
                {
                    //Creamos la lista que tendra a nuestro alfabeto
                    List <char> alfabeto = new List <char>();

                    Alfabeto alf2 = new Alfabeto();
                    alfabeto = alf2.obtenerAlfabeto(textBoxNombre.Text.ToLower() + textBoxApellido.Text.ToLower(), textBoxMatricula.Text);

                    labelMuestraAlfabeto.Text = "{ " + string.Join(",", alf2.obtenerAlfabeto(textBoxNombre.Text.ToLower() + textBoxApellido.Text.ToLower(), textBoxMatricula.Text)) + " }";

                    Gramatica gram2 = new Gramatica();
                    labelj.Text  = "j={ " + string.Join(",", gram2.obtenernombre(textBoxNombre.Text.ToLower())) + " }";
                    labeli.Text  = "i={ " + string.Join(",", gram2.obtenerMatricula(textBoxMatricula.Text)) + " }";
                    labelw.Text  = "w={ " + string.Join(",", gram2.obteneriniciales(textBoxApellido.Text.ToLower(), 1)) + " }";
                    labelwi.Text = "w^I={ " + string.Join(",", gram2.obteneriniciales(textBoxApellido.Text.ToLower(), 2)) + " }";

                    ValidarExpresion vExp = new ValidarExpresion(textBoxNombre.Text.ToLower(), textBoxApellido.Text.ToLower(), textBoxMatricula.Text);

                    //variables booleanas para guardar el estado true false de algunas condiciones
                    bool    SoloAlfabeto = cond.EnAlfabeto(textBoxExpresion.Text, alfabeto);
                    bool [] estados      = vExp.validar(textBoxExpresion.Text);

                    if (textBoxExpresion.Text.Length != 0)
                    {
                        MessageBox.Show("Esta en alfabeto: " + SoloAlfabeto +
                                        "\nInicia con la matricula: " + estados[0] +
                                        "\nContiene w: " + estados[1] +
                                        "\nContiene I en medio: " + estados[2] +
                                        "\nContiene 2 wI por cada w: " + estados[3] +
                                        "\nTermina con el nombre repetido 2 veces" + estados[4]);
                    }
                    else
                    {
                        MessageBox.Show("USTED INGRESO NADA", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
                else
                {
                    MessageBox.Show("La matricula debe de tener únicamente números", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
            }
        }
Ejemplo n.º 19
0
 public void CalcularLL1(Gramatica g)
 {
     Gramatica  = g;
     Primeros   = new Dictionary <char, List <string> >();
     Siguientes = new Dictionary <char, List <string> >();
     Tabla      = new Dictionary <char, Dictionary <string, Produccion> >();
     foreach (char nt in Gramatica.NoTerminales)
     {
         P(nt.ToString());
         S(nt.ToString());
     }
     LlenarTabla();
 }
Ejemplo n.º 20
0
        public static bool analizar(string cadena)
        {
            Gramatica     gramatica = new Gramatica();
            LanguageData  lenguaje  = new LanguageData(gramatica);
            Parser        parser    = new Parser(lenguaje);
            ParseTree     arbol     = parser.Parse(cadena);
            ParseTreeNode raiz      = arbol.Root;

            if (raiz == null)
            {
                return(false);
            }
            return(true);
        }
        /// <summary>
        /// Verificam daca inputul introdus de utilizator este corect,
        /// iar in caz afirmativ aplicam algoritmul pentru analizorul LL1.
        /// </summary>
        /// <returns></returns>
        private async Task VerifyLLConditions()
        {
            try
            {
                Gramatica gramatica = Utility.GenereazaGramaticaFromUI(SimbolStart, Neterminale, Terminale, ReguliProductie);
                AppViewModel.Instance.SetCurrentPage(AppPages.AfisareLL, gramatica);
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message, "Eroare intampinata in generarea gramaticii!", MessageBoxButton.OK, MessageBoxImage.Warning);
            }

            await Task.Delay(1);
        }
Ejemplo n.º 22
0
        public ShowGrammarPage(Gramatica gramatica)
        {
            InitializeComponent();
            simbolstartTB.Text = gramatica.Start;
            string tmp1 = Helper.Multime(gramatica.Neterminale, " ");

            neterminaleTB.Text = tmp1;
            string tmp2 = Helper.Multime(gramatica.Terminale, " ");

            terminaleTB.Text = tmp2;
            nrReguliTB.Text  = gramatica.NrReguliProductie.ToString();
            string tmp3 = Helper.MultimeReguli(gramatica.ReguliProductie, " ");

            reguliTB.Text = tmp3;
        }
        public void Remove(int vocabularioId, int gramaticaId)
        {
            Gramatica gramatica = db.Gramaticas.Include(gr => gr.Vocabularios).FirstOrDefault(gr => gr.GramaticaId == gramaticaId);

            if (gramatica != null)
            {
                Vocabulario vocabulario = db.Vocabularios.Find(vocabularioId);
                if (vocabulario != null)
                {
                    gramatica.Vocabularios.Remove(vocabulario);
                    db.Entry(gramatica).State = EntityState.Modified;
                    db.SaveChanges();
                }
            }
        }
Ejemplo n.º 24
0
    protected void OnButton230Clicked(object sender, EventArgs e)
    {
        string[]  temp      = textview2.Buffer.Text.Split(new [] { '\r', '\n' });
        Gramatica gramatica = new Gramatica();

        for (int i = 0; i < temp.Length; i++)
        {
            Gramatica.Regular regular = new Gramatica.Regular();
            string[]          temp2   = temp [i].Split(new string[] { "->" }, StringSplitOptions.None);
            if (temp2 [0] != "")
            {
                string a = temp2 [0];
                regular.Atual = a[0];
                List <string> proximos = new List <string> ();
                for (int j = 1; j < temp2.Length; j++)
                {
                    if (!temp2 [j].Contains("|"))
                    {
                        if (!proximos.Contains(temp2 [j]))
                        {
                            if (temp2 [j] != "")
                            {
                                proximos.Add(temp2 [j]);
                            }
                        }
                    }
                    else
                    {
                        string[] temp3 = temp2 [j].Split('|');
                        for (int k = 0; k < temp3.Length; k++)
                        {
                            if (!proximos.Contains(temp3 [k]))
                            {
                                if (temp3 [k] != "")
                                {
                                    proximos.Add(temp3 [k]);
                                }
                            }
                        }
                    }
                }
                regular.Proximos = proximos;
                gramatica.AddProducao(regular);
            }
        }
        gramaticas.Add(gramatica);
        atualizarListaGramaticas();
    }
Ejemplo n.º 25
0
 // Leitura xml gramatica.
 private Gramatica LerXml()
 {
     try
     {
         FileStream    stream         = new FileStream(CaminhoXml, FileMode.Open);
         XmlSerializer deserealizador = new XmlSerializer(typeof(Gramatica));
         Gramatica     gramatica      = (Gramatica)deserealizador.Deserialize(stream);
         stream.Close();
         return(gramatica);
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message, "Erro!", MessageBoxButtons.OK, MessageBoxIcon.Error);
         return(null);
     }
 }
        public ParseTreeNode analyze(String text)
        {
            Gramatica     myGrammar = new Gramatica();
            LanguageData  lenguaje  = new LanguageData(myGrammar);
            Parser        p         = new Parser(lenguaje);
            ParseTree     tree      = p.Parse(text);
            ParseTreeNode root      = tree.Root;

            if (root != null)
            {
                generarImagen(root);
                listaErroresSintacticos1 = new List <Error>();
                for (int i = 0; i < tree.ParserMessages.Count(); i++)
                {
                    String texto = tree.ParserMessages[i].Message;
                    String tipo  = texto.Substring(0, 7);
                    if (tipo == "Invalid")
                    {
                        listaErroresSintacticos1.Add(new Error("Lexico", tree.ParserMessages[i].Message + "Linea, " + (Convert.ToInt32(tree.ParserMessages[i].Location.Line) + 1) + "; columna," + (Convert.ToInt32(tree.ParserMessages[i].Location.Column) + 1)));
                    }
                    else
                    {
                        listaErroresSintacticos1.Add(new Error("Sintactico", tree.ParserMessages[i].Message + "Linea, " + (Convert.ToInt32(tree.ParserMessages[i].Location.Line) + 1) + "; columna," + (Convert.ToInt32(tree.ParserMessages[i].Location.Column + 1))));
                    }
                    //Console.WriteLine(tree.ParserMessages[i].Message + "Linea, " + tree.ParserMessages[0].Location.Line + "; columna," + tree.ParserMessages[0].Location.Column);
                }
            }
            else
            {
                listaErroresSintacticos1 = new List <Error>();
                for (int i = 0; i < tree.ParserMessages.Count(); i++)
                {
                    String texto = tree.ParserMessages[i].Message;
                    String tipo  = texto.Substring(0, 7);
                    if (tipo == "Invalid")
                    {
                        listaErroresSintacticos1.Add(new Error("Lexico", tree.ParserMessages[i].Message + "Linea, " + (Convert.ToInt32(tree.ParserMessages[i].Location.Line) + 1) + "; columna," + (Convert.ToInt32(tree.ParserMessages[i].Location.Column) + 1)));
                    }
                    else
                    {
                        listaErroresSintacticos1.Add(new Error("Sintactico", tree.ParserMessages[i].Message + "Linea, " + (Convert.ToInt32(tree.ParserMessages[i].Location.Line) + 1) + "; columna," + (Convert.ToInt32(tree.ParserMessages[i].Location.Column + 1))));
                    }
                    //Console.WriteLine(tree.ParserMessages[i].Message + "Linea, " + tree.ParserMessages[0].Location.Line + "; columna," + tree.ParserMessages[0].Location.Column);
                }
            }
            return(root);
        }
Ejemplo n.º 27
0
        private void button1_Click(object sender, EventArgs e)
        {
            richTextBox2.Text = "";
            String inputLanguage = richTextBox1.Text;
            Regex  r             = new Regex("\\n");

            string[] lines = r.Split(inputLanguage);
            foreach (string l in lines)
            {
                ParseLine(l);
            }
            Gramatica     gramatica = new Gramatica();
            LanguageData  lenguaje  = new LanguageData(gramatica);
            Parser        parser    = new Parser(lenguaje);
            ParseTree     arbol     = parser.Parse(richTextBox1.Text);
            ParseTreeNode resultado = arbol.Root;

            Sintactico.generarImagen(resultado);
            Sintactico.generarOtraImagen(resultado);
            if (resultado != null)
            {
                label1.Text           = "La cadena es correcta";
                dataGridView1.Visible = false;
            }
            else
            {
                label1.Text = "La cadena es incorrecta";
                DataTable error = new DataTable();
                error.Clear();
                error.Columns.Add("No.");
                error.Columns.Add("Error");
                error.Columns.Add("Fila");
                error.Columns.Add("Columna");
                DataRow fila;
                for (int i = 0; i < arbol.ParserMessages.Count; i++)
                {
                    fila            = error.NewRow();
                    fila["No."]     = i + 1;
                    fila["Error"]   = arbol.ParserMessages[i].Message.ToString();
                    fila["Fila"]    = (arbol.ParserMessages[i].Location.Line + 1).ToString();
                    fila["Columna"] = (arbol.ParserMessages[i].Location.Column + 1).ToString();
                    error.Rows.Add(fila);
                }
                dataGridView1.DataSource = error;
                dataGridView1.Visible    = true;
            }
        }
Ejemplo n.º 28
0
        private List <string> P(string s)
        {
            List <string> primeros = new List <string>();

            if (Gramatica.EsTerminal(s))
            {
                primeros.Add(s);
                return(primeros);
            }

            char nt = s[0];

            if (Primeros.TryGetValue(nt, out List <string> primerosD))
            {
                return(primerosD);
            }

            if (Gramatica.Produccciones.Exists(p => p.Cabeza == nt && p.Cuerpo == Produccion.EPSILON))
            {
                primeros.Add(Produccion.EPSILON);
            }
            List <Produccion> producciones = Gramatica.Produccciones.Where(p => p.Cabeza == nt && p.Cuerpo != Produccion.EPSILON).ToList();

            foreach (Produccion p in producciones)
            {
                int n = p.Palabras.Length;
                foreach (string a in p.Palabras)
                {
                    List <string> primerosA = P(a);
                    primeros.AddRange(primerosA);
                    if (!primerosA.Contains(Produccion.EPSILON))
                    {
                        break;
                    }
                    n--;
                }
                if (n <= 0)
                {
                    primeros.Add(Produccion.EPSILON);
                }
            }
            primeros = primeros.Distinct().ToList();
            Primeros.TryAdd(nt, primeros);
            return(primeros);
        }
Ejemplo n.º 29
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());
            }
        }
        //POST: ModificarOrden
        public ActionResult ModificarOrden(int id, string posicion)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            Gramatica gramatica = db.Gramaticas.Find(id);

            if (gramatica == null)
            {
                return(HttpNotFound());
            }

            actualizarOrdenSubtema(id, 1, posicion);


            return(RedirectToAction("Index", "Bloques", new { id = gramatica.SubTemaId }));
        }