Example #1
0
        public AnalizadorSintactico(string path)
        {
            gramatica = new Gramatica.Gramatica(path);

            tabla = gramatica.ArmarTablaAnalisis();

            cantElementosCadenaEntrada = Convert.ToInt32(CompiladorGargar.Properties.Resources.CantElementosCadenaEntrada);
            finArch = false;

            cantErroresSintacticos = 0;
            cantParentesisAbiertos = 0;


            AnalizadorLexico = new AnalizadorLexicografico();
        }
Example #2
0
        public TablaAnalisisGramatica ArmarTablaAnalisis()
        {
            try
            {
                TablaAnalisisGramatica tabla = new TablaAnalisisGramatica();



                List <Terminal> termsPrim = new List <Terminal>();
                List <Terminal> termsSig  = new List <Terminal>();

                foreach (NoTerminal nt in noTerminales)
                {
                    foreach (Produccion prod in this.ObtenerListaProduccionesParaUnNoTerminal(nt))
                    {
                        termsPrim = new List <Terminal>();
                        termsSig  = new List <Terminal>();

                        //if (nt.Nombre == "CONSTANTES")
                        //{
                        //    Debugger.Break();
                        //}

                        //termsPrim.AddRange(this.Primeros(nt,prod));
                        RetornoPrimeros rt = this.tablaPrimeros.Primeros(nt, prod, false);
                        termsPrim.AddRange(rt.Terminales);
                        tabla.AgregarPrimeros(nt, termsPrim, prod);

                        bool existeLamba = termsPrim.Exists(

                            delegate(Terminal _t)
                        {
                            if (_t.Componente.Token == ComponenteLexico.TokenType.Ninguno)
                            {
                                return(true);
                            }
                            else
                            {
                                return(false);
                            }
                        }
                            );

                        if (existeLamba)
                        {
                            termsSig.AddRange(this.Siguientes(nt));
                            tabla.AgregarSiguientes(nt, termsSig);
                        }
                    }

                    //if (nt.Nombre == "CON")
                    //{
                    //    if (Debugger.IsAttached)
                    //    {
                    //        Debugger.Break();
                    //    }
                    //}

                    termsSig = new List <Terminal>();
                    termsSig.AddRange(this.Siguientes(nt));
                    tabla.AgregarSincronizacion(nt, termsSig);
                }
                return(tabla);
            }
            catch (Exception ex)
            {
                Utils.Log.AddError(ex.Message);
                throw new Exception("Error al crear la tabla de analisis");
            }
        }