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(); } }
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:\"; }
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); } }