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