28c28
< type COMBINGTYPE = HashMap<usize,Vec<usize>>;
---
> type COMBINGTYPE = Bimap<usize,Vec<usize>>;
39a40
> closed:bool,
51a53
> closed:false,
87c89,90
< { let mut answer = true;
---
> { if self.closed {return true;}
> let mut answer = true;
212c215,216
< // extend one at a time
---
> // extend one at a time
> let rulelen = Gmr.Rules.len();
213a218
> if rulelen<Gmr.Rules.len() {println!("{}\t NEW RULES from combing size {}, {} rules",Gmr.Rules.len()-rulelen,comblen+1,Gmr.Rules.len());}
254c259,260
< */
---
> */
> self.closed=true;
486a493
> else if bc.pi==0 {self.States[psi].closed=false;}
706a714
> propagated =true; //do not do makegotos
714a723
> else if bc.pi==0 {self.States[*psi].closed=false;}
1048,1051c1057,1061
< /*
< let combget = combing.rget(&comb);
< if let Some(cnti) = combget {
< newnt = self.Symbols[*cnti].clone();
---
> let targetcomb = uncombslice(&self.Rules[ri].rhs[dbegin..dend],combing);
> let tcombget = combing.rget(&targetcomb);
> if let Some(cnti) = tcombget {
> newnt = self.Symbols[*cnti].clone();
> //println!("**REUSING BY COMB-GET {}, {} rules",&newnt.sym,self.Rules.len())
1053,1055c1063
< else
< */
< if let Some(nti) = self.Symhash.get(&newntname) {
---
> else if let Some(nti) = self.Symhash.get(&newntname) {
1057c1065
< //println!("REUSING BY-NAME NT {}",&newnt.sym); //checked
---
> //println!("REUSING BY-NAME NT {}",&newnt.sym); //checked
1081c1089
< let mut oldvec = uncombing(&self.Rules[ri].rhs[dbegin].index,combing);
---
> //let mut oldvec = uncombing(&self.Rules[ri].rhs[dbegin].index,combing);
1083,1084c1091,1092
< let mut extension = uncombing(&self.Rules[ri].rhs[dend-1].index,combing);
< oldvec.append(&mut extension);
---
> //let mut extension = uncombing(&self.Rules[ri].rhs[dend-1].index,combing);
> //oldvec.append(&mut extension);
1086c1094,1095
< combing.insert(newnt.index,oldvec);
---
> // combing.insert(newnt.index,oldvec);
> combing.insert(newnt.index,targetcomb);
1386c1395
< /*
---
>
1444c1453,1454
< */
---
>
>
1538a1549,1556
> fn uncombslice(nts:&[Gsym], combing:&COMBINGTYPE) -> Vec<usize>
> {
> let mut comb = Vec::new();
> for gs in nts {
> comb.append(&mut uncombing(&gs.index,combing));
> }
> comb
> }//uncombslice