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); } }
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 }; }