Exemple #1
0
        private void btnCompilar_Click(object sender, EventArgs e)
        {
            ValoresGlobales.valores().LimpiarDatos();
            ValoresGlobales.valores().elementoRaiz = ucdfd1.ObtenerRaiz();

            AnalizadorSintactico analisSintactico  = new AnalizadorSintactico();
            AnalizadorSemantico  analisisSemantico = new AnalizadorSemantico();
            GenerarCodigo        generarCodigo     = new GenerarCodigo();

            analisSintactico.GenerarArbol();
            if (!ValoresGlobales.valores().tablaDeErrores.Existen())
            {
                analisisSemantico.AnalizarTipos();
            }
            //Se verifica si existen errores o no dentro del codigo antes de compilarlo
            if (!ValoresGlobales.valores().tablaDeErrores.Existen())
            {
                if (txtNombre.Text == "")
                {
                    txtNombre.Text = "Ejecutable";
                }
                generarCodigo.GenerarEjecutable(txtNombre.Text);
                System.Diagnostics.Process.Start(txtNombre.Text + ".exe");
            }
            else
            {
                FrmTablaDeErrores frmTablaDeErrores = new FrmTablaDeErrores();
                frmTablaDeErrores.Show();
            }
        }
Exemple #2
0
        private void IniciarAnalizadorSemantico()
        {
            AnalizadorSemantico analizadorSemantico = new AnalizadorSemantico(listaPalabras);

            analizadorSemantico.AnalizarFunciones();
            analizadorSemantico.Separarmetodosaprobar();
            int    NumeroLinea = 1;
            String Linea       = "";

            //este ciclo va encontrar la fila en donde contiene xqcThonk o Agane
            foreach (string line in txtTexto.Lines)
            {
                if (line.Contains("xqcThonk"))
                {
                    //Console.WriteLine("Se encontro xqcThonk " + NumeroLinea);
                    Linea = line;
                    analizadorSemantico.VerificarCondiciones(Linea, NumeroLinea);
                }
                else if (line.Contains("Agane"))
                {
                    //Console.WriteLine("Se encontro Agane " + NumeroLinea);
                    Linea = line;
                    analizadorSemantico.VerificarCondiciones(Linea, NumeroLinea);
                }
                NumeroLinea++;
            }

            List <Variable> variables = analizadorSemantico.GetVariables();

            foreach (Variable variable in variables)
            {
                dGV2.Rows.Add(variable.GetPalabra(), variable.GetTipoIdentificador(), variable.GetValor(), variable.GetFila(), variable.GetColumna(), variable.GetFuncion());
            }
        }
 public Form1()
 {
     InitializeComponent();
     _analizadorLexico           = new AnalizadorLexico();
     _tablaSimbolos              = new TablaSimbolos();
     _analizadorSintactico       = new AnalizadorSintactico();
     _analizadorSemantico        = new AnalizadorSemantico();
     _generadorCodigo            = new GeneradorCodigo();
     cuadroResultados.ScrollBars = ScrollBars.Both;
     cuadroResultados.WordWrap   = false;
     cuadroTexto.ScrollBars      = ScrollBars.Both;
     cuadroTexto.WordWrap        = false;
     new ToolTip().SetToolTip(btnNuevo, "Nuevo");
     new ToolTip().SetToolTip(btnCompilar, "Compilar");
     new ToolTip().SetToolTip(btnOpen, "Abrir");
     new ToolTip().SetToolTip(btnSave, "Guardar");
     new ToolTip().SetToolTip(btnLexi, "Análisis léxico");
     new ToolTip().SetToolTip(btnSemantic, "Análisis semántico");
     new ToolTip().SetToolTip(btnSitax, "Análisis sintáctico");
     new ToolTip().SetToolTip(btnMachine, "Código máquina");
     new ToolTip().SetToolTip(btnIntermedio, "Código intermedio");
     new ToolTip().SetToolTip(btnEjecutar, "Ejecutar");
     openFile.Title            = "Abrir archivos C";
     openFile.Filter           = "Archivo C|*.c";
     openFile.InitialDirectory = @"C:\";
     saveFile.Title            = "Guarcar archivo";
     saveFile.Filter           = "Archivo C|*.c";
     saveFile.InitialDirectory = @"C:\";
 }
