Пример #1
0
 public ErrorCompilacion(MensajeError mensajeError, GlobalesCompilador.TipoError tipo, int f, int c, bool parar)
 {
     this.TipoError        = tipo;
     this.Fila             = f;
     this.Columna          = c;
     this.PararCompilacion = parar;
     this.Mensaje          = mensajeError;
 }
Пример #2
0
        public ResultadoCompilacion Compilar(string texto)
        {
            Stopwatch            temporizador = Stopwatch.StartNew();
            ResultadoCompilacion res          = new ResultadoCompilacion();

            if (texto != string.Empty)
            {
                try
                {
                    long timeStamp = Stopwatch.GetTimestamp();
                    long timeStampPaso;

                    ReiniciarCompilador();

                    res.TiempoGeneracionAnalizadorSintactico = temporizador.Elapsed.TotalSeconds;

                    List <PasoDebugTiempos> tiempos = new List <PasoDebugTiempos>();

                    int i = 1;

                    long timeStampLex = Stopwatch.GetTimestamp();
                    CargarAnalizadorLexico(texto);
                    float tiempoCargarLexico = ((float)(Stopwatch.GetTimestamp() - timeStampLex)) / ((float)Stopwatch.Frequency);

                    bool pararComp = false;
                    GlobalesCompilador.TipoError tipoError = GlobalesCompilador.TipoError.Ninguno;

                    while (!this.analizadorSintactico.EsFinAnalisisSintactico() && !pararComp)
                    {
                        timeStampPaso = Stopwatch.GetTimestamp();
                        List <ErrorCompilacion> retorno = this.analizadorSintactico.AnalizarSintacticamenteUnPaso();
                        float tiempoAnalizSint          = ((float)(Stopwatch.GetTimestamp() - timeStampPaso)) / ((float)Stopwatch.Frequency);

                        if (retorno.Count > 0)
                        {
                            foreach (var item in retorno)
                            {
                                switch (item.TipoError)
                                {
                                case GlobalesCompilador.TipoError.Sintactico:
                                    tipoError = item.TipoError;
                                    res.ListaErrores.Add(item);
                                    pararComp = pararComp || item.PararCompilacion;
                                    break;

                                case GlobalesCompilador.TipoError.Semantico:
                                    tipoError = item.TipoError;
                                    res.ListaErrores.Add(item);
                                    pararComp = pararComp || item.PararCompilacion;
                                    break;

                                case GlobalesCompilador.TipoError.Ninguno:
                                    tipoError = item.TipoError;
                                    break;
                                }
                            }
                        }

                        if (modoDebug)
                        {
                            PasoCompilacion paso = new PasoCompilacion(this.analizadorSintactico.Pila.ToString(),
                                                                       this.analizadorSintactico.CadenaEntrada.ToString(),
                                                                       tipoError);

                            res.ListaDebugSintactico.Add(paso);
                        }

                        float numPaso = ((float)(Stopwatch.GetTimestamp() - timeStampPaso)) / ((float)Stopwatch.Frequency);

                        tiempos.Add(new PasoDebugTiempos()
                        {
                            NumPaso = i, TiempoAnalizadorSint = tiempoAnalizSint, TiempoAnalizadorTot = numPaso
                        });;
                        i++;
                    }

                    if (this.analizadorSintactico.EsFinAnalisisSintactico() && res.ListaErrores.Count == 0)
                    {
                        res.CompilacionGarGarCorrecta = true;
                    }

                    CompilarCodigoIntermedio(res);
                }
                catch (Exception ex)
                {
                    string error = null;

                    if (modoDebug)
                    {
                        error = string.Format("{0}: \r\n {1}", ex.Message, ex.StackTrace);
                    }

                    res.CompilacionGarGarCorrecta = false;
                    res.ListaErrores.Add(new ErrorCompilacion(new ErrorDesconocido(error), GlobalesCompilador.TipoError.Ninguno, 0, 0));
                }

                res.TiempoCompilacionTotal = temporizador.Elapsed.TotalSeconds;
            }
            else
            {
                //No hay nada para compilar
                res.ListaErrores.Add(new ErrorCompilacion(
                                         new ErrorNoHayProgramaParaCompilar(),
                                         GlobalesCompilador.TipoError.Sintactico,
                                         GlobalesCompilador.UltFila,
                                         GlobalesCompilador.UltCol,
                                         false)
                                     );
            }

            return(res);
        }
Пример #3
0
 public ErrorCompilacion(MensajeError mensajeError, GlobalesCompilador.TipoError tipo, int f, int c)
     : this(mensajeError, tipo, f, c, false)
 {
 }