public AnalizadorErroresSintacticos(List <Terminal> lineaHastaAhora, ContextoGlobal contextoGlobal, ContextoLinea contextoLinea, List <Terminal> cadenaEntradaFaltante) { if (TerminalesHelpers.EsTerminalFinBloque(cadenaEntradaFaltante[0]) && lineaHastaAhora.Count == 0) { ChequearErrorCierreBloqueIncorrecta(cadenaEntradaFaltante[0], contextoGlobal); } tipoError = TipoFactory.CrearTipo(lineaHastaAhora, contextoGlobal, contextoLinea, cadenaEntradaFaltante); if (tipoError == null) { ConstruirYArrojarExcepcion(cadenaEntradaFaltante[0], contextoGlobal); } }
private void AgregarValidacionElementoQueSobraErroneo() { short importancia = 5; int i = 0; Terminal terminalErroneo = null; while (i < listaLineaEntera.Count && terminalErroneo == null) { switch (i) { case 0: if (listaLineaEntera[i].Componente.Token != Lexicografico.ComponenteLexico.TokenType.Const) { terminalErroneo = listaLineaEntera[i]; } break; case 1: if (listaLineaEntera[i].Componente.Token != Lexicografico.ComponenteLexico.TokenType.Identificador) { terminalErroneo = listaLineaEntera[i]; } break; case 2: if (listaLineaEntera[i].Componente.Token != Lexicografico.ComponenteLexico.TokenType.TipoDato) { terminalErroneo = listaLineaEntera[i]; } break; case 3: if (!TerminalesHelpers.EsTipoDeDato(listaLineaEntera[i])) { terminalErroneo = listaLineaEntera[i]; } break; case 4: if (listaLineaEntera[i].Componente.Token != Lexicografico.ComponenteLexico.TokenType.Igual) { terminalErroneo = listaLineaEntera[i]; } break; case 5: if (!TerminalesHelpers.EsTerminalConValorConstante(listaLineaEntera[i])) { terminalErroneo = listaLineaEntera[i]; } break; case 6: if (listaLineaEntera[i].Componente.Token != Lexicografico.ComponenteLexico.TokenType.FinSentencia) { terminalErroneo = listaLineaEntera[i]; } break; default: terminalErroneo = listaLineaEntera[i]; break; } i++; } MensajeError mensajeError = new ErrorConstanteElementoQueSobraErroneo(string.Empty); Validacion valRep; if (i < listaLineaEntera.Count) { mensajeError = new ErrorConstanteElementoQueSobraErroneo(terminalErroneo.Componente.Lexema); valRep = new Validacion(listaLineaEntera, mensajeError, importancia, ValidacionesFactory.ForzarFalso, FilaDelError, ColumnaDelError); } else { valRep = new Validacion(listaLineaEntera, mensajeError, importancia, ValidacionesFactory.ForzarVerdadero, FilaDelError, ColumnaDelError); } listaValidaciones.Add(valRep); }
internal static bool ValidarAsignacionValorConstanteRepetido(List <Terminal> lista, List <Terminal> listaHastaAhora) { int cantidad = lista.FindAll(x => TerminalesHelpers.EsTerminalConValorConstante(x)).Count; return(cantidad < 2); }
internal static bool ValidarTipoDatoRepetido(List <Terminal> lista, List <Terminal> listaHastaAhora) { int cantidad = lista.FindAll(x => TerminalesHelpers.EsTipoDeDato(x)).Count; return(cantidad < 2); }
internal static bool ElementosOperadoresNoContiguos(List <Terminal> lista, List <Terminal> listaHastaAhora) { List <Terminal> listaElementosOperadoresContiguos = lista.FindAll(x => TerminalesHelpers.EsOperador(x)); return(ChequeoContiguosIguales(lista, listaElementosOperadoresContiguos, TerminalesHelpers.EsOperador)); }
private void AgregarValidacionElementoQueSobraErroneo() { short importancia = 5; int i = 0; Terminal terminalErroneo = null; List <Terminal> aux = ArmarSubListaDerechaDe(listaLineaEntera, Lexicografico.ComponenteLexico.TokenType.TipoDato); List <Terminal> parteDefArreglo = ArmarSubListaIzquierdaDe(aux, Lexicografico.ComponenteLexico.TokenType.FinSentencia); int cantArreglos = parteDefArreglo.FindAll(x => x.Componente.Token == Lexicografico.ComponenteLexico.TokenType.Arreglo).Count; if (cantArreglos > 0) { while (i < parteDefArreglo.Count && terminalErroneo == null) { switch (i) { case 0: if (parteDefArreglo[i].Componente.Token != Lexicografico.ComponenteLexico.TokenType.Arreglo) { terminalErroneo = parteDefArreglo[i]; } break; case 1: if (parteDefArreglo[i].Componente.Token != Lexicografico.ComponenteLexico.TokenType.CorcheteApertura) { terminalErroneo = parteDefArreglo[i]; } break; case 2: if (!TerminalesHelpers.EsTerminalConValor(parteDefArreglo[i])) { terminalErroneo = parteDefArreglo[i]; } break; case 3: if (parteDefArreglo[i].Componente.Token != Lexicografico.ComponenteLexico.TokenType.CorcheteClausura) { terminalErroneo = parteDefArreglo[i]; } break; case 4: if (parteDefArreglo[i].Componente.Token != Lexicografico.ComponenteLexico.TokenType.De) { terminalErroneo = parteDefArreglo[i]; } break; case 5: if (!TerminalesHelpers.EsTipoDeDato(parteDefArreglo[i])) { terminalErroneo = parteDefArreglo[i]; } break; default: terminalErroneo = parteDefArreglo[i]; break; } i++; } MensajeError mensajeError = new ErrorDeclaracionVariableElementoQueSobraErroneo(string.Empty); Validacion valRep; if (i < listaLineaEntera.Count) { mensajeError = new ErrorDeclaracionVariableElementoQueSobraErroneo(terminalErroneo.Componente.Lexema); valRep = new Validacion(listaLineaEntera, mensajeError, importancia, ValidacionesFactory.ForzarFalso, FilaDelError, ColumnaDelError); } else { valRep = new Validacion(listaLineaEntera, mensajeError, importancia, ValidacionesFactory.ForzarVerdadero, FilaDelError, ColumnaDelError); } listaValidaciones.Add(valRep); } }