Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
0
        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);
            }
        }