Exemple #4
0
        static void Main(string[] args)
        {
            System.IO.StreamReader input;
            String nombreArchivo;
            Dictionary <String, String> opciones = parseArgs(args);

            //Validar que no existan opciones incorrectas
            if (opciones.ContainsKey("--help") || opciones.Count == 0)
            {
                mostrarUso();
            }
            else if (opcionInvalida(opciones))
            {
                Console.WriteLine("Error: opción incorrecta");
                mostrarUso();
            }

            try
            {
                //Validar el archivo de entrada
                if (!opciones.ContainsKey("--entrada"))
                {
                    Console.WriteLine("Error: falta archivo de entrada");
                    mostrarUso();
                }
                nombreArchivo = opciones["--entrada"];
                input         = new System.IO.StreamReader(nombreArchivo);
                TinyLexer lexer = new TinyLexer(input);

                if (opciones.ContainsKey("--mostrar-tokens"))
                {
                    Console.WriteLine("\n\n\n");
                    mostrarTokens(lexer, input);
                }

                lexer.setNombreArchivo(nombreArchivo);
                TinyParser parser = new TinyParser(lexer);
                Programa   result = (Programa)(parser.parse().value);
                if (parser.getOmerrs() > 0)
                {
                    System.Console.Error.WriteLine("La compilación ha terminado con " + parser.getOmerrs() + " errores");
                    WriteKeyPressForExit();
                    System.Environment.Exit(1);
                }

                if (opciones.ContainsKey("--mostrar-ast"))
                {
                    Console.WriteLine("\n\n\n");
                    Console.WriteLine("\n####### Inicio del Árbol Sintáctico Abstracto #######");
                    result.dump(System.Console.Out, 0);
                    Console.WriteLine("####### Fin del Árbol Sintáctico Abstracto #######\n");
                }

                AnalizadorSemantico sem = new AnalizadorSemantico(result);
                sem.analizar();

                if (SemantErrorReport.Instancia.tieneErrores())
                {
                    Console.Error.WriteLine("La compilación ha terminado con " + SemantErrorReport.Instancia.Errores + " errores");
                    WriteKeyPressForExit();
                    System.Environment.Exit(1);
                }
                else
                {
                    if (opciones.ContainsKey("--mostrar-tipos"))
                    {
                        Console.WriteLine("\n\n\n");
                        Console.WriteLine("####### Inicio del Árbol Sintáctico Abstracto Anotado #######");
                        result.dump(System.Console.Out, 0);
                        Console.WriteLine("####### Fin del Árbol Sintáctico Abstracto Anotado #######\n");
                    }

                    Console.WriteLine("\n\n\n");

                    string path = Directory.GetCurrentDirectory();
                    Console.WriteLine("El directorio donde se ha generado el ejecutable es {0}", path);
                    Sentencia   s = result.Sentencias.getLista()[1];
                    Condicional c = (Condicional)s;


                    GeneradorCodigo gen = new GeneradorCodigo(result, System.IO.Path.GetFileName(nombreArchivo), System.IO.Path.GetFileName(nombreArchivo) + ".exe");

                    if (opciones.ContainsKey("--generar-con-ast"))
                    {
                        gen.GenerarEjecutableconAst(false);
                    }
                    else if (opciones.ContainsKey("--generar-con-func"))
                    {
                        gen.GenerarEjecutableconFuncion(false);
                    }
                    else
                    {
                        gen.GenerarEjecutableconFuncion(false);
                    }

                    Console.WriteLine("La compilación ha finalizado correctamente");
                }
            }
            catch (Exception e)
            {
                Console.Error.WriteLine(e.Message);
                Console.Error.WriteLine("!!! ERROR GRAVE: EL COMPILADOR NO GENERADO DE FORMA CORRECTA EL EJECUTABLE !!!");
                throw new System.Exception("ERROR-0001: Un error inesperado no ha permitido llevar a cabo de forma correcta el proceso de compilacion");
            }
            WriteKeyPressForExit();
        }
        private void ANALIZAR_COMPILAR()
        {
            Compilador          compilador      = new Compilador();
            AnalizadorSemantico semantico       = new AnalizadorSemantico();
            List <string>       CodigoComputado = new List <string>();

            System.IO.Stream str         = Properties.Resources.chumsound;
            SoundPlayer      ChumpeSound = new SoundPlayer(str);

            ChumpeSound.Load();
            toolErrorSintaxis.Text = "";
            try
            {
                toolProgreso.Increment(20);
                toolnotificaciones.Text = "Analizando codigo... (20%)";
                List <string> Codigo = new List <string>();
                Codigo.AddRange(richTextBox1.Lines);
                semantico.SetCodigoAnalizar(Codigo);
                semantico.Computar(out CodigoComputado);
                toolProgreso.Increment(30);
                List <string> Errores = semantico.MostrarErrores();
                if (Errores.Count != 0)
                {
                    ChumpeSound.Play();
                    toolErrorSintaxis.Text          = "Error al compilar... ";
                    FormMostrarErrores.ListaErrores = Errores;
                    FormMostrarErrores FrmError = new FormMostrarErrores();
                    FrmError.Show();
                    toolnotificaciones.Text = "sin notificaciones...";
                    toolProgreso.Increment(100);
                    return;
                }
                string direccion = Archivos.Direccion;
                if (direccion == null || direccion == "")
                {
                    GetCodigoEscrito();
                    Archivos.Guardar(CodigoEscrito);
                    direccion = Archivos.Direccion;
                }

                string[] trozo_direccion = direccion.Split(new string[] { "\\", ".chumpe" }, StringSplitOptions.RemoveEmptyEntries);
                string   nombre          = trozo_direccion[trozo_direccion.Length - 1];
                if (nombre == "" || string.IsNullOrEmpty(nombre))
                {
                    nombre = "Chompipe";
                }
                toolnotificaciones.Text = "Compilando... (60%)";
                toolProgreso.Increment(60);

                var           d         = compilador.CheckCodigoAcompilar(CodigoComputado);
                var           k         = compilador.GenerarCodigoCsharp(d, "__IL_SISTEMA_INT");
                List <string> ILerr     = new List <string>();
                bool          compilado = compilador.CompilarCodigo(k, nombre + ".exe", out ILerr);

                if (compilado)
                {
                    Process          p   = new Process();
                    ProcessStartInfo psi = new ProcessStartInfo(System.IO.Directory.GetCurrentDirectory() + @"\" + nombre + ".exe");
                    p.StartInfo = psi;
                    p.Start();
                    toolErrorSintaxis.Text  = "UN CHUMPE SE HA COMPILADO... ";
                    toolnotificaciones.Text = "sin notificaciones...";
                }
                else
                {
                    if (ILerr.Count >= 1)
                    {
                        FormMostrarErrores.ListaErrores = ILerr;
                        FormMostrarErrores FrmError = new FormMostrarErrores();
                        FrmError.Show();
                    }
                    ChumpeSound.Play();
                    toolErrorSintaxis.Text = "Compilacion exitosa pero con error en IL";
                }
                toolProgreso.Increment(100);
            }
            catch (Exception ex)
            {
                ChumpeSound.Play();
                toolProgreso.Increment(0);
                MessageBox.Show(ex.Message);
            }
        }