/// <summary> /// Agrega la primera produccion del estado obtiene su lista de busqueda /// y verifica si en la posicion del punto existe un NT. Si Existe agrega las /// producciones de inicio de ese NT. /// </summary> /// <param name="prodAux">Copia de la primera produccion del estado</param> private void inicializaEdo(Produccion prodAux) { List<Term> listTokenBusq = new List<Term>(); if (prodAux.punto < prodAux.listProd.Count) //si el punto no ha llegado al final { if (prodAux.listProd[prodAux.punto].GetType().Name.Equals("NoTerm")) // si en la posicion del punto hay un NT { listTokenBusq = prodAux.regresaPrimeroProd(); this.agregaProduccionesInicio(((NoTerm)prodAux.listProd[prodAux.punto]),listTokenBusq); //Agrega al estado las producciones de inicio de ese NT } } }
private void inicializaEdo(Produccion prodAux, List <Term> listTokenBusq) { // List<Term> listTokenBusq = new List<Term>(); if (prodAux.punto < prodAux.listProd.Count) //si el punto no ha llegado al final { if (prodAux.listProd[prodAux.punto].GetType().Name.Equals("NoTerm")) // si en la posicion del punto hay un NT { listTokenBusq = listTokenBusq.Union(prodAux.regresaPrimeroProd()).ToList(); this.agregaProduccionesInicio(((NoTerm)prodAux.listProd[prodAux.punto]), listTokenBusq); //Agrega al estado las producciones de inicio de ese NT } } }
/// <summary> /// Agrega las producciones de inicio del NT recibido /// Calculando los tokens de busqueda de cada producción /// </summary> /// <param name="NT">No Terminal que agregara sus Producciones al estado</param> private void agregaProduccionesInicio(NoTerm NT, List <Term> listTokenBusq) { Produccion prodAux; foreach (Produccion p in NT.listProdInicio) { prodAux = new Produccion(p); if (prodAux.listProd[prodAux.punto].GetType().Name.Equals("NoTerm")) { listTokenBusq = listTokenBusq.Union(prodAux.regresaPrimeroProd()).ToList(); } prodAux.agregaTokenBusqueda(listTokenBusq); this._listProd.Add(prodAux); } }
/// <summary> /// Agrega las producciones de inicio del NT recibido /// Calculando los tokens de busqueda de cada producción /// </summary> /// <param name="NT">No Terminal que agregara sus Producciones al estado</param> private void agregaProduccionesInicio(NoTerm NT,List<Term>listTokenBusq) { Produccion prodAux; foreach (Produccion p in NT.listProdInicio) { prodAux = new Produccion(p); if (prodAux.listProd[prodAux.punto].GetType().Name.Equals("NoTerm")) { listTokenBusq = listTokenBusq.Union(prodAux.regresaPrimeroProd()).ToList(); } prodAux.agregaTokenBusqueda(listTokenBusq); this._listProd.Add(prodAux); } }