コード例 #1
0
        private void Analizar_Click(object sender, EventArgs e)
        {
            bool band = File.Exists(PATH + @"\errores.txt");

            if (band)
            {
                File.Delete(PATH + @"\errores.txt");
            }
            richTextBox2.Clear();
            error            = new AtraparErrores(ruta, richTextBox2);
            contenidoArchivo = richTextBox1.Text;
            string myString             = contenidoArchivo;
            gramticSicEstandarLexer lex =
                new gramticSicEstandarLexer(new AntlrInputStream(myString + Environment.NewLine));
            CommonTokenStream        tokens = new CommonTokenStream(lex);
            gramticSicEstandarParser parser = new gramticSicEstandarParser(tokens);

            parser.RemoveErrorListeners();
            lex.RemoveErrorListeners();
            parser.AddErrorListener(error);
            lex.AddErrorListener(error);
            parser.programa();
            /*Aqui se depliega un mensaje si hay o no errores*/
            if (!error.TieneErrores())
            {
                richTextBox2.Text = "Todo bien, todo correcto y yo que me alegro!!!";
            }
            else
            {
                StreamReader sr = new StreamReader(PATH + @"\errores.txt");
                richTextBox2.Text = sr.ReadToEnd();
                sr.Close();
            }
            TablaSimbolos();
        }
コード例 #2
0
        private void TablaSimbolos()
        {
            AntlrInputStream         input;
            gramticSicEstandarLexer  lexer;
            CommonTokenStream        tokens;
            gramticSicEstandarParser parser;
            Paso1         contador       = new Paso1();
            int           contadorLineas = 0;
            List <string> cp             = new List <string>();

            string[] lineasTexto = contenidoArchivo.Split('\n');
            foreach (string linea in lineasTexto)
            {
                input  = new AntlrInputStream(linea);
                lexer  = new gramticSicEstandarLexer(input);
                tokens = new CommonTokenStream(lexer);
                parser = new gramticSicEstandarParser(tokens);
                try
                {
                    if (contadorLineas == 0)
                    {
                        contador.Visit(parser.inicio());
                    }
                    else if (linea != "END" && !string.IsNullOrEmpty(linea))
                    {
                        if (linea == "\tRSUB")
                        {
                            contador.CP += 3;
                        }
                        contador.Visit(parser.proposicion());
                    }
                    else
                    {
                        parser.fin();
                    }
                }
                catch (Exception ex)
                {
                    //File.AppendAllText(nombrearchivo+ ".err", ex.Message + '\t' + contadorLineas.ToString() + "\n");
                    richTextBox2.Text += "";
                }

                cp.Add(contador.CP.ToString("X"));
                contadorLineas++;
            }
            Paso2 p2 = new Paso2(contador.TABSIM, Convert.ToInt32(cp[cp.Count - 1], 16) - Convert.ToInt32(cp[0], 16));

            cp.Insert(0, cp[0]);
            contadorLineas = 0;
            int longitudRegistroT = 0;

            tablaPaso2.Rows.Clear();
            List <string> codigoFuente = new List <string>(5);

            char[] delimiters = { ' ', '\t' };
            foreach (string linea in lineasTexto)
            {
                input  = new AntlrInputStream(linea);
                lexer  = new gramticSicEstandarLexer(input);
                tokens = new CommonTokenStream(lexer);
                parser = new gramticSicEstandarParser(tokens);
                //parser.RemoveErrorListeners();

                try
                {
                    if (!string.IsNullOrEmpty(linea))
                    {
                        codigoFuente.Insert(0, cp[contadorLineas]);
                        codigoFuente.InsertRange(1, linea.Split(delimiters));

                        if (contadorLineas == 0)
                        {
                            codigoFuente.Insert(4, p2.Visit(parser.inicio()));
                            archivoObjeto.Text = p2.registroH + "\n";
                        }
                        else
                        {
                            codigoFuente.Insert(4, p2.Visit(parser.proposicion()));
                        }

                        tablaPaso2.Rows.Add(codigoFuente.ToArray());
                        codigoFuente = new List <string> {
                            ""
                        };
                    }
                }
                catch (Exception ex)
                {
                    tablaPaso2.Rows.Add(codigoFuente.ToArray());
                }
                contadorLineas++;
            }
            LlenaTablaTabSim(contador.TABSIM);
            CreaArchivos(p2.longitudPrograma);
            longProg     = p2.longitudPrograma.ToString("X");
            direccionIni = p2.dirInicio;
            tamProg.Text = p2.longitudPrograma.ToString("X");
            foreach (DataGridViewRow row in tablaPaso2.Rows)
            {
                row.HeaderCell.Value = (row.Index + 1).ToString();
                foreach (int i in error.ListaErrores)
                {
                    if (row.Index == i)
                    {
                        tablaPaso2[tablaPaso2.ColumnCount - 1, i - 1].Value = "error";
                    }
                }
            }
            if (!contador.formato4)
            {
                RegistrosXe.Visible = false;
                GeneraRegistroT();
                GeneraRegistroE();
                CrearArchivoRegistro();
            }
            else
            {
                tablaPaso2.Columns[tablaPaso2.Columns.Count - 1].Visible = false;
                RegistrosXe.Visible = true;
            }
        }