24c24
< pub const MAXK:usize = 3; // this is only the default
---
> pub const MAXK:usize = 2; // this is only the default
27c27
< type PREAGENDATYPE = BTreeSet<usize>;
---
> type PREAGENDATYPE = HashSet<usize>;
29c29
< type ITEMSETTYPE = BTreeSet<LRitem>;
---
> type ITEMSETTYPE = HashSet<LRitem>;
150,151c150,153
< let comblen = comblength(&rilhs,combing);
< if *cpi==0 && comblen>maxk { // cannot be extended
---
> /*
> if *cpi==0 { // cannot be extended?
> let comblen = comblength(&rilhs,combing);
> if comblen>maxk {
154c156
< print!("FAILURE. MAXIMUM COMBING IN CONFLICT:\n [[ ");
---
> print!("FAILURE. MAXIMAL COMBING IN CONFLICT:\n [[ ");
162a165
> }
164c167
<
---
> */
178,194c181,182
< let defaultcomb = vec![nti];
< let comb = combing.get(&nti).unwrap_or(&defaultcomb);
< /*
< if comb.len()>maxk {
< answer= false;
< if !failed {
< print!("FAILURE. MAXIMUM COMBING IN CONFLICT: [[");
< for x in comb {
< print!("{} ",&Gmr.Symbols[*x].sym);
< }
< println!("]]");
< }
< return answer
< //panic!("\nFAILED!!!!!!!!\n"); ///////PANIC
< }
< */
< // else {
---
> //let defaultcomb = vec![nti];
> //let comb = combing.get(&nti).unwrap_or(&defaultcomb);
196c184,198
< if LTRACE {print!("EXTENSION OF: "); printitem2(&item,Gmr,combing);}
---
> let comblen = comblength(&nti,combing);
> if comblen>maxk {
> if !failed {
> let comb = uncombing(&rilhs,combing);
> print!("FAILURE. MAXIMUM COMBING IN CONFLICT:\n [[ ");
> for x in &comb {
> print!("{} ",&Gmr.Symbols[*x].sym);
> }
> println!("]]");
> failed = true;
> }//print
> answer = false;
> }//failure detected
>
> else if answer {
213c215
< let eri=Gmr.delay_extend(*ri,*pi,pi+2,combing,comb.clone(),rhash);
---
> let eri=Gmr.delay_extend(*ri,*pi,pi+2,combing/*,comb*/,rhash);
217c219,223
< // //self.lrkernel.insert(extenditem); ////????? utimately no
---
> //self.lrkernel.insert(extenditem); ////?????
> // if the above line is added, then two kernels should be
> // considered the same if they contain the same non-deprecated
> // items.
>
220a227
> if LTRACE {print!("got rule {}, EXTENSION OF: ",eri); printitem2(&item,Gmr,combing);}
225,226c232,233
< }
< // } // can extend
---
> } //extenditem already onclosure?
> } // can extend (does not exceed maxk (closes else if answer)
231d237
< //if self.deprecated.contains(&nc) {continue;} ///// JUST ADDED
260a267
>
263c270
< if self.lrkernel.len() != other.lrkernel.len() { return false; } //***
---
> if self.lrkernel.len() != other.lrkernel.len() { return false; } // ***
269,270d275
<
< /*
271a277,280
> /*
> // version that compares kernels for non-deprecated items
> fn eq(&self, other:&MLState) -> bool {
> for item in self.lrkernel.iter() {
275,279c284,287
<
<
< for item in other.lrkernel.iter() {
< if !self.deprecated.contains(item) &&
< !other.deprecated.contains(item) &&
---
> }
> for item in other.lrkernel.iter() {
> if !other.deprecated.contains(item) &&
> !self.deprecated.contains(item) &&
281c289,291
< }
---
> }
> true
> }
283,289d292
< /*
< if other.lrkernel.len()>self.lrkernel.len() {
< println!("\n\nHOW COULD THIS HAPPEN???!, {}, and {}\n\n",self.lrkernel.len(),other.lrkernel.len());
< // for item in other.lrkernel.iter() {
< // if !self.lrkernel.contains(item) && !other.deprecated.contains(item) && !self.deprecated.contains(item) {return false;}
< // }
< }
291,311d293
< for item in other.lrkernel.iter() {
< if !self.lrkernel.contains(item) {return false;}
< }
< for item in other.conflicts.iter() {
< if !self.conflicts.contains(item) {return false;}
< }
< if self.items.len() != other.items.len() { return false; }
< for item in self.items.iter() {
< if !other.items.contains(item) {return false;}
< }
< */
<
< /*
< fn eq(&self, other:&MLState) -> bool {
< if self.lrkernel.len() != other.lrkernel.len() { return false; }
< for item in self.lrkernel.iter() {
< if !other.lrkernel.contains(item) {return false;}
< }
< true
< }//eq
< */
500c482,486
< }
---
> if bc.pi==0 && !self.failed && checkfailure(&bc,&self.Gmr,&self.combing,self.maxk) {
> reportfailure(&self.Gmr.Rules[bc.ri].lhs.index,&self.Gmr,&self.combing);
> self.failed=true; break;
> }//failure check
> }//inserted
556a543,569
> if interior.contains(&si) {continue;} //check during push below
>
> // check kernels and items
> for istate in interior.iter() {
> let same = true;
> if self.States[*istate] == self.States[si] {
> println!("States {} and {} have the same kernel",istate,si);
> /*
> println!("Kernel of state {}:",istate);
> for item in self.States[*istate].lrkernel.iter() {
> printitem2(item,&self.Gmr,&self.combing);
> }
> println!("... and Kernel of state {}:",si);
> for item in self.States[si].lrkernel.iter() {
> printitem2(item,&self.Gmr,&self.combing);
> }
> */
> }
> }/////// printing trace
>
> /*
> println!("Kernel of state {}:",si);
> for item in self.States[si].lrkernel.iter() {
> printitem2(item,&self.Gmr,&self.combing);
> }
> */
>
559c572
< for (_,action) in self.FSM[si].iter() {
---
> for (symi,action) in self.FSM[si].iter() {
562c575,578
< if !interior.contains(nsi) {frontier.push(*nsi);}
---
> if !interior.contains(nsi) {
> frontier.push(*nsi);
> //println!("FRONTIER STATE {} ->{}-> {}",si,&self.Gmr.Symbols[*symi].sym,nsi);
> }
645c661
<
---
>
673c689
< if pi-1==0 { priority=true; }
---
> if pi-1>0 { priority=true; }
679,682c695,698
< if bc.pi==0 && checkfailure(&bc,&self.Gmr,&self.combing,self.maxk) {
< if !self.failed {reportfailure(&self.Gmr.Rules[bc.ri].lhs.index,&self.Gmr,&self.combing);}
< self.failed=true; break;
< }
---
> if bc.pi==0 && !self.failed && checkfailure(&bc,&self.Gmr,&self.combing,self.maxk) {
> reportfailure(&self.Gmr.Rules[bc.ri].lhs.index,&self.Gmr,&self.combing);
> self.failed=true; break;
> }
796a813
> //if true || LTRACE {println!("FINAL RULE COUNT: {}",self.Gmr.Rules.len());}
996c1013
< pub fn delay_extend(&mut self,ri:usize,dbegin:usize,dend:usize,combing:&mut COMBINGTYPE,comb:Vec<usize>, rulehash:&mut HashMap<Vec<usize>,usize>) -> usize
---
> pub fn delay_extend(&mut self,ri:usize,dbegin:usize,dend:usize,combing:&mut COMBINGTYPE,/*comb:Vec<usize>,*/ rulehash:&mut HashMap<Vec<usize>,usize>) -> usize
1023c1040
< //println!("REUSING BY-NAME NT {}",&newnt.sym);
---
> //println!("REUSING BY-NAME NT {}",&newnt.sym); //checked
1045,1048c1062,1068
< let defvec = vec![self.Rules[ri].rhs[dbegin].index];
< let mut oldvec = combing.get(&self.Rules[ri].rhs[dbegin].index).unwrap_or(&defvec).clone();
< //let mut oldvec = uncombing(&ri,self,combing);
< oldvec.push(self.Rules[ri].rhs[dend-1].index);
---
> //let defvec = vec![self.Rules[ri].rhs[dbegin].index];
> //let mut oldvec = combing.get(&self.Rules[ri].rhs[dbegin].index).unwrap_or(&defvec).clone();
> let mut oldvec = uncombing(&self.Rules[ri].rhs[dbegin].index,combing);
> // this assumes that dend = debegin+2
> let mut extension = uncombing(&self.Rules[ri].rhs[dend-1].index,combing);
> oldvec.append(&mut extension);
> //oldvec.push(self.Rules[ri].rhs[dend-1].index);
1054,1055d1073
< //println!("Rulesfor size for {}: {}",&NT1.sym, NTrules.len());
<
1057c1075
< // create new rule
---
> // create new rule: A-> a to [Ab] -> ab
1427,1428c1445,1447
< let defaultcomb = vec![lhs.index];
< let comb = combing.get(&Gmr.Rules[item.ri].lhs.index).unwrap_or(&defaultcomb);
---
> //let defaultcomb = vec![lhs.index];
> //let comb = combing.get(&Gmr.Rules[item.ri].lhs.index).unwrap_or(&defaultcomb);
> let comb = uncombing(&Gmr.Rules[item.ri].lhs.index,combing);
1430c1449
< for c in comb {
---
> for c in &comb {
1440,1441c1459,1461
< let defaultcomb = vec![Gmr.Rules[item.ri].rhs[i].index];
< let comb = combing.get(&Gmr.Rules[item.ri].rhs[i].index).unwrap_or(&defaultcomb);
---
> //let defaultcomb = vec![Gmr.Rules[item.ri].rhs[i].index];
> //let comb = combing.get(&Gmr.Rules[item.ri].rhs[i].index).unwrap_or(&defaultcomb);
> let comb = uncombing(&Gmr.Rules[item.ri].rhs[i].index,combing);
1444c1464
< for c in comb {
---
> for c in &comb {