예제 #1
0
        internal void AgregarSincronizacion(NoTerminal nt, List <Terminal> termsSig)
        {
            foreach (Terminal t in termsSig)
            {
                StringBuilder strBldr = new StringBuilder("Descarto el no terminal ").Append(nt.ToString());
                strBldr.Append(" de la pila ").Append(" pq viene el terminal ").Append(t.ToString());

                if (this.BuscarNodo(nt, t) == null)
                {
                    NodoTablaAnalisisGramatica nodo = new NodoTablaAnalisisGramatica(nt, t, strBldr.ToString());

                    this.produccionesDeLaTabla.Add(nodo);
                }
            }
        }
예제 #2
0
        public Produccion BuscarEnTablaProduccion(NoTerminal x, Terminal y, bool reportarErrores, bool generaProdVacia)
        {
            NodoTablaAnalisisGramatica nodo = this.EncontrarNodo(x, y);

            if (nodo != null)
            {
                if (!nodo.EsSinc)
                {
                    return(nodo.Produccion);
                }
                else
                {
                    if (reportarErrores)
                    {
                        this.ErrorSintacticoSinMostrar(y.Componente.Fila, y.Componente.Columna, y, nodo.DescripcionError, false, true);
                    }
                    return(null);
                }
            }
            else
            {
                if (reportarErrores)
                {
                    if (!generaProdVacia)
                    {
                        this.ErrorSintactico(y.Componente.Fila, y.Componente.Columna, y, true, false);
                    }
                    else
                    {
                        Produccion prod = new Produccion();
                        prod.Izq = x;

                        Terminal term = new Terminal();
                        term.Componente       = new ComponenteLexico();
                        term.Componente.Token = ComponenteLexico.TokenType.Ninguno;
                        prod.Der.Add(term);

                        return(prod);
                    }
                }
                return(null);
            }
        }
예제 #3
0
        public override bool Equals(object obj)
        {
            if (obj == null || GetType() != obj.GetType())
            {
                return(false);
            }

            // safe because of the GetType check
            NodoTablaAnalisisGramatica nodo = (NodoTablaAnalisisGramatica)obj;

            // use this pattern to compare reference members
            if (NoTerminal.Equals(nodo.NoTerminal.ToString()) && Terminal.Equals(nodo.Terminal.ToString()))
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }