Ejemplo n.º 1
0
        private static bool ChequeoLineasFueraContexto(List <Terminal> linea, ContextoGlobal contextoGlobal, List <Terminal> cadenaEntradaFaltante)
        {
            if (linea.Count == 0)
            {
                ContextoLinea cont = EstadoSintactico.ContextoPerteneceTerminal(cadenaEntradaFaltante[0]);

                return(EstadoSintactico.EsContextoLineaCorrectoParaGlobal(cont, contextoGlobal, cadenaEntradaFaltante[0]));
            }
            else
            {
                return(false);
            }
        }
Ejemplo n.º 2
0
        private void ConstruirYArrojarExcepcion(Terminal terminal, ContextoGlobal contextoGlobal)
        {
            MensajeError mensajeError;


            ContextoLinea cont = EstadoSintactico.ContextoPerteneceTerminal(terminal);

            switch (cont)
            {
            case ContextoLinea.Asignacion:
                mensajeError = new ErrorVariableSinLugarEnAsignacion(terminal.Componente.Lexema);
                break;

            case ContextoLinea.Leer:
                mensajeError = new ErrorLeerFueraDeLugar();
                break;

            case ContextoLinea.LlamadaProc:
                mensajeError = new ErrorLlamadaProcFueraLugar();
                break;

            case ContextoLinea.Mientras:
                mensajeError = new ErrorBloqueMientrasFueraLugar();
                break;

            case ContextoLinea.Si:
                mensajeError = new ErrorBloqueSiFueraLugar();
                break;

            case ContextoLinea.Sino:
                mensajeError = new ErrorBloqueSinoFueraLugar();
                break;

            case ContextoLinea.DeclaracionFuncion:
                mensajeError = new ErrorDeclaracionFuncionFueraLugar();
                break;

            case ContextoLinea.DeclaracionProc:
                mensajeError = new ErrorDeclaracionProcFueraLugar();
                break;

            case ContextoLinea.DeclaracionConstante:
                switch (contextoGlobal)
                {
                case ContextoGlobal.GlobalDeclaracionesVariables:
                    mensajeError = new ErrorDeclaracionConstanteFueraLugarEnVariables();
                    break;

                case ContextoGlobal.DeclaracionLocal:
                    mensajeError = new ErrorDeclaracionConstanteFueraLugarEnEspacioDecLocal();
                    break;

                case ContextoGlobal.Cuerpo:
                    mensajeError = new ErrorDeclaracionConstanteFueraLugarCuerpoProc();
                    break;

                default:
                    mensajeError = new ErrorDeclaracionConstanteFueraLugar2();
                    break;
                }
                break;

            case ContextoLinea.DeclaracionVariable:
                switch (contextoGlobal)
                {
                case ContextoGlobal.GlobalDeclaracionesConstantes:
                    mensajeError = new ErrorDeclaracionVariableFueraLugarConstantes();
                    break;

                case ContextoGlobal.Cuerpo:
                    mensajeError = new ErrorDeclaracionVariableFueraLugarCuerpo();
                    break;

                default:
                    mensajeError = new ErrorDeclaracionVariableFueraLugar2();
                    break;
                }
                break;

            case ContextoLinea.FinFuncion:
                mensajeError = new ErrorFinFuncFueraLugar();
                break;

            case ContextoLinea.FinProc:
                mensajeError = new ErrorFinProcFueraLugar();
                break;

            case ContextoLinea.FinMientras:
                mensajeError = new ErrorFinMientrasFueraLugar();
                break;

            case ContextoLinea.FinSi:
                mensajeError = new ErrorFinSiFueraLugar();
                break;

            case ContextoLinea.Mostrar:
                mensajeError = new ErrorMostrarFueraLugar();
                break;

            default:
                mensajeError = new ErrorLineaComienzaIncorrecta(terminal.Componente.Lexema);
                break;
            }

            throw new AnalizadorErroresException(mensajeError)
                  {
                      Fila = terminal.Componente.Fila, Columna = terminal.Componente.Columna, Parar = true
                  };
        }