rustlr 0.3.9

Bottom-Up Parser Generator with Advanced Options
Documentation
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