From 19ee43e18628945921d775af381fa2f4b14ac23e Mon Sep 17 00:00:00 2001 From: Mark Thom Date: Sun, 9 Apr 2017 19:12:36 -0600 Subject: [PATCH] optimized up to chapter 6 --- Cargo.lock | 2 +- Cargo.toml | 5 +- README.md | 10 +- src/main.rs | 81 +++ src/prolog/and_stack.rs | 2 + src/prolog/ast.rs | 47 +- src/prolog/codegen.rs | 112 ++- src/prolog/io.rs | 15 + src/prolog/machine.rs | 170 ++++- src/prolog/or_stack.rs | 8 +- src/prolog/prolog_parser.lalrpop | 14 +- src/prolog/prolog_parser.rs | 1120 ++++++++++++++++-------------- 12 files changed, 996 insertions(+), 590 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 71e9dd19..0a0e3a0b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,6 +1,6 @@ [root] name = "rusty-wam" -version = "0.5.11" +version = "0.5.12" dependencies = [ "lalrpop 0.12.5 (registry+https://github.com/rust-lang/crates.io-index)", "lalrpop-util 0.12.5 (registry+https://github.com/rust-lang/crates.io-index)", diff --git a/Cargo.toml b/Cargo.toml index ac297e78..ad5d42ae 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rusty-wam" -version = "0.5.11" +version = "0.5.12" authors = ["Mark Thom"] build = "build.rs" @@ -12,5 +12,4 @@ version = "1.2.0" version = "0.12.5" [build-dependencies.lalrpop] -version = "0.12.5" - +version = "0.12.5" \ No newline at end of file diff --git a/README.md b/README.md index 7ad4cf3c..834bfb01 100644 --- a/README.md +++ b/README.md @@ -8,11 +8,11 @@ pure Prolog. ## Progress -Pure Prolog is implemented as a simple REPL. "Pure Prolog" is Prolog -without cut, meta- or extra-logical operators, or side effects of any -kind. In terms of the tutorial pacing, the work has progressed to the -end of section 5.10, skipping past 5.4. Atoms and lists are the only -two data types currently supported. +Prolog is implemented as a simple REPL. It is without without meta- or +extra-logical operators, or side effects of any kind, with the lone +exception of cut. In terms of the tutorial pacing, the work has +progressed to the end of section 5.11, skipping past 5.4. Atoms and +lists are the only two data types currently supported. While proper environment trimming code is emitted by the code generator, it has no effect on the bytecode WAM, which lacks diff --git a/src/main.rs b/src/main.rs index 949abd37..1be7e779 100644 --- a/src/main.rs +++ b/src/main.rs @@ -194,6 +194,87 @@ mod tests { assert_eq!(submit(&mut wam, "?- p(X).").failed_query(), false); } + #[test] + fn test_queries_on_cuts() { + let mut wam = Machine::new(); + + // test shallow cuts. + submit(&mut wam, "memberchk(X, [X|_]) :- !. + memberchk(X, [_|Xs]) :- !, memberchk(X, Xs)."); + + assert_eq!(submit(&mut wam, "?- memberchk(X, [a,b,c]).").failed_query(), false); + assert_eq!(submit(&mut wam, "?- memberchk([X,X], [a,b,c,[d,e],[d,d]]).").failed_query(), false); + assert_eq!(submit(&mut wam, "?- memberchk([X,X], [a,b,c,[D,d],[e,e]]).").failed_query(), false); + assert_eq!(submit(&mut wam, "?- memberchk([X,X], [a,b,c,[e,d],[f,e]]).").failed_query(), true); + assert_eq!(submit(&mut wam, "?- memberchk([X,X,Y], [a,b,c,[e,d],[f,e]]).").failed_query(), true); + assert_eq!(submit(&mut wam, "?- memberchk([X,X,Y], [a,b,c,[e,e,d],[f,e]]).").failed_query(), false); + + // test deep cuts. + submit(&mut wam, "commit :- a, !."); + + assert_eq!(submit(&mut wam, "?- commit.").failed_query(), true); + + submit(&mut wam, "a."); + + assert_eq!(submit(&mut wam, "?- commit.").failed_query(), false); + + submit(&mut wam, "commit(X) :- a(X), !."); + + assert_eq!(submit(&mut wam, "?- commit(X).").failed_query(), true); + + submit(&mut wam, "a(x)."); + + assert_eq!(submit(&mut wam, "?- commit(X).").failed_query(), false); + + submit(&mut wam, "a :- b, !, c. a :- d."); + + assert_eq!(submit(&mut wam, "?- a.").failed_query(), true); + + submit(&mut wam, "b."); + + assert_eq!(submit(&mut wam, "?- a.").failed_query(), true); + + submit(&mut wam, "d."); + + // we've committed to the first clause since the query on b + // succeeds, so we expect failure here. + assert_eq!(submit(&mut wam, "?- a.").failed_query(), true); + + submit(&mut wam, "c."); + + assert_eq!(submit(&mut wam, "?- a.").failed_query(), false); + + submit(&mut wam, "a(X) :- b, !, c(X). a(X) :- d(X)."); + + assert_eq!(submit(&mut wam, "?- a(X).").failed_query(), true); + + submit(&mut wam, "c(c)."); + submit(&mut wam, "d(d)."); + + assert_eq!(submit(&mut wam, "?- a(X).").failed_query(), false); + + submit(&mut wam, "b."); + + assert_eq!(submit(&mut wam, "?- a(X).").failed_query(), false); + + wam.clear(); + + assert_eq!(submit(&mut wam, "?- c(X).").failed_query(), true); + + submit(&mut wam, "a(X) :- b, c(X), !. a(X) :- d(X)."); + submit(&mut wam, "b."); + + assert_eq!(submit(&mut wam, "?- a(X).").failed_query(), true); + + submit(&mut wam, "d(d)."); + + assert_eq!(submit(&mut wam, "?- a(X).").failed_query(), false); + + submit(&mut wam, "c(c)."); + + assert_eq!(submit(&mut wam, "?- a(X).").failed_query(), false); + } + #[test] fn test_queries_on_lists() { let mut wam = Machine::new(); diff --git a/src/prolog/and_stack.rs b/src/prolog/and_stack.rs index 229b221b..ff17f2b0 100644 --- a/src/prolog/and_stack.rs +++ b/src/prolog/and_stack.rs @@ -5,6 +5,7 @@ use std::vec::Vec; pub struct Frame { pub global_index: usize, + pub b0: usize, pub e: usize, pub cp: CodePtr, perms: Vec @@ -14,6 +15,7 @@ impl Frame { fn new(global_index: usize, e: usize, cp: CodePtr, n: usize) -> Self { Frame { global_index: global_index, + b0: 0, e: e, cp: cp, perms: vec![Addr::HeapCell(0); n] diff --git a/src/prolog/ast.rs b/src/prolog/ast.rs index 88290795..c7ec6207 100644 --- a/src/prolog/ast.rs +++ b/src/prolog/ast.rs @@ -119,13 +119,27 @@ pub enum Term { Var(Cell, Var) } +pub enum TermOrCut { + Cut, + Term(Term) +} + +impl TermOrCut { + pub fn arity(&self) -> usize { + match self { + &TermOrCut::Term(ref term) => term.arity(), + _ => 0 + } + } +} + pub struct Rule { - pub head: (Term, Term), - pub clauses: Vec + pub head: (Term, TermOrCut), + pub clauses: Vec } -impl Rule { - pub fn last_clause(&self) -> &Term { +impl Rule { + pub fn last_clause(&self) -> &TermOrCut { match self.clauses.last() { None => &self.head.1, Some(clause) => clause @@ -141,12 +155,22 @@ pub enum TermRef<'a> { Var(Level, &'a Cell, &'a Var) } -pub enum ChoiceInstruction { - RetryMeElse(usize), - TrustMe, +pub enum ChoiceInstruction { + RetryMeElse(usize), + TrustMe, TryMeElse(usize) } +pub enum Terminal { + Terminal, Non +} + +pub enum CutInstruction { + Cut(Terminal), + GetLevel, + NeckCut(Terminal) +} + pub enum IndexedChoiceInstruction { Retry(usize), Trust(usize), @@ -223,6 +247,7 @@ pub type CompiledQuery = Vec; pub enum Line { Choice(ChoiceInstruction), Control(ControlInstruction), + Cut(CutInstruction), Fact(CompiledFact), Indexing(IndexingInstruction), IndexedChoice(IndexedChoiceInstruction), @@ -373,18 +398,18 @@ impl Term { match self { &Term::Clause(_, _, ref terms) => terms.first().map(|bt| bt.as_ref()), - _ => None + _ => None } } - + pub fn is_clause(&self) -> bool { if let &Term::Clause(_, _, _) = self { true } else { false } - } - + } + pub fn subterms(&self) -> usize { match self { &Term::Clause(_, _, ref terms) => terms.len(), diff --git a/src/prolog/codegen.rs b/src/prolog/codegen.rs index b6d868f9..d2ed6a7a 100644 --- a/src/prolog/codegen.rs +++ b/src/prolog/codegen.rs @@ -441,9 +441,9 @@ impl CodeOffsets { IntIndex::External(o) => o + prelude_len + 1, IntIndex::Fail => 0, IntIndex::Internal(_) => prelude_len - lst_offset + 1 - } + } } - + fn add_indices(self, code: &mut Code, mut code_body: Code) { if self.no_indices() { @@ -470,11 +470,11 @@ impl CodeOffsets { _ => {} } } - + let str_loc = Self::switch_on_str_offset_from(str_loc, prelude.len(), con_loc); let con_loc = Self::switch_on_con_offset_from(con_loc, prelude.len()); let lst_loc = Self::switch_on_lst_offset_from(lst_loc, prelude.len(), lst_offset); - + let switch_instr = IndexingInstruction::SwitchOnTerm(prelude.len() + 1, con_loc, lst_loc, @@ -752,21 +752,40 @@ impl<'a> CodeGenerator<'a> { } } - fn mark_perm_vars(rule: &'a Rule) -> VariableFixtures { + fn mark_perm_vars(rule: &'a Rule) -> (VariableFixtures, bool) + { let &Rule { head: (ref p0, ref p1), ref clauses } = rule; - let mut vs = HashMap::new(); - - let iter = p0.breadth_first_iter().chain(p1.breadth_first_iter()); - - Self::mark_vars_in_term(iter, &mut vs, 0); + let mut vs = HashMap::new(); + + match p1 { + &TermOrCut::Cut => { + let iter = p0.breadth_first_iter(); + Self::mark_vars_in_term(iter, &mut vs, 0); + }, + &TermOrCut::Term(ref p1) => { + let iter = p0.breadth_first_iter().chain(p1.breadth_first_iter()); + Self::mark_vars_in_term(iter, &mut vs, 0); + } + } for (i, term) in clauses.iter().enumerate() { - Self::mark_vars_in_term(term.breadth_first_iter(), &mut vs, i + 1); + if let &TermOrCut::Term(ref term) = term { + Self::mark_vars_in_term(term.breadth_first_iter(), &mut vs, i + 1) + } } + let mut deep_cuts = false; + + for term in clauses { + if let &TermOrCut::Cut = term { + deep_cuts = true; + break; + } + } + Self::set_perm_vals(&vs); - vs + (vs, deep_cuts) } fn add_conditional_call(compiled_query: &mut Code, term: &Term, pvs: usize) @@ -787,8 +806,8 @@ impl<'a> CodeGenerator<'a> { fn vars_above_threshold(vs: &VariableFixtures, index: usize) -> usize { let mut var_count = 0; - for &(term_status, _) in vs.values() { - if let VarStatus::Permanent(i) = term_status { + for &(var_status, _) in vs.values() { + if let VarStatus::Permanent(i) = var_status { if i > index { var_count += 1; } @@ -803,8 +822,8 @@ impl<'a> CodeGenerator<'a> { let mut dealloc_index = body.len() - 1; match rule.last_clause() { - &Term::Clause(_, ref name, _) - | &Term::Constant(_, Constant::Atom(ref name)) => { + &TermOrCut::Term(Term::Clause(_, ref name, _)) + | &TermOrCut::Term(Term::Constant(_, Constant::Atom(ref name))) => { if let &mut Line::Control(ref mut ctrl) = body.last_mut().unwrap() { *ctrl = ControlInstruction::Execute(name.clone(), last_arity); } @@ -863,8 +882,9 @@ impl<'a> CodeGenerator<'a> { } } - pub fn compile_rule(&mut self, rule: &'a Rule) -> Code { - let vs = Self::mark_perm_vars(&rule); + pub fn compile_rule(&mut self, rule: &'a Rule) -> Code + { + let (vs, deep_cuts) = Self::mark_perm_vars(&rule); let &Rule { head: (ref p0, ref p1), ref clauses } = rule; let perm_vars = Self::vars_above_threshold(&vs, 0); @@ -872,23 +892,63 @@ impl<'a> CodeGenerator<'a> { if clauses.len() > 0 { body.push(Line::Control(ControlInstruction::Allocate(perm_vars))); + + if deep_cuts { + body.push(Line::Cut(CutInstruction::GetLevel)); + } } - let iter = p0.breadth_first_iter().chain(p1.breadth_first_iter()); - self.update_var_count(iter); + match p1 { + &TermOrCut::Cut => { + let iter = p0.breadth_first_iter(); + self.update_var_count(iter); + }, + &TermOrCut::Term(ref p1) => { + let iter = p0.breadth_first_iter().chain(p1.breadth_first_iter()); + self.update_var_count(iter); + } + }; + self.marker.advance(p0); - body.push(Line::Fact(self.compile_target(p0, false))); - self.marker.advance_at_head(p1); - body.push(Line::Query(self.compile_target(p1, false))); + if p0.is_clause() { + body.push(Line::Fact(self.compile_target(p0, false))); + } + + match p1 { + &TermOrCut::Cut => { + let term = if clauses.is_empty() { + Terminal::Terminal + } else { + Terminal::Non + }; + + body.push(Line::Cut(CutInstruction::NeckCut(term))); + }, + &TermOrCut::Term(ref p1) => { + self.marker.advance_at_head(p1); - Self::add_conditional_call(&mut body, p1, perm_vars); + if p1.is_clause() { + body.push(Line::Query(self.compile_target(p1, false))); + } + + Self::add_conditional_call(&mut body, p1, perm_vars); + } + }; body = clauses.iter().enumerate() .map(|(i, term)| { - let num_vars = Self::vars_above_threshold(&vs, i+1); - self.compile_internal_query(term, num_vars) + match term { + &TermOrCut::Cut if i + 1 < clauses.len() => + vec![Line::Cut(CutInstruction::Cut(Terminal::Non))], + &TermOrCut::Cut => + vec![Line::Cut(CutInstruction::Cut(Terminal::Terminal))], + &TermOrCut::Term(ref term) => { + let num_vars = Self::vars_above_threshold(&vs, i + 1); + self.compile_internal_query(term, num_vars) + } + } }) .fold(body, |mut body, ref mut cqs| { body.append(cqs); diff --git a/src/prolog/io.rs b/src/prolog/io.rs index 890091c4..5644e799 100644 --- a/src/prolog/io.rs +++ b/src/prolog/io.rs @@ -145,6 +145,19 @@ impl fmt::Display for IndexingInstruction { } } +impl fmt::Display for CutInstruction { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + match self { + &CutInstruction::Cut(_) => + write!(f, "cut"), + &CutInstruction::NeckCut(_) => + write!(f, "neck_cut"), + &CutInstruction::GetLevel => + write!(f, "get_level") + } + } +} + impl fmt::Display for Level { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { match self { @@ -198,6 +211,8 @@ pub fn print_code(code: &Code) { for fact_instr in fact { println!("{}", fact_instr); }, + &Line::Cut(ref cut) => + println!("{}", cut), &Line::Choice(ref choice) => println!("{}", choice), &Line::Control(ref control) => diff --git a/src/prolog/machine.rs b/src/prolog/machine.rs index 0563401d..1bbb2738 100644 --- a/src/prolog/machine.rs +++ b/src/prolog/machine.rs @@ -19,6 +19,7 @@ struct MachineState { s: usize, p: CodePtr, b: usize, + b0: usize, e: usize, num_of_args: usize, cp: CodePtr, @@ -82,7 +83,7 @@ impl Machine { pub fn add_fact(&mut self, fact: &Term, mut code: Code) { if let Some(name) = fact.name() { - let p = self.code.len(); + let p = self.code.len(); let arity = fact.arity(); self.code.append(&mut code); @@ -121,6 +122,8 @@ impl Machine { match instr { &Line::Choice(ref choice_instr) => self.ms.execute_choice_instr(choice_instr), + &Line::Cut(ref cut_instr) => + self.ms.execute_cut_instr(cut_instr), &Line::Control(ref control_instr) => self.ms.execute_ctrl_instr(&self.code_dir, control_instr), &Line::Fact(ref fact) => { @@ -132,7 +135,7 @@ impl Machine { self.ms.execute_fact_instr(&fact_instr); } self.ms.p += 1; - }, + }, &Line::Indexing(ref indexing_instr) => self.ms.execute_indexing_instr(&indexing_instr), &Line::IndexedChoice(ref choice_instr) => @@ -146,21 +149,29 @@ impl Machine { self.ms.execute_query_instr(&query_instr); } self.ms.p += 1; - } + } } if self.failed() { - let p = self.ms - .or_stack - .top() - .map(|fr| fr.bp) - .unwrap_or_default(); + let b0 = self.ms + .or_stack + .top() + .map(|fr| fr.b0) + .unwrap_or(0); + + let p = if self.ms.b > 0 { + let b = self.ms.b - 1; + self.ms.or_stack[b].bp + } else { + CodePtr::TopLevel + }; if let CodePtr::TopLevel = p { return false; } else { self.ms.fail = false; self.ms.p = p; + self.ms.b0 = b0; } } @@ -267,7 +278,11 @@ impl Machine { pub fn continue_query(&mut self) -> EvalResult { if !self.or_stack_is_empty() { - let b = self.ms.b; + if self.ms.b == 0 { + return EvalResult::QueryFailure; + } + + let b = self.ms.b - 1; self.ms.p = self.ms.or_stack[b].bp; let succeeded = if let CodePtr::DirEntry(p) = self.ms.p { @@ -286,6 +301,13 @@ impl Machine { } } + #[allow(dead_code)] + pub fn clear(&mut self) { + self.reset(); + self.code.clear(); + self.code_dir.clear(); + } + pub fn reset(&mut self) { self.ms.reset(); } @@ -297,6 +319,7 @@ impl MachineState { s: 0, p: CodePtr::TopLevel, b: 0, + b0: 0, e: 0, num_of_args: 0, cp: CodePtr::TopLevel, @@ -419,7 +442,12 @@ impl MachineState { Ref::StackCell(fr, _) => { let fr_gi = self.and_stack[fr].global_index; let b_gi = if !self.or_stack.is_empty() { - self.or_stack[self.b].global_index + if self.b > 0 { + let b = self.b - 1; + self.or_stack[b].global_index + } else { + 0 + } } else { 0 }; @@ -443,6 +471,48 @@ impl MachineState { } } + fn tidy_trail(&mut self) { + if self.b == 0 { + return; + } + + let b = self.b - 1; + let mut i = self.or_stack[b].tr; + + while i < self.tr { + let tr_i = self.trail[i]; + let hb = self.hb; + + match tr_i { + Ref::HeapCell(tr_i) => + if tr_i < hb { //|| ((h < tr_i) && tr_i < b) { + i += 1; + } else { + let tr = self.tr; + let val = self.trail[tr - 1]; + self.trail[i] = val; + }, + Ref::StackCell(fr, _) => { + let b = self.b - 1; + let fr_gi = self.and_stack[fr].global_index; + let b_gi = if !self.or_stack.is_empty() { + self.or_stack[b].global_index + } else { + 0 + }; + + if fr_gi < b_gi { + i += 1; + } else { + let tr = self.tr; + let val = self.trail[tr - 1]; + self.trail[i] = val; + } + } + }; + } + } + fn execute_fact_instr(&mut self, instr: &FactInstruction) { match instr { &FactInstruction::GetConstant(_, ref constant, reg) => { @@ -703,12 +773,12 @@ impl MachineState { match offset { 0 => self.fail = true, - o => self.p += o - }; + o => self.p += o + }; } }; } - + fn execute_query_instr(&mut self, instr: &QueryInstruction) { match instr { &QueryInstruction::PutConstant(_, ref constant, reg) => @@ -821,6 +891,7 @@ impl MachineState { Some(compiled_tl_index) => { self.cp = self.p + 1; self.num_of_args = arity; + self.b0 = self.b; self.p = CodePtr::DirEntry(compiled_tl_index); }, None => self.fail = true @@ -841,7 +912,8 @@ impl MachineState { match compiled_tl_index { Some(compiled_tl_index) => { self.num_of_args = arity; - self.p = CodePtr::DirEntry(compiled_tl_index); + self.b0 = self.b; + self.p = CodePtr::DirEntry(compiled_tl_index); }, None => self.fail = true }; @@ -865,10 +937,11 @@ impl MachineState { self.p + 1, self.tr, self.h, + self.b0, self.num_of_args); - self.b = self.or_stack.len() - 1; - let b = self.b; + self.b = self.or_stack.len(); + let b = self.b - 1; for i in 1 .. n + 1 { self.or_stack[b][i] = self.registers[i].clone(); @@ -878,7 +951,7 @@ impl MachineState { self.p += l; }, &IndexedChoiceInstruction::Retry(l) => { - let b = self.b; + let b = self.b - 1; let n = self.or_stack[b].num_args(); for i in 1 .. n + 1 { @@ -905,7 +978,7 @@ impl MachineState { self.p += l; }, &IndexedChoiceInstruction::Trust(l) => { - let b = self.b; + let b = self.b - 1; let n = self.or_stack[b].num_args(); for i in 1 .. n + 1 { @@ -935,10 +1008,10 @@ impl MachineState { } }; } - + fn execute_choice_instr(&mut self, instr: &ChoiceInstruction) { - match instr { + match instr { &ChoiceInstruction::TryMeElse(offset) => { let n = self.num_of_args; let num_frames = self.num_frames(); @@ -950,10 +1023,11 @@ impl MachineState { self.p + offset, self.tr, self.h, + self.b0, self.num_of_args); - self.b = self.or_stack.len() - 1; - let b = self.b; + self.b = self.or_stack.len(); + let b = self.b - 1; for i in 1 .. n + 1 { self.or_stack[b][i] = self.registers[i].clone(); @@ -961,9 +1035,9 @@ impl MachineState { self.hb = self.h; self.p += 1; - }, + }, &ChoiceInstruction::RetryMeElse(offset) => { - let b = self.b; + let b = self.b - 1; let n = self.or_stack[b].num_args(); for i in 1 .. n + 1 { @@ -990,7 +1064,7 @@ impl MachineState { self.p += 1; }, &ChoiceInstruction::TrustMe => { - let b = self.b; + let b = self.b - 1; let n = self.or_stack[b].num_args(); for i in 1 .. n + 1 { @@ -1021,11 +1095,55 @@ impl MachineState { } } + fn execute_cut_instr(&mut self, instr: &CutInstruction) { + match instr { + &CutInstruction::Cut(ref term) => { + let b = self.b; + let e = self.e; + let b0 = self.and_stack[e].b0; // STACK[E+2+1] + + if b > b0 { + self.b = b0; + self.tidy_trail(); + } + + if let &Terminal::Terminal = term { + self.p = CodePtr::TopLevel; + } else { + self.p += 1; + } + }, + &CutInstruction::GetLevel => { + let b0 = self.b0; + let e = self.e; + + self.and_stack[e].b0 = b0; + self.p += 1; + }, + &CutInstruction::NeckCut(ref term) => { + let b = self.b; + let b0 = self.b0; + + if b > b0 { + self.b = b0; + self.tidy_trail(); + } + + if let &Terminal::Terminal = term { + self.p = CodePtr::TopLevel; + } else { + self.p += 1; + } + } + } + } + fn reset(&mut self) { self.h = 0; self.hb = 0; self.e = 0; self.b = 0; + self.b0 = 0; self.s = 0; self.tr = 0; self.p = CodePtr::TopLevel; @@ -1039,5 +1157,5 @@ impl MachineState { self.and_stack.clear(); self.or_stack.clear(); self.registers = vec![Addr::HeapCell(0); 64]; - } + } } diff --git a/src/prolog/or_stack.rs b/src/prolog/or_stack.rs index 0ebadb2f..2f927b18 100644 --- a/src/prolog/or_stack.rs +++ b/src/prolog/or_stack.rs @@ -7,10 +7,11 @@ pub struct Frame { pub global_index: usize, pub e: usize, pub cp: CodePtr, - pub b: usize, + pub b: usize, pub bp: CodePtr, pub tr: usize, pub h: usize, + pub b0: usize, args: Vec } @@ -22,6 +23,7 @@ impl Frame { bp: CodePtr, tr: usize, h: usize, + b0: usize, n: usize) -> Self { @@ -33,6 +35,7 @@ impl Frame { bp: bp, tr: tr, h: h, + b0: b0, args: vec![Addr::HeapCell(0); n] } } @@ -57,9 +60,10 @@ impl OrStack { bp: CodePtr, tr: usize, h: usize, + b0: usize, n: usize) { - self.0.push(Frame::new(global_index, e, cp, b, bp, tr, h, n)); + self.0.push(Frame::new(global_index, e, cp, b, bp, tr, h, b0, n)); } pub fn len(&self) -> usize { diff --git a/src/prolog/prolog_parser.lalrpop b/src/prolog/prolog_parser.lalrpop index 163b28f3..fc0d6ffb 100644 --- a/src/prolog/prolog_parser.lalrpop +++ b/src/prolog/prolog_parser.lalrpop @@ -57,19 +57,25 @@ PredicateClause : PredicateClause = { }; Rule : Rule = { - ":-" )*> => + ":-" )*> => Rule { head: (c, h), clauses: cs }, - ":-" )*> => - Rule { head: (Term::Constant(Cell::default(), Constant::Atom(a)), h), + ":-" )*> => + Rule { head: (Term::Constant(Cell::default(), Constant::Atom(a)), + h), clauses: cs } }; +TermOrCut : TermOrCut = { + "!" => TermOrCut::Cut, + => TermOrCut::Term(<>) +}; + Term : Term = { => Term::Constant(Cell::default(), Constant::Atom(<>)), => <>, => <>, => Term::Var(Cell::default(), <>), - "_" => Term::AnonVar + "_" => Term::AnonVar }; Var : Var = { diff --git a/src/prolog/prolog_parser.rs b/src/prolog/prolog_parser.rs index 1703c177..39cc865c 100644 --- a/src/prolog/prolog_parser.rs +++ b/src/prolog/prolog_parser.rs @@ -10,6 +10,7 @@ mod __parse__TopLevel { extern crate lalrpop_util as __lalrpop_util; #[allow(dead_code)] pub enum __Symbol<'input> { + Term_22_21_22(&'input str), Term_22_28_22(&'input str), Term_22_29_22(&'input str), Term_22_2c_22(&'input str), @@ -24,9 +25,9 @@ mod __parse__TopLevel { Termr_23_22_5bA_2dZ_5d_5bA_2dZa_2dz0_2d9___5d_2a_22_23(&'input str), Termr_23_22_5ba_2dz_5d_5bA_2dZa_2dz0_2d9___5d_2a_22_23(&'input str), Termerror(__lalrpop_util::ErrorRecovery), - Nt_28_22_2c_22_20_3cTerm_3e_29(Term), - Nt_28_22_2c_22_20_3cTerm_3e_29_2a(::std::vec::Vec), - Nt_28_22_2c_22_20_3cTerm_3e_29_2b(::std::vec::Vec), + Nt_28_22_2c_22_20_3cTermOrCut_3e_29(TermOrCut), + Nt_28_22_2c_22_20_3cTermOrCut_3e_29_2a(::std::vec::Vec), + Nt_28_22_2c_22_20_3cTermOrCut_3e_29_2b(::std::vec::Vec), Nt_28_3cBoxedTerm_3e_20_22_2c_22_29(Box), Nt_28_3cBoxedTerm_3e_20_22_2c_22_29_2a(::std::vec::Vec>), Nt_28_3cBoxedTerm_3e_20_22_2c_22_29_2b(::std::vec::Vec>), @@ -41,273 +42,278 @@ mod __parse__TopLevel { NtPredicateClause(PredicateClause), NtRule(Rule), NtTerm(Term), + NtTermOrCut(TermOrCut), NtTopLevel(TopLevel), NtVar(Var), Nt____TopLevel(TopLevel), } const __ACTION: &'static [i32] = &[ // State 0 - 0, 0, 0, 0, 0, 12, 13, 14, 0, 15, 0, 16, 17, 0, + 0, 0, 0, 0, 0, 0, 12, 13, 14, 0, 15, 0, 16, 17, 0, // State 1 - 0, 0, 0, 0, 0, 0, 13, 14, 0, 15, 0, 16, 17, 0, + 0, 0, 0, 0, 0, 0, 0, 13, 14, 0, 15, 0, 16, 17, 0, // State 2 - 21, 0, 0, -30, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 21, 0, 0, -30, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 3 - 0, 0, 0, -31, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -31, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 4 - 0, 0, 0, -32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 5 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 6 - 0, 0, 0, 0, 0, 0, -12, -12, 0, -12, 0, -12, -12, 0, + 0, 0, 0, 0, 0, 0, 0, -12, -12, 0, -12, 0, -12, -12, 0, // State 7 - 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 8 - 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 9 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 10 - 0, 0, 0, -33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 11 - 0, 0, 0, 0, 0, 0, 13, 14, 0, 15, 0, 16, 29, 0, + 0, 0, 0, 0, 0, 0, 0, 13, 14, 0, 15, 0, 16, 29, 0, // State 12 - 0, 0, 0, 0, 0, 0, 37, 38, 0, 39, 0, 40, 41, 0, + 0, 0, 0, 0, 0, 0, 0, 37, 38, 0, 39, 0, 40, 41, 0, // State 13 - 0, 0, 0, -18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 14 - 0, 0, 0, -34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 15 - 0, 0, 0, -39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 16 - -14, 0, 0, -14, -14, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -14, 0, 0, -14, -14, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 17 - 0, 0, 0, 0, 0, 0, -13, -13, 0, -13, 0, -13, -13, 0, + 0, 0, 0, 0, 0, 0, 0, -13, -13, 0, -13, 0, -13, -13, 0, // State 18 - 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 19 - 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 20 - 0, 0, 0, 0, 0, 0, 51, 52, 0, 53, 0, 54, 55, 0, + 0, 0, 0, 0, 0, 0, 0, 51, 52, 0, 53, 0, 54, 55, 0, // State 21 - 0, 0, 0, 0, 0, 0, 61, 62, 0, 63, 0, 64, 65, 0, + 62, 0, 0, 0, 0, 0, 0, 63, 64, 0, 65, 0, 66, 67, 0, // State 22 - 0, 0, 0, 0, 0, 0, 61, 62, 0, 63, 0, 64, 65, 0, + 62, 0, 0, 0, 0, 0, 0, 63, 64, 0, 65, 0, 66, 67, 0, // State 23 - 0, 0, 0, 0, 0, 0, -24, -24, 0, -24, 0, -24, -24, 0, + 0, 0, 0, 0, 0, 0, 0, -24, -24, 0, -24, 0, -24, -24, 0, // State 24 - 0, 0, 0, 0, 0, 0, -25, -25, 0, -25, 0, -25, -25, 0, + 0, 0, 0, 0, 0, 0, 0, -25, -25, 0, -25, 0, -25, -25, 0, // State 25 - 67, 0, 0, -30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 69, 0, 0, -30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 26 - 0, 0, 0, -31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 27 - 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 28 - -14, 0, 0, -14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -14, 0, 0, -14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 29 - 69, 0, -30, 0, 0, 0, 0, 0, -30, 0, -30, 0, 0, 0, + 0, 71, 0, -30, 0, 0, 0, 0, 0, -30, 0, -30, 0, 0, 0, // State 30 - 0, 0, 70, 0, 0, 0, 0, 0, -20, 0, 71, 0, 0, 0, + 0, 0, 0, 72, 0, 0, 0, 0, 0, -20, 0, 73, 0, 0, 0, // State 31 - 0, 0, -31, 0, 0, 0, 0, 0, -31, 0, -31, 0, 0, 0, + 0, 0, 0, -31, 0, 0, 0, 0, 0, -31, 0, -31, 0, 0, 0, // State 32 - 0, 0, -32, 0, 0, 0, 0, 0, -32, 0, -32, 0, 0, 0, + 0, 0, 0, -32, 0, 0, 0, 0, 0, -32, 0, -32, 0, 0, 0, // State 33 - 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, // State 34 - 0, 0, -15, 0, 0, 0, 0, 0, -15, 0, -15, 0, 0, 0, + 0, 0, 0, -15, 0, 0, 0, 0, 0, -15, 0, -15, 0, 0, 0, // State 35 - 0, 0, -33, 0, 0, 0, 0, 0, -33, 0, -33, 0, 0, 0, + 0, 0, 0, -33, 0, 0, 0, 0, 0, -33, 0, -33, 0, 0, 0, // State 36 - 0, 0, 0, 0, 0, 0, 37, 38, 0, 39, 0, 40, 41, 0, + 0, 0, 0, 0, 0, 0, 0, 37, 38, 0, 39, 0, 40, 41, 0, // State 37 - 0, 0, -18, 0, 0, 0, 0, 0, -18, 0, -18, 0, 0, 0, + 0, 0, 0, -18, 0, 0, 0, 0, 0, -18, 0, -18, 0, 0, 0, // State 38 - 0, 0, -34, 0, 0, 0, 0, 0, -34, 0, -34, 0, 0, 0, + 0, 0, 0, -34, 0, 0, 0, 0, 0, -34, 0, -34, 0, 0, 0, // State 39 - 0, 0, -39, 0, 0, 0, 0, 0, -39, 0, -39, 0, 0, 0, + 0, 0, 0, -41, 0, 0, 0, 0, 0, -41, 0, -41, 0, 0, 0, // State 40 - -14, 0, -14, 0, 0, 0, 0, 0, -14, 0, -14, 0, 0, 0, + 0, -14, 0, -14, 0, 0, 0, 0, 0, -14, 0, -14, 0, 0, 0, // State 41 - 0, 0, 0, 0, 0, 0, -24, -24, 0, -24, 0, -24, -24, 0, + 0, 0, 0, 0, 0, 0, 0, -24, -24, 0, -24, 0, -24, -24, 0, // State 42 - 0, 0, 0, 0, 0, 0, -25, -25, 0, -25, 0, -25, -25, 0, + 0, 0, 0, 0, 0, 0, 0, -25, -25, 0, -25, 0, -25, -25, 0, // State 43 - 0, 0, 0, 0, 0, 0, 51, 52, 0, 53, 0, 54, 55, 0, + 0, 0, 0, 0, 0, 0, 0, 51, 52, 0, 53, 0, 54, 55, 0, // State 44 - 75, -30, -30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 77, -30, -30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 45 - 0, 76, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 78, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 46 - 0, -31, -31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -31, -31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 47 - 0, -32, -32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -32, -32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 48 - 0, -15, -15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -15, -15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 49 - 0, -33, -33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -33, -33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 50 - 0, 0, 0, 0, 0, 0, 37, 38, 0, 39, 0, 40, 41, 0, + 0, 0, 0, 0, 0, 0, 0, 37, 38, 0, 39, 0, 40, 41, 0, // State 51 - 0, -18, -18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -18, -18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 52 - 0, -34, -34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -34, -34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 53 - 0, -39, -39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -41, -41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 54 - -14, -14, -14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -14, -14, -14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 55 - 79, 0, -30, -30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 81, 0, -30, -30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 56 - 0, 0, -31, -31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -31, -31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 57 - 0, 0, -32, -32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -32, -32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 58 - 0, 0, 81, -28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -36, -36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 59 - 0, 0, -33, -33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 83, -28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 60 - 0, 0, 0, 0, 0, 0, 37, 38, 0, 39, 0, 40, 41, 0, + 0, 0, 0, -33, -33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 61 - 0, 0, -18, -18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -35, -35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 62 - 0, 0, -34, -34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 37, 38, 0, 39, 0, 40, 41, 0, // State 63 - 0, 0, -39, -39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -18, -18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 64 - -14, 0, -14, -14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -34, -34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 65 - 0, 0, 81, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -41, -41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 66 - 0, 0, 0, 0, 0, 0, 51, 52, 0, 53, 0, 54, 55, 0, + 0, -14, 0, -14, -14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 67 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 83, -26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 68 - 0, 0, 0, 0, 0, 0, 51, 52, 0, 53, 0, 54, 55, 0, + 0, 0, 0, 0, 0, 0, 0, 51, 52, 0, 53, 0, 54, 55, 0, // State 69 - 0, 0, 0, 0, 0, 0, 37, 38, 0, 39, 0, 40, 41, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 70 - 0, 0, 0, 0, 0, 0, 95, 96, 0, 97, 0, 98, 99, 0, + 0, 0, 0, 0, 0, 0, 0, 51, 52, 0, 53, 0, 54, 55, 0, // State 71 - 0, 0, 0, -19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 37, 38, 0, 39, 0, 40, 41, 0, // State 72 - 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 97, 98, 0, 99, 0, 100, 101, 0, // State 73 - 0, 101, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 74 - 0, 0, 0, 0, 0, 0, 51, 52, 0, 53, 0, 54, 55, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, // State 75 - 0, 0, 0, -16, -16, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 103, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 76 - 0, 0, 0, 0, 0, 0, -9, -9, 0, -9, 0, -9, -9, 0, + 0, 0, 0, 0, 0, 0, 0, 51, 52, 0, 53, 0, 54, 55, 0, // State 77 - 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -16, -16, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 78 - 0, 0, 0, 0, 0, 0, 51, 52, 0, 53, 0, 54, 55, 0, + 0, 0, 0, 0, 0, 0, 0, -9, -9, 0, -9, 0, -9, -9, 0, // State 79 - 0, 0, 108, -29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 0, 0, 0, 0, 0, // State 80 - 0, 0, 0, 0, 0, 0, 61, 62, 0, 63, 0, 64, 65, 0, + 0, 0, 0, 0, 0, 0, 0, 51, 52, 0, 53, 0, 54, 55, 0, // State 81 - 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, + 0, 0, 0, 110, -29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 82 - 0, 0, 108, -27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 62, 0, 0, 0, 0, 0, 0, 63, 64, 0, 65, 0, 66, 67, 0, // State 83 - 0, 0, 0, 0, 0, 0, 51, 52, 0, 53, 0, 54, 55, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 0, 0, 0, 0, 0, // State 84 - 0, 112, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 110, -27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 85 - 0, 0, 0, 0, 0, 0, 51, 52, 0, 53, 0, 54, 55, 0, + 0, 0, 0, 0, 0, 0, 0, 51, 52, 0, 53, 0, 54, 55, 0, // State 86 - 0, 114, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 114, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 87 - 0, 0, 0, 0, 0, 0, 0, 0, -21, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 51, 52, 0, 53, 0, 54, 55, 0, // State 88 - 115, 0, 0, 0, 0, 0, 0, 0, -30, 0, 0, 0, 0, 0, + 0, 0, 116, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 89 - 0, 0, 0, 0, 0, 0, 0, 0, -22, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, -21, 0, 0, 0, 0, 0, // State 90 - 0, 0, 0, 0, 0, 0, 0, 0, -31, 0, 0, 0, 0, 0, + 0, 117, 0, 0, 0, 0, 0, 0, 0, -30, 0, 0, 0, 0, 0, // State 91 - 0, 0, 0, 0, 0, 0, 0, 0, -32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, -22, 0, 0, 0, 0, 0, // State 92 - 0, 0, 0, 0, 0, 0, 0, 0, -15, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, -31, 0, 0, 0, 0, 0, // State 93 - 0, 0, 0, 0, 0, 0, 0, 0, -33, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, -32, 0, 0, 0, 0, 0, // State 94 - 0, 0, 0, 0, 0, 0, 37, 38, 0, 39, 0, 40, 41, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, -15, 0, 0, 0, 0, 0, // State 95 - 0, 0, 0, 0, 0, 0, 0, 0, -18, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, -33, 0, 0, 0, 0, 0, // State 96 - 0, 0, 0, 0, 0, 0, 0, 0, -34, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 37, 38, 0, 39, 0, 40, 41, 0, // State 97 - 0, 0, 0, 0, 0, 0, 0, 0, -39, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, -18, 0, 0, 0, 0, 0, // State 98 - -14, 0, 0, 0, 0, 0, 0, 0, -14, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, -34, 0, 0, 0, 0, 0, // State 99 - 0, 0, -19, 0, 0, 0, 0, 0, -19, 0, -19, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, -41, 0, 0, 0, 0, 0, // State 100 - 0, 0, 0, -17, -17, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -14, 0, 0, 0, 0, 0, 0, 0, -14, 0, 0, 0, 0, 0, // State 101 - 0, 0, 0, 0, 0, 0, -10, -10, 0, -10, 0, -10, -10, 0, + 0, 0, 0, -19, 0, 0, 0, 0, 0, -19, 0, -19, 0, 0, 0, // State 102 - 0, 0, 0, 0, 0, 0, 51, 52, 0, 53, 0, 54, 55, 0, + 0, 0, 0, 0, -17, -17, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 103 - 0, 118, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -10, -10, 0, -10, 0, -10, -10, 0, // State 104 - 0, -19, -19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 51, 52, 0, 53, 0, 54, 55, 0, // State 105 - 0, 0, 0, 0, 0, 0, 51, 52, 0, 53, 0, 54, 55, 0, + 0, 0, 120, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 106 - 0, 120, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -19, -19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 107 - 0, 0, 0, 0, 0, 0, 61, 62, 0, 63, 0, 64, 65, 0, + 0, 0, 0, 0, 0, 0, 0, 51, 52, 0, 53, 0, 54, 55, 0, // State 108 - 0, 0, -4, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 122, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 109 - 0, 0, -19, -19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 62, 0, 0, 0, 0, 0, 0, 63, 64, 0, 65, 0, 66, 67, 0, // State 110 - 0, 122, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -4, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 111 - 0, 0, 0, -16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -19, -19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 112 - 0, 123, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 124, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 113 - 0, 0, -16, 0, 0, 0, 0, 0, -16, 0, -16, 0, 0, 0, + 0, 0, 0, 0, -16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 114 - 0, 0, 0, 0, 0, 0, 51, 52, 0, 53, 0, 54, 55, 0, + 0, 0, 125, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 115 - 0, 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, 0, 0, 0, + 0, 0, 0, -16, 0, 0, 0, 0, 0, -16, 0, -16, 0, 0, 0, // State 116 - 0, 127, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 51, 52, 0, 53, 0, 54, 55, 0, // State 117 - 0, -16, -16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, // State 118 - 0, 128, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 129, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 119 - 0, 0, -16, -16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -16, -16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 120 - 0, 0, -5, -5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 130, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 121 - 0, 0, 0, -17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -16, -16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 122 - 0, 0, -17, 0, 0, 0, 0, 0, -17, 0, -17, 0, 0, 0, + 0, 0, 0, -5, -5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 123 - 0, 0, 0, 0, 0, 0, 51, 52, 0, 53, 0, 54, 55, 0, + 0, 0, 0, 0, -17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 124 - 0, 130, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -17, 0, 0, 0, 0, 0, -17, 0, -17, 0, 0, 0, // State 125 - 0, 0, 0, 0, 0, 0, 0, 0, -19, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 51, 52, 0, 53, 0, 54, 55, 0, // State 126 - 0, -17, -17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 132, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 127 - 0, 0, -17, -17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, -19, 0, 0, 0, 0, 0, // State 128 - 0, 131, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -17, -17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 129 - 0, 0, 0, 0, 0, 0, 0, 0, -16, 0, 0, 0, 0, 0, + 0, 0, 0, -17, -17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 130 - 0, 0, 0, 0, 0, 0, 0, 0, -17, 0, 0, 0, 0, 0, + 0, 0, 133, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 131 + 0, 0, 0, 0, 0, 0, 0, 0, 0, -16, 0, 0, 0, 0, 0, + // State 132 + 0, 0, 0, 0, 0, 0, 0, 0, 0, -17, 0, 0, 0, 0, 0, ]; const __EOF_ACTION: &'static [i32] = &[ 0, @@ -315,11 +321,11 @@ mod __parse__TopLevel { 0, 0, 0, - -36, + -38, 0, 0, 0, - -40, + -42, 0, 0, 0, @@ -333,8 +339,8 @@ mod __parse__TopLevel { 0, 0, 0, - -37, - -38, + -39, + -40, 0, 0, 0, @@ -377,7 +383,9 @@ mod __parse__TopLevel { 0, 0, 0, - -35, + 0, + 0, + -37, 0, 0, 0, @@ -444,270 +452,275 @@ mod __parse__TopLevel { ]; const __GOTO: &'static [i32] = &[ // State 0 - 0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 4, 5, 0, 6, 7, 8, 9, 10, 11, 0, + 0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 4, 5, 0, 6, 7, 8, 9, 0, 10, 11, 0, // State 1 - 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 5, 0, 0, 18, 19, 20, 0, 11, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 5, 0, 0, 18, 19, 20, 0, 0, 11, 0, // State 2 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 3 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 4 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 5 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 6 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 7 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 8 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 9 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 10 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 11 - 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 27, 5, 0, 0, 0, 0, 28, 0, 11, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 27, 5, 0, 0, 0, 0, 28, 0, 0, 11, 0, // State 12 - 0, 0, 0, 0, 0, 0, 0, 0, 30, 31, 32, 33, 34, 0, 0, 0, 35, 0, 36, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 30, 31, 32, 33, 34, 0, 0, 0, 35, 0, 0, 36, 0, // State 13 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 14 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 15 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 16 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 17 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 18 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 19 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 20 - 0, 0, 0, 0, 0, 44, 0, 0, 45, 46, 47, 48, 0, 0, 0, 0, 49, 0, 50, 0, + 0, 0, 0, 0, 0, 44, 0, 0, 45, 46, 47, 48, 0, 0, 0, 0, 49, 0, 0, 50, 0, // State 21 - 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 57, 58, 0, 0, 0, 0, 59, 0, 60, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 57, 58, 0, 0, 0, 0, 59, 60, 0, 61, 0, // State 22 - 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 57, 58, 0, 0, 0, 0, 66, 0, 60, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 57, 58, 0, 0, 0, 0, 59, 68, 0, 61, 0, // State 23 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 24 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 25 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 26 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 27 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 28 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 29 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 30 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 31 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 32 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 33 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 34 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 35 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 36 - 0, 0, 0, 0, 0, 0, 0, 0, 30, 31, 32, 33, 73, 0, 0, 0, 35, 0, 36, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 30, 31, 32, 33, 75, 0, 0, 0, 35, 0, 0, 36, 0, // State 37 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 38 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 39 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 40 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 41 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 42 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 43 - 0, 0, 0, 0, 0, 0, 0, 0, 45, 74, 47, 48, 0, 0, 0, 0, 49, 0, 50, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 45, 76, 47, 48, 0, 0, 0, 0, 49, 0, 0, 50, 0, // State 44 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 45 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 46 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 47 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 48 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 49 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 50 - 0, 0, 0, 0, 0, 0, 0, 0, 30, 31, 32, 33, 78, 0, 0, 0, 35, 0, 36, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 30, 31, 32, 33, 80, 0, 0, 0, 35, 0, 0, 36, 0, // State 51 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 52 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 53 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 54 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 55 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 56 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 57 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 58 - 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 59 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 60 - 0, 0, 0, 0, 0, 0, 0, 0, 30, 31, 32, 33, 82, 0, 0, 0, 35, 0, 36, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 61 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 62 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 30, 31, 32, 33, 84, 0, 0, 0, 35, 0, 0, 36, 0, // State 63 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 64 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 65 - 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 66 - 0, 0, 0, 0, 0, 84, 0, 0, 45, 85, 47, 48, 0, 0, 0, 0, 49, 0, 50, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 67 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 68 - 0, 0, 0, 0, 0, 86, 0, 0, 45, 87, 47, 48, 0, 0, 0, 0, 49, 0, 50, 0, + 0, 0, 0, 0, 0, 86, 0, 0, 45, 87, 47, 48, 0, 0, 0, 0, 49, 0, 0, 50, 0, // State 69 - 0, 0, 0, 0, 0, 0, 0, 0, 30, 31, 32, 33, 88, 0, 0, 0, 35, 0, 36, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 70 - 0, 0, 0, 0, 0, 0, 0, 0, 89, 90, 91, 92, 0, 0, 0, 0, 93, 0, 94, 0, + 0, 0, 0, 0, 0, 88, 0, 0, 45, 89, 47, 48, 0, 0, 0, 0, 49, 0, 0, 50, 0, // State 71 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 30, 31, 32, 33, 90, 0, 0, 0, 35, 0, 0, 36, 0, // State 72 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 91, 92, 93, 94, 0, 0, 0, 0, 95, 0, 0, 96, 0, // State 73 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 74 - 0, 0, 0, 0, 0, 103, 0, 0, 45, 104, 47, 48, 0, 0, 0, 0, 49, 0, 50, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 75 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 76 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 105, 0, 0, 45, 106, 47, 48, 0, 0, 0, 0, 49, 0, 0, 50, 0, // State 77 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 78 - 0, 0, 0, 0, 0, 106, 0, 0, 45, 107, 47, 48, 0, 0, 0, 0, 49, 0, 50, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 79 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 80 - 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 57, 58, 0, 0, 0, 0, 109, 0, 60, 0, + 0, 0, 0, 0, 0, 108, 0, 0, 45, 109, 47, 48, 0, 0, 0, 0, 49, 0, 0, 50, 0, // State 81 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 82 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 57, 58, 0, 0, 0, 0, 59, 111, 0, 61, 0, // State 83 - 0, 0, 0, 0, 0, 0, 0, 0, 45, 111, 47, 48, 0, 0, 0, 0, 49, 0, 50, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 84 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 85 - 0, 0, 0, 0, 0, 0, 0, 0, 45, 113, 47, 48, 0, 0, 0, 0, 49, 0, 50, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 45, 113, 47, 48, 0, 0, 0, 0, 49, 0, 0, 50, 0, // State 86 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 87 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 45, 115, 47, 48, 0, 0, 0, 0, 49, 0, 0, 50, 0, // State 88 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 89 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 90 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 91 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 92 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 93 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 94 - 0, 0, 0, 0, 0, 0, 0, 0, 30, 31, 32, 33, 116, 0, 0, 0, 35, 0, 36, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 95 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 96 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 30, 31, 32, 33, 118, 0, 0, 0, 35, 0, 0, 36, 0, // State 97 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 98 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 99 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 100 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 101 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 102 - 0, 0, 0, 0, 0, 0, 0, 0, 45, 117, 47, 48, 0, 0, 0, 0, 49, 0, 50, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 103 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 104 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 45, 119, 47, 48, 0, 0, 0, 0, 49, 0, 0, 50, 0, // State 105 - 0, 0, 0, 0, 0, 0, 0, 0, 45, 119, 47, 48, 0, 0, 0, 0, 49, 0, 50, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 106 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 107 - 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 57, 58, 0, 0, 0, 0, 121, 0, 60, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 45, 121, 47, 48, 0, 0, 0, 0, 49, 0, 0, 50, 0, // State 108 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 109 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 57, 58, 0, 0, 0, 0, 59, 123, 0, 61, 0, // State 110 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 111 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 112 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 113 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 114 - 0, 0, 0, 0, 0, 124, 0, 0, 45, 125, 47, 48, 0, 0, 0, 0, 49, 0, 50, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 115 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 116 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 126, 0, 0, 45, 127, 47, 48, 0, 0, 0, 0, 49, 0, 0, 50, 0, // State 117 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 118 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 119 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 120 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 121 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 122 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 123 - 0, 0, 0, 0, 0, 0, 0, 0, 45, 129, 47, 48, 0, 0, 0, 0, 49, 0, 50, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 124 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 125 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 45, 131, 47, 48, 0, 0, 0, 0, 49, 0, 0, 50, 0, // State 126 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 127 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 128 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 129 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // State 130 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 131 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 132 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ]; fn __expected_tokens(__state: usize) -> Vec<::std::string::String> { const __TERMINAL: &'static [&'static str] = &[ + r###""!""###, r###""(""###, r###"")""###, r###"",""###, @@ -722,7 +735,7 @@ mod __parse__TopLevel { r###"r#"[A-Z][A-Za-z0-9_]*"#"###, r###"r#"[a-z][A-Za-z0-9_]*"#"###, ]; - __ACTION[(__state * 14)..].iter().zip(__TERMINAL).filter_map(|(&state, terminal)| { + __ACTION[(__state * 15)..].iter().zip(__TERMINAL).filter_map(|(&state, terminal)| { if state == 0 { None } else { @@ -763,6 +776,7 @@ mod __parse__TopLevel { (10, _) if true => 10, (11, _) if true => 11, (12, _) if true => 12, + (13, _) if true => 13, _ => { let __state = *__states.last().unwrap() as usize; let __error = __lalrpop_util::ParseError::UnrecognizedToken { @@ -774,59 +788,63 @@ mod __parse__TopLevel { }; '__inner: loop { let __state = *__states.last().unwrap() as usize; - let __action = __ACTION[__state * 14 + __integer]; + let __action = __ACTION[__state * 15 + __integer]; if __action > 0 { let __symbol = match __integer { 0 => match __lookahead.1 { - (0, __tok0) => __Symbol::Term_22_28_22(__tok0), + (0, __tok0) => __Symbol::Term_22_21_22(__tok0), _ => unreachable!(), }, 1 => match __lookahead.1 { - (1, __tok0) => __Symbol::Term_22_29_22(__tok0), + (1, __tok0) => __Symbol::Term_22_28_22(__tok0), _ => unreachable!(), }, 2 => match __lookahead.1 { - (2, __tok0) => __Symbol::Term_22_2c_22(__tok0), + (2, __tok0) => __Symbol::Term_22_29_22(__tok0), _ => unreachable!(), }, 3 => match __lookahead.1 { - (3, __tok0) => __Symbol::Term_22_2e_22(__tok0), + (3, __tok0) => __Symbol::Term_22_2c_22(__tok0), _ => unreachable!(), }, 4 => match __lookahead.1 { - (4, __tok0) => __Symbol::Term_22_3a_2d_22(__tok0), + (4, __tok0) => __Symbol::Term_22_2e_22(__tok0), _ => unreachable!(), }, 5 => match __lookahead.1 { - (5, __tok0) => __Symbol::Term_22_3f_2d_22(__tok0), + (5, __tok0) => __Symbol::Term_22_3a_2d_22(__tok0), _ => unreachable!(), }, 6 => match __lookahead.1 { - (6, __tok0) => __Symbol::Term_22_5b_22(__tok0), + (6, __tok0) => __Symbol::Term_22_3f_2d_22(__tok0), _ => unreachable!(), }, 7 => match __lookahead.1 { - (7, __tok0) => __Symbol::Term_22_5b_5d_22(__tok0), + (7, __tok0) => __Symbol::Term_22_5b_22(__tok0), _ => unreachable!(), }, 8 => match __lookahead.1 { - (8, __tok0) => __Symbol::Term_22_5d_22(__tok0), + (8, __tok0) => __Symbol::Term_22_5b_5d_22(__tok0), _ => unreachable!(), }, 9 => match __lookahead.1 { - (9, __tok0) => __Symbol::Term_22___22(__tok0), + (9, __tok0) => __Symbol::Term_22_5d_22(__tok0), _ => unreachable!(), }, 10 => match __lookahead.1 { - (10, __tok0) => __Symbol::Term_22_7c_22(__tok0), + (10, __tok0) => __Symbol::Term_22___22(__tok0), _ => unreachable!(), }, 11 => match __lookahead.1 { - (11, __tok0) => __Symbol::Termr_23_22_5bA_2dZ_5d_5bA_2dZa_2dz0_2d9___5d_2a_22_23(__tok0), + (11, __tok0) => __Symbol::Term_22_7c_22(__tok0), _ => unreachable!(), }, 12 => match __lookahead.1 { - (12, __tok0) => __Symbol::Termr_23_22_5ba_2dz_5d_5bA_2dZa_2dz0_2d9___5d_2a_22_23(__tok0), + (12, __tok0) => __Symbol::Termr_23_22_5bA_2dZ_5d_5bA_2dZa_2dz0_2d9___5d_2a_22_23(__tok0), + _ => unreachable!(), + }, + 13 => match __lookahead.1 { + (13, __tok0) => __Symbol::Termr_23_22_5ba_2dz_5d_5bA_2dZa_2dz0_2d9___5d_2a_22_23(__tok0), _ => unreachable!(), }, _ => unreachable!(), @@ -878,150 +896,150 @@ mod __parse__TopLevel { { let __nonterminal = match -__action { 1 => { - // ("," ) = ",", Term => ActionFn(26); - let __sym1 = __pop_NtTerm(__symbols); + // ("," ) = ",", TermOrCut => ActionFn(28); + let __sym1 = __pop_NtTermOrCut(__symbols); let __sym0 = __pop_Term_22_2c_22(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action26::<>(input, __sym0, __sym1); + let __nt = super::__action28::<>(input, __sym0, __sym1); let __states_len = __states.len(); __states.truncate(__states_len - 2); - __symbols.push((__start, __Symbol::Nt_28_22_2c_22_20_3cTerm_3e_29(__nt), __end)); + __symbols.push((__start, __Symbol::Nt_28_22_2c_22_20_3cTermOrCut_3e_29(__nt), __end)); 0 } 2 => { - // ("," )* = => ActionFn(24); + // ("," )* = => ActionFn(26); let __start = __symbols.last().map(|s| s.2.clone()).unwrap_or_default(); let __end = __lookahead_start.cloned().unwrap_or_else(|| __start.clone()); - let __nt = super::__action24::<>(input, &__start, &__end); + let __nt = super::__action26::<>(input, &__start, &__end); let __states_len = __states.len(); __states.truncate(__states_len - 0); - __symbols.push((__start, __Symbol::Nt_28_22_2c_22_20_3cTerm_3e_29_2a(__nt), __end)); + __symbols.push((__start, __Symbol::Nt_28_22_2c_22_20_3cTermOrCut_3e_29_2a(__nt), __end)); 1 } 3 => { - // ("," )* = ("," )+ => ActionFn(25); - let __sym0 = __pop_Nt_28_22_2c_22_20_3cTerm_3e_29_2b(__symbols); + // ("," )* = ("," )+ => ActionFn(27); + let __sym0 = __pop_Nt_28_22_2c_22_20_3cTermOrCut_3e_29_2b(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action25::<>(input, __sym0); + let __nt = super::__action27::<>(input, __sym0); let __states_len = __states.len(); __states.truncate(__states_len - 1); - __symbols.push((__start, __Symbol::Nt_28_22_2c_22_20_3cTerm_3e_29_2a(__nt), __end)); + __symbols.push((__start, __Symbol::Nt_28_22_2c_22_20_3cTermOrCut_3e_29_2a(__nt), __end)); 1 } 4 => { - // ("," )+ = ",", Term => ActionFn(37); - let __sym1 = __pop_NtTerm(__symbols); + // ("," )+ = ",", TermOrCut => ActionFn(39); + let __sym1 = __pop_NtTermOrCut(__symbols); let __sym0 = __pop_Term_22_2c_22(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action37::<>(input, __sym0, __sym1); + let __nt = super::__action39::<>(input, __sym0, __sym1); let __states_len = __states.len(); __states.truncate(__states_len - 2); - __symbols.push((__start, __Symbol::Nt_28_22_2c_22_20_3cTerm_3e_29_2b(__nt), __end)); + __symbols.push((__start, __Symbol::Nt_28_22_2c_22_20_3cTermOrCut_3e_29_2b(__nt), __end)); 2 } 5 => { - // ("," )+ = ("," )+, ",", Term => ActionFn(38); - let __sym2 = __pop_NtTerm(__symbols); + // ("," )+ = ("," )+, ",", TermOrCut => ActionFn(40); + let __sym2 = __pop_NtTermOrCut(__symbols); let __sym1 = __pop_Term_22_2c_22(__symbols); - let __sym0 = __pop_Nt_28_22_2c_22_20_3cTerm_3e_29_2b(__symbols); + let __sym0 = __pop_Nt_28_22_2c_22_20_3cTermOrCut_3e_29_2b(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action38::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action40::<>(input, __sym0, __sym1, __sym2); let __states_len = __states.len(); __states.truncate(__states_len - 3); - __symbols.push((__start, __Symbol::Nt_28_22_2c_22_20_3cTerm_3e_29_2b(__nt), __end)); + __symbols.push((__start, __Symbol::Nt_28_22_2c_22_20_3cTermOrCut_3e_29_2b(__nt), __end)); 2 } 6 => { - // ( ",") = BoxedTerm, "," => ActionFn(32); + // ( ",") = BoxedTerm, "," => ActionFn(34); let __sym1 = __pop_Term_22_2c_22(__symbols); let __sym0 = __pop_NtBoxedTerm(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action32::<>(input, __sym0, __sym1); + let __nt = super::__action34::<>(input, __sym0, __sym1); let __states_len = __states.len(); __states.truncate(__states_len - 2); __symbols.push((__start, __Symbol::Nt_28_3cBoxedTerm_3e_20_22_2c_22_29(__nt), __end)); 3 } 7 => { - // ( ",")* = => ActionFn(30); + // ( ",")* = => ActionFn(32); let __start = __symbols.last().map(|s| s.2.clone()).unwrap_or_default(); let __end = __lookahead_start.cloned().unwrap_or_else(|| __start.clone()); - let __nt = super::__action30::<>(input, &__start, &__end); + let __nt = super::__action32::<>(input, &__start, &__end); let __states_len = __states.len(); __states.truncate(__states_len - 0); __symbols.push((__start, __Symbol::Nt_28_3cBoxedTerm_3e_20_22_2c_22_29_2a(__nt), __end)); 4 } 8 => { - // ( ",")* = ( ",")+ => ActionFn(31); + // ( ",")* = ( ",")+ => ActionFn(33); let __sym0 = __pop_Nt_28_3cBoxedTerm_3e_20_22_2c_22_29_2b(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action31::<>(input, __sym0); + let __nt = super::__action33::<>(input, __sym0); let __states_len = __states.len(); __states.truncate(__states_len - 1); __symbols.push((__start, __Symbol::Nt_28_3cBoxedTerm_3e_20_22_2c_22_29_2a(__nt), __end)); 4 } 9 => { - // ( ",")+ = BoxedTerm, "," => ActionFn(43); + // ( ",")+ = BoxedTerm, "," => ActionFn(45); let __sym1 = __pop_Term_22_2c_22(__symbols); let __sym0 = __pop_NtBoxedTerm(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action43::<>(input, __sym0, __sym1); + let __nt = super::__action45::<>(input, __sym0, __sym1); let __states_len = __states.len(); __states.truncate(__states_len - 2); __symbols.push((__start, __Symbol::Nt_28_3cBoxedTerm_3e_20_22_2c_22_29_2b(__nt), __end)); 5 } 10 => { - // ( ",")+ = ( ",")+, BoxedTerm, "," => ActionFn(44); + // ( ",")+ = ( ",")+, BoxedTerm, "," => ActionFn(46); let __sym2 = __pop_Term_22_2c_22(__symbols); let __sym1 = __pop_NtBoxedTerm(__symbols); let __sym0 = __pop_Nt_28_3cBoxedTerm_3e_20_22_2c_22_29_2b(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action44::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action46::<>(input, __sym0, __sym1, __sym2); let __states_len = __states.len(); __states.truncate(__states_len - 3); __symbols.push((__start, __Symbol::Nt_28_3cBoxedTerm_3e_20_22_2c_22_29_2b(__nt), __end)); 5 } 11 => { - // () = PredicateClause => ActionFn(29); + // () = PredicateClause => ActionFn(31); let __sym0 = __pop_NtPredicateClause(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action29::<>(input, __sym0); + let __nt = super::__action31::<>(input, __sym0); let __states_len = __states.len(); __states.truncate(__states_len - 1); __symbols.push((__start, __Symbol::Nt_28_3cPredicateClause_3e_29(__nt), __end)); 6 } 12 => { - // ()+ = PredicateClause => ActionFn(47); + // ()+ = PredicateClause => ActionFn(49); let __sym0 = __pop_NtPredicateClause(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action47::<>(input, __sym0); + let __nt = super::__action49::<>(input, __sym0); let __states_len = __states.len(); __states.truncate(__states_len - 1); __symbols.push((__start, __Symbol::Nt_28_3cPredicateClause_3e_29_2b(__nt), __end)); 7 } 13 => { - // ()+ = ()+, PredicateClause => ActionFn(48); + // ()+ = ()+, PredicateClause => ActionFn(50); let __sym1 = __pop_NtPredicateClause(__symbols); let __sym0 = __pop_Nt_28_3cPredicateClause_3e_29_2b(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action48::<>(input, __sym0, __sym1); + let __nt = super::__action50::<>(input, __sym0, __sym1); let __states_len = __states.len(); __states.truncate(__states_len - 2); __symbols.push((__start, __Symbol::Nt_28_3cPredicateClause_3e_29_2b(__nt), __end)); @@ -1050,21 +1068,21 @@ mod __parse__TopLevel { 9 } 16 => { - // Clause = Atom, "(", BoxedTerm, ")" => ActionFn(45); + // Clause = Atom, "(", BoxedTerm, ")" => ActionFn(47); let __sym3 = __pop_Term_22_29_22(__symbols); let __sym2 = __pop_NtBoxedTerm(__symbols); let __sym1 = __pop_Term_22_28_22(__symbols); let __sym0 = __pop_NtAtom(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action45::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action47::<>(input, __sym0, __sym1, __sym2, __sym3); let __states_len = __states.len(); __states.truncate(__states_len - 4); __symbols.push((__start, __Symbol::NtClause(__nt), __end)); 10 } 17 => { - // Clause = Atom, "(", ( ",")+, BoxedTerm, ")" => ActionFn(46); + // Clause = Atom, "(", ( ",")+, BoxedTerm, ")" => ActionFn(48); let __sym4 = __pop_Term_22_29_22(__symbols); let __sym3 = __pop_NtBoxedTerm(__symbols); let __sym2 = __pop_Nt_28_3cBoxedTerm_3e_20_22_2c_22_29_2b(__symbols); @@ -1072,7 +1090,7 @@ mod __parse__TopLevel { let __sym0 = __pop_NtAtom(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); - let __nt = super::__action46::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); + let __nt = super::__action48::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4); let __states_len = __states.len(); __states.truncate(__states_len - 5); __symbols.push((__start, __Symbol::NtClause(__nt), __end)); @@ -1176,115 +1194,137 @@ mod __parse__TopLevel { 14 } 26 => { - // Rule = Clause, ":-", Term => ActionFn(39); - let __sym2 = __pop_NtTerm(__symbols); + // Rule = Clause, ":-", TermOrCut => ActionFn(41); + let __sym2 = __pop_NtTermOrCut(__symbols); let __sym1 = __pop_Term_22_3a_2d_22(__symbols); let __sym0 = __pop_NtClause(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action39::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action41::<>(input, __sym0, __sym1, __sym2); let __states_len = __states.len(); __states.truncate(__states_len - 3); __symbols.push((__start, __Symbol::NtRule(__nt), __end)); 15 } 27 => { - // Rule = Clause, ":-", Term, ("," )+ => ActionFn(40); - let __sym3 = __pop_Nt_28_22_2c_22_20_3cTerm_3e_29_2b(__symbols); - let __sym2 = __pop_NtTerm(__symbols); + // Rule = Clause, ":-", TermOrCut, ("," )+ => ActionFn(42); + let __sym3 = __pop_Nt_28_22_2c_22_20_3cTermOrCut_3e_29_2b(__symbols); + let __sym2 = __pop_NtTermOrCut(__symbols); let __sym1 = __pop_Term_22_3a_2d_22(__symbols); let __sym0 = __pop_NtClause(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action40::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action42::<>(input, __sym0, __sym1, __sym2, __sym3); let __states_len = __states.len(); __states.truncate(__states_len - 4); __symbols.push((__start, __Symbol::NtRule(__nt), __end)); 15 } 28 => { - // Rule = Atom, ":-", Term => ActionFn(41); - let __sym2 = __pop_NtTerm(__symbols); + // Rule = Atom, ":-", TermOrCut => ActionFn(43); + let __sym2 = __pop_NtTermOrCut(__symbols); let __sym1 = __pop_Term_22_3a_2d_22(__symbols); let __sym0 = __pop_NtAtom(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); - let __nt = super::__action41::<>(input, __sym0, __sym1, __sym2); + let __nt = super::__action43::<>(input, __sym0, __sym1, __sym2); let __states_len = __states.len(); __states.truncate(__states_len - 3); __symbols.push((__start, __Symbol::NtRule(__nt), __end)); 15 } 29 => { - // Rule = Atom, ":-", Term, ("," )+ => ActionFn(42); - let __sym3 = __pop_Nt_28_22_2c_22_20_3cTerm_3e_29_2b(__symbols); - let __sym2 = __pop_NtTerm(__symbols); + // Rule = Atom, ":-", TermOrCut, ("," )+ => ActionFn(44); + let __sym3 = __pop_Nt_28_22_2c_22_20_3cTermOrCut_3e_29_2b(__symbols); + let __sym2 = __pop_NtTermOrCut(__symbols); let __sym1 = __pop_Term_22_3a_2d_22(__symbols); let __sym0 = __pop_NtAtom(__symbols); let __start = __sym0.0.clone(); let __end = __sym3.2.clone(); - let __nt = super::__action42::<>(input, __sym0, __sym1, __sym2, __sym3); + let __nt = super::__action44::<>(input, __sym0, __sym1, __sym2, __sym3); let __states_len = __states.len(); __states.truncate(__states_len - 4); __symbols.push((__start, __Symbol::NtRule(__nt), __end)); 15 } 30 => { - // Term = Atom => ActionFn(18); + // Term = Atom => ActionFn(20); let __sym0 = __pop_NtAtom(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action18::<>(input, __sym0); + let __nt = super::__action20::<>(input, __sym0); let __states_len = __states.len(); __states.truncate(__states_len - 1); __symbols.push((__start, __Symbol::NtTerm(__nt), __end)); 16 } 31 => { - // Term = Clause => ActionFn(19); + // Term = Clause => ActionFn(21); let __sym0 = __pop_NtClause(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action19::<>(input, __sym0); + let __nt = super::__action21::<>(input, __sym0); let __states_len = __states.len(); __states.truncate(__states_len - 1); __symbols.push((__start, __Symbol::NtTerm(__nt), __end)); 16 } 32 => { - // Term = List => ActionFn(20); + // Term = List => ActionFn(22); let __sym0 = __pop_NtList(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action20::<>(input, __sym0); + let __nt = super::__action22::<>(input, __sym0); let __states_len = __states.len(); __states.truncate(__states_len - 1); __symbols.push((__start, __Symbol::NtTerm(__nt), __end)); 16 } 33 => { - // Term = Var => ActionFn(21); + // Term = Var => ActionFn(23); let __sym0 = __pop_NtVar(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action21::<>(input, __sym0); + let __nt = super::__action23::<>(input, __sym0); let __states_len = __states.len(); __states.truncate(__states_len - 1); __symbols.push((__start, __Symbol::NtTerm(__nt), __end)); 16 } 34 => { - // Term = "_" => ActionFn(22); + // Term = "_" => ActionFn(24); let __sym0 = __pop_Term_22___22(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action22::<>(input, __sym0); + let __nt = super::__action24::<>(input, __sym0); let __states_len = __states.len(); __states.truncate(__states_len - 1); __symbols.push((__start, __Symbol::NtTerm(__nt), __end)); 16 } 35 => { + // TermOrCut = "!" => ActionFn(18); + let __sym0 = __pop_Term_22_21_22(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action18::<>(input, __sym0); + let __states_len = __states.len(); + __states.truncate(__states_len - 1); + __symbols.push((__start, __Symbol::NtTermOrCut(__nt), __end)); + 17 + } + 36 => { + // TermOrCut = Term => ActionFn(19); + let __sym0 = __pop_NtTerm(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action19::<>(input, __sym0); + let __states_len = __states.len(); + __states.truncate(__states_len - 1); + __symbols.push((__start, __Symbol::NtTermOrCut(__nt), __end)); + 17 + } + 37 => { // TopLevel = "?-", Term, "." => ActionFn(1); let __sym2 = __pop_Term_22_2e_22(__symbols); let __sym1 = __pop_NtTerm(__symbols); @@ -1295,9 +1335,9 @@ mod __parse__TopLevel { let __states_len = __states.len(); __states.truncate(__states_len - 3); __symbols.push((__start, __Symbol::NtTopLevel(__nt), __end)); - 17 + 18 } - 36 => { + 38 => { // TopLevel = Predicate => ActionFn(2); let __sym0 = __pop_NtPredicate(__symbols); let __start = __sym0.0.clone(); @@ -1306,9 +1346,9 @@ mod __parse__TopLevel { let __states_len = __states.len(); __states.truncate(__states_len - 1); __symbols.push((__start, __Symbol::NtTopLevel(__nt), __end)); - 17 + 18 } - 37 => { + 39 => { // TopLevel = Rule, "." => ActionFn(3); let __sym1 = __pop_Term_22_2e_22(__symbols); let __sym0 = __pop_NtRule(__symbols); @@ -1318,9 +1358,9 @@ mod __parse__TopLevel { let __states_len = __states.len(); __states.truncate(__states_len - 2); __symbols.push((__start, __Symbol::NtTopLevel(__nt), __end)); - 17 + 18 } - 38 => { + 40 => { // TopLevel = Term, "." => ActionFn(4); let __sym1 = __pop_Term_22_2e_22(__symbols); let __sym0 = __pop_NtTerm(__symbols); @@ -1330,20 +1370,20 @@ mod __parse__TopLevel { let __states_len = __states.len(); __states.truncate(__states_len - 2); __symbols.push((__start, __Symbol::NtTopLevel(__nt), __end)); - 17 + 18 } - 39 => { - // Var = r#"[A-Z][A-Za-z0-9_]*"# => ActionFn(23); + 41 => { + // Var = r#"[A-Z][A-Za-z0-9_]*"# => ActionFn(25); let __sym0 = __pop_Termr_23_22_5bA_2dZ_5d_5bA_2dZa_2dz0_2d9___5d_2a_22_23(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action23::<>(input, __sym0); + let __nt = super::__action25::<>(input, __sym0); let __states_len = __states.len(); __states.truncate(__states_len - 1); __symbols.push((__start, __Symbol::NtVar(__nt), __end)); - 18 + 19 } - 40 => { + 42 => { // __TopLevel = TopLevel => ActionFn(0); let __sym0 = __pop_NtTopLevel(__symbols); let __start = __sym0.0.clone(); @@ -1354,10 +1394,20 @@ mod __parse__TopLevel { _ => panic!("invalid action code {}", __action) }; let __state = *__states.last().unwrap() as usize; - let __next_state = __GOTO[__state * 20 + __nonterminal] - 1; + let __next_state = __GOTO[__state * 21 + __nonterminal] - 1; __states.push(__next_state); None } + fn __pop_Term_22_21_22< + 'input, + >( + __symbols: &mut ::std::vec::Vec<(usize,__Symbol<'input>,usize)> + ) -> (usize, &'input str, usize) { + match __symbols.pop().unwrap() { + (__l, __Symbol::Term_22_21_22(__v), __r) => (__l, __v, __r), + _ => panic!("symbol type mismatch") + } + } fn __pop_Term_22_28_22< 'input, >( @@ -1498,33 +1548,33 @@ mod __parse__TopLevel { _ => panic!("symbol type mismatch") } } - fn __pop_Nt_28_22_2c_22_20_3cTerm_3e_29< + fn __pop_Nt_28_22_2c_22_20_3cTermOrCut_3e_29< 'input, >( __symbols: &mut ::std::vec::Vec<(usize,__Symbol<'input>,usize)> - ) -> (usize, Term, usize) { + ) -> (usize, TermOrCut, usize) { match __symbols.pop().unwrap() { - (__l, __Symbol::Nt_28_22_2c_22_20_3cTerm_3e_29(__v), __r) => (__l, __v, __r), + (__l, __Symbol::Nt_28_22_2c_22_20_3cTermOrCut_3e_29(__v), __r) => (__l, __v, __r), _ => panic!("symbol type mismatch") } } - fn __pop_Nt_28_22_2c_22_20_3cTerm_3e_29_2a< + fn __pop_Nt_28_22_2c_22_20_3cTermOrCut_3e_29_2a< 'input, >( __symbols: &mut ::std::vec::Vec<(usize,__Symbol<'input>,usize)> - ) -> (usize, ::std::vec::Vec, usize) { + ) -> (usize, ::std::vec::Vec, usize) { match __symbols.pop().unwrap() { - (__l, __Symbol::Nt_28_22_2c_22_20_3cTerm_3e_29_2a(__v), __r) => (__l, __v, __r), + (__l, __Symbol::Nt_28_22_2c_22_20_3cTermOrCut_3e_29_2a(__v), __r) => (__l, __v, __r), _ => panic!("symbol type mismatch") } } - fn __pop_Nt_28_22_2c_22_20_3cTerm_3e_29_2b< + fn __pop_Nt_28_22_2c_22_20_3cTermOrCut_3e_29_2b< 'input, >( __symbols: &mut ::std::vec::Vec<(usize,__Symbol<'input>,usize)> - ) -> (usize, ::std::vec::Vec, usize) { + ) -> (usize, ::std::vec::Vec, usize) { match __symbols.pop().unwrap() { - (__l, __Symbol::Nt_28_22_2c_22_20_3cTerm_3e_29_2b(__v), __r) => (__l, __v, __r), + (__l, __Symbol::Nt_28_22_2c_22_20_3cTermOrCut_3e_29_2b(__v), __r) => (__l, __v, __r), _ => panic!("symbol type mismatch") } } @@ -1668,6 +1718,16 @@ mod __parse__TopLevel { _ => panic!("symbol type mismatch") } } + fn __pop_NtTermOrCut< + 'input, + >( + __symbols: &mut ::std::vec::Vec<(usize,__Symbol<'input>,usize)> + ) -> (usize, TermOrCut, usize) { + match __symbols.pop().unwrap() { + (__l, __Symbol::NtTermOrCut(__v), __r) => (__l, __v, __r), + _ => panic!("symbol type mismatch") + } + } fn __pop_NtTopLevel< 'input, >( @@ -1716,64 +1776,69 @@ mod __intern_token { 0 => { let (__index, __ch) = match __chars.next() { Some(p) => p, None => return __current_match }; match __ch as u32 { - 40 => /* '(' */ { + 33 => /* '!' */ { __current_match = Some((0, __index + 1)); __current_state = 1; continue; } - 41 => /* ')' */ { + 40 => /* '(' */ { __current_match = Some((1, __index + 1)); __current_state = 2; continue; } - 44 => /* ',' */ { + 41 => /* ')' */ { __current_match = Some((2, __index + 1)); __current_state = 3; continue; } - 46 => /* '.' */ { + 44 => /* ',' */ { __current_match = Some((3, __index + 1)); __current_state = 4; continue; } - 58 => /* ':' */ { + 46 => /* '.' */ { + __current_match = Some((4, __index + 1)); __current_state = 5; continue; } - 63 => /* '?' */ { + 58 => /* ':' */ { __current_state = 6; continue; } - 65 ... 90 => { - __current_match = Some((11, __index + __ch.len_utf8())); + 63 => /* '?' */ { __current_state = 7; continue; } - 91 => /* '[' */ { - __current_match = Some((6, __index + 1)); + 65 ... 90 => { + __current_match = Some((12, __index + __ch.len_utf8())); __current_state = 8; continue; } - 93 => /* ']' */ { - __current_match = Some((8, __index + 1)); + 91 => /* '[' */ { + __current_match = Some((7, __index + 1)); __current_state = 9; continue; } - 95 => /* '_' */ { + 93 => /* ']' */ { __current_match = Some((9, __index + 1)); __current_state = 10; continue; } - 97 ... 122 => { - __current_match = Some((12, __index + __ch.len_utf8())); + 95 => /* '_' */ { + __current_match = Some((10, __index + 1)); __current_state = 11; continue; } - 124 => /* '|' */ { - __current_match = Some((10, __index + 1)); + 97 ... 122 => { + __current_match = Some((13, __index + __ch.len_utf8())); __current_state = 12; continue; } + 124 => /* '|' */ { + __current_match = Some((11, __index + 1)); + __current_state = 13; + continue; + } _ => { return __current_match; } @@ -1814,11 +1879,6 @@ mod __intern_token { 5 => { let (__index, __ch) = match __chars.next() { Some(p) => p, None => return __current_match }; match __ch as u32 { - 45 => /* '-' */ { - __current_match = Some((4, __index + 1)); - __current_state = 14; - continue; - } _ => { return __current_match; } @@ -1840,24 +1900,37 @@ mod __intern_token { 7 => { let (__index, __ch) = match __chars.next() { Some(p) => p, None => return __current_match }; match __ch as u32 { - 48 ... 57 => { - __current_match = Some((11, __index + __ch.len_utf8())); + 45 => /* '-' */ { + __current_match = Some((6, __index + 1)); __current_state = 16; continue; } + _ => { + return __current_match; + } + } + } + 8 => { + let (__index, __ch) = match __chars.next() { Some(p) => p, None => return __current_match }; + match __ch as u32 { + 48 ... 57 => { + __current_match = Some((12, __index + __ch.len_utf8())); + __current_state = 17; + continue; + } 65 ... 90 => { - __current_match = Some((11, __index + __ch.len_utf8())); - __current_state = 16; + __current_match = Some((12, __index + __ch.len_utf8())); + __current_state = 17; continue; } 95 => /* '_' */ { - __current_match = Some((11, __index + 1)); - __current_state = 16; + __current_match = Some((12, __index + 1)); + __current_state = 17; continue; } 97 ... 122 => { - __current_match = Some((11, __index + __ch.len_utf8())); - __current_state = 16; + __current_match = Some((12, __index + __ch.len_utf8())); + __current_state = 17; continue; } _ => { @@ -1865,12 +1938,12 @@ mod __intern_token { } } } - 8 => { + 9 => { let (__index, __ch) = match __chars.next() { Some(p) => p, None => return __current_match }; match __ch as u32 { 93 => /* ']' */ { - __current_match = Some((7, __index + 1)); - __current_state = 17; + __current_match = Some((8, __index + 1)); + __current_state = 18; continue; } _ => { @@ -1878,7 +1951,7 @@ mod __intern_token { } } } - 9 => { + 10 => { let (__index, __ch) = match __chars.next() { Some(p) => p, None => return __current_match }; match __ch as u32 { _ => { @@ -1886,7 +1959,7 @@ mod __intern_token { } } } - 10 => { + 11 => { let (__index, __ch) = match __chars.next() { Some(p) => p, None => return __current_match }; match __ch as u32 { _ => { @@ -1894,27 +1967,27 @@ mod __intern_token { } } } - 11 => { + 12 => { let (__index, __ch) = match __chars.next() { Some(p) => p, None => return __current_match }; match __ch as u32 { 48 ... 57 => { - __current_match = Some((12, __index + __ch.len_utf8())); - __current_state = 18; + __current_match = Some((13, __index + __ch.len_utf8())); + __current_state = 19; continue; } 65 ... 90 => { - __current_match = Some((12, __index + __ch.len_utf8())); - __current_state = 18; + __current_match = Some((13, __index + __ch.len_utf8())); + __current_state = 19; continue; } 95 => /* '_' */ { - __current_match = Some((12, __index + 1)); - __current_state = 18; + __current_match = Some((13, __index + 1)); + __current_state = 19; continue; } 97 ... 122 => { - __current_match = Some((12, __index + __ch.len_utf8())); - __current_state = 18; + __current_match = Some((13, __index + __ch.len_utf8())); + __current_state = 19; continue; } _ => { @@ -1922,7 +1995,7 @@ mod __intern_token { } } } - 12 => { + 13 => { let (__index, __ch) = match __chars.next() { Some(p) => p, None => return __current_match }; match __ch as u32 { _ => { @@ -1930,7 +2003,7 @@ mod __intern_token { } } } - 13 => { + 14 => { let (__index, __ch) = match __chars.next() { Some(p) => p, None => return __current_match }; match __ch as u32 { _ => { @@ -1938,7 +2011,7 @@ mod __intern_token { } } } - 14 => { + 15 => { let (__index, __ch) = match __chars.next() { Some(p) => p, None => return __current_match }; match __ch as u32 { _ => { @@ -1946,7 +2019,7 @@ mod __intern_token { } } } - 15 => { + 16 => { let (__index, __ch) = match __chars.next() { Some(p) => p, None => return __current_match }; match __ch as u32 { _ => { @@ -1954,27 +2027,27 @@ mod __intern_token { } } } - 16 => { + 17 => { let (__index, __ch) = match __chars.next() { Some(p) => p, None => return __current_match }; match __ch as u32 { 48 ... 57 => { - __current_match = Some((11, __index + __ch.len_utf8())); - __current_state = 16; + __current_match = Some((12, __index + __ch.len_utf8())); + __current_state = 17; continue; } 65 ... 90 => { - __current_match = Some((11, __index + __ch.len_utf8())); - __current_state = 16; + __current_match = Some((12, __index + __ch.len_utf8())); + __current_state = 17; continue; } 95 => /* '_' */ { - __current_match = Some((11, __index + 1)); - __current_state = 16; + __current_match = Some((12, __index + 1)); + __current_state = 17; continue; } 97 ... 122 => { - __current_match = Some((11, __index + __ch.len_utf8())); - __current_state = 16; + __current_match = Some((12, __index + __ch.len_utf8())); + __current_state = 17; continue; } _ => { @@ -1982,7 +2055,7 @@ mod __intern_token { } } } - 17 => { + 18 => { let (__index, __ch) = match __chars.next() { Some(p) => p, None => return __current_match }; match __ch as u32 { _ => { @@ -1990,27 +2063,27 @@ mod __intern_token { } } } - 18 => { + 19 => { let (__index, __ch) = match __chars.next() { Some(p) => p, None => return __current_match }; match __ch as u32 { 48 ... 57 => { - __current_match = Some((12, __index + __ch.len_utf8())); - __current_state = 18; + __current_match = Some((13, __index + __ch.len_utf8())); + __current_state = 19; continue; } 65 ... 90 => { - __current_match = Some((12, __index + __ch.len_utf8())); - __current_state = 18; + __current_match = Some((13, __index + __ch.len_utf8())); + __current_state = 19; continue; } 95 => /* '_' */ { - __current_match = Some((12, __index + 1)); - __current_state = 18; + __current_match = Some((13, __index + 1)); + __current_state = 19; continue; } 97 ... 122 => { - __current_match = Some((12, __index + __ch.len_utf8())); - __current_state = 18; + __current_match = Some((13, __index + __ch.len_utf8())); + __current_state = 19; continue; } _ => { @@ -2272,8 +2345,8 @@ pub fn __action16< input: &'input str, (_, c, _): (usize, Term, usize), (_, _, _): (usize, &'input str, usize), - (_, h, _): (usize, Term, usize), - (_, cs, _): (usize, ::std::vec::Vec, usize), + (_, h, _): (usize, TermOrCut, usize), + (_, cs, _): (usize, ::std::vec::Vec, usize), ) -> Rule { Rule { head: (c, h), clauses: cs } @@ -2286,17 +2359,40 @@ pub fn __action17< input: &'input str, (_, a, _): (usize, Atom, usize), (_, _, _): (usize, &'input str, usize), - (_, h, _): (usize, Term, usize), - (_, cs, _): (usize, ::std::vec::Vec, usize), + (_, h, _): (usize, TermOrCut, usize), + (_, cs, _): (usize, ::std::vec::Vec, usize), ) -> Rule { - Rule { head: (Term::Constant(Cell::default(), Constant::Atom(a)), h), + Rule { head: (Term::Constant(Cell::default(), Constant::Atom(a)), + h), clauses: cs } } #[allow(unused_variables)] pub fn __action18< 'input, +>( + input: &'input str, + (_, __0, _): (usize, &'input str, usize), +) -> TermOrCut +{ + TermOrCut::Cut +} + +#[allow(unused_variables)] +pub fn __action19< + 'input, +>( + input: &'input str, + (_, __0, _): (usize, Term, usize), +) -> TermOrCut +{ + TermOrCut::Term(__0) +} + +#[allow(unused_variables)] +pub fn __action20< + 'input, >( input: &'input str, (_, __0, _): (usize, Atom, usize), @@ -2306,7 +2402,7 @@ pub fn __action18< } #[allow(unused_variables)] -pub fn __action19< +pub fn __action21< 'input, >( input: &'input str, @@ -2317,7 +2413,7 @@ pub fn __action19< } #[allow(unused_variables)] -pub fn __action20< +pub fn __action22< 'input, >( input: &'input str, @@ -2328,7 +2424,7 @@ pub fn __action20< } #[allow(unused_variables)] -pub fn __action21< +pub fn __action23< 'input, >( input: &'input str, @@ -2339,7 +2435,7 @@ pub fn __action21< } #[allow(unused_variables)] -pub fn __action22< +pub fn __action24< 'input, >( input: &'input str, @@ -2350,7 +2446,7 @@ pub fn __action22< } #[allow(unused_variables)] -pub fn __action23< +pub fn __action25< 'input, >( input: &'input str, @@ -2361,42 +2457,42 @@ pub fn __action23< } #[allow(unused_variables)] -pub fn __action24< +pub fn __action26< 'input, >( input: &'input str, __lookbehind: &usize, __lookahead: &usize, -) -> ::std::vec::Vec +) -> ::std::vec::Vec { vec![] } #[allow(unused_variables)] -pub fn __action25< +pub fn __action27< 'input, >( input: &'input str, - (_, v, _): (usize, ::std::vec::Vec, usize), -) -> ::std::vec::Vec + (_, v, _): (usize, ::std::vec::Vec, usize), +) -> ::std::vec::Vec { v } #[allow(unused_variables)] -pub fn __action26< +pub fn __action28< 'input, >( input: &'input str, (_, _, _): (usize, &'input str, usize), - (_, __0, _): (usize, Term, usize), -) -> Term + (_, __0, _): (usize, TermOrCut, usize), +) -> TermOrCut { (__0) } #[allow(unused_variables)] -pub fn __action27< +pub fn __action29< 'input, >( input: &'input str, @@ -2407,7 +2503,7 @@ pub fn __action27< } #[allow(unused_variables)] -pub fn __action28< +pub fn __action30< 'input, >( input: &'input str, @@ -2419,7 +2515,7 @@ pub fn __action28< } #[allow(unused_variables)] -pub fn __action29< +pub fn __action31< 'input, >( input: &'input str, @@ -2430,7 +2526,7 @@ pub fn __action29< } #[allow(unused_variables)] -pub fn __action30< +pub fn __action32< 'input, >( input: &'input str, @@ -2442,7 +2538,7 @@ pub fn __action30< } #[allow(unused_variables)] -pub fn __action31< +pub fn __action33< 'input, >( input: &'input str, @@ -2453,7 +2549,7 @@ pub fn __action31< } #[allow(unused_variables)] -pub fn __action32< +pub fn __action34< 'input, >( input: &'input str, @@ -2465,7 +2561,7 @@ pub fn __action32< } #[allow(unused_variables)] -pub fn __action33< +pub fn __action35< 'input, >( input: &'input str, @@ -2476,7 +2572,7 @@ pub fn __action33< } #[allow(unused_variables)] -pub fn __action34< +pub fn __action36< 'input, >( input: &'input str, @@ -2488,70 +2584,70 @@ pub fn __action34< } #[allow(unused_variables)] -pub fn __action35< +pub fn __action37< 'input, >( input: &'input str, - (_, __0, _): (usize, Term, usize), -) -> ::std::vec::Vec + (_, __0, _): (usize, TermOrCut, usize), +) -> ::std::vec::Vec { vec![__0] } #[allow(unused_variables)] -pub fn __action36< +pub fn __action38< 'input, >( input: &'input str, - (_, v, _): (usize, ::std::vec::Vec, usize), - (_, e, _): (usize, Term, usize), -) -> ::std::vec::Vec + (_, v, _): (usize, ::std::vec::Vec, usize), + (_, e, _): (usize, TermOrCut, usize), +) -> ::std::vec::Vec { { let mut v = v; v.push(e); v } } #[allow(unused_variables)] -pub fn __action37< +pub fn __action39< 'input, >( input: &'input str, __0: (usize, &'input str, usize), - __1: (usize, Term, usize), -) -> ::std::vec::Vec + __1: (usize, TermOrCut, usize), +) -> ::std::vec::Vec { let __start0 = __0.0.clone(); let __end0 = __1.2.clone(); - let __temp0 = __action26( + let __temp0 = __action28( input, __0, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action35( + __action37( input, __temp0, ) } #[allow(unused_variables)] -pub fn __action38< +pub fn __action40< 'input, >( input: &'input str, - __0: (usize, ::std::vec::Vec, usize), + __0: (usize, ::std::vec::Vec, usize), __1: (usize, &'input str, usize), - __2: (usize, Term, usize), -) -> ::std::vec::Vec + __2: (usize, TermOrCut, usize), +) -> ::std::vec::Vec { let __start0 = __1.0.clone(); let __end0 = __2.2.clone(); - let __temp0 = __action26( + let __temp0 = __action28( input, __1, __2, ); let __temp0 = (__start0, __temp0, __end0); - __action36( + __action38( input, __0, __temp0, @@ -2559,18 +2655,18 @@ pub fn __action38< } #[allow(unused_variables)] -pub fn __action39< +pub fn __action41< 'input, >( input: &'input str, __0: (usize, Term, usize), __1: (usize, &'input str, usize), - __2: (usize, Term, usize), + __2: (usize, TermOrCut, usize), ) -> Rule { let __start0 = __2.2.clone(); let __end0 = __2.2.clone(); - let __temp0 = __action24( + let __temp0 = __action26( input, &__start0, &__end0, @@ -2586,19 +2682,19 @@ pub fn __action39< } #[allow(unused_variables)] -pub fn __action40< +pub fn __action42< 'input, >( input: &'input str, __0: (usize, Term, usize), __1: (usize, &'input str, usize), - __2: (usize, Term, usize), - __3: (usize, ::std::vec::Vec, usize), + __2: (usize, TermOrCut, usize), + __3: (usize, ::std::vec::Vec, usize), ) -> Rule { let __start0 = __3.0.clone(); let __end0 = __3.2.clone(); - let __temp0 = __action25( + let __temp0 = __action27( input, __3, ); @@ -2613,18 +2709,18 @@ pub fn __action40< } #[allow(unused_variables)] -pub fn __action41< +pub fn __action43< 'input, >( input: &'input str, __0: (usize, Atom, usize), __1: (usize, &'input str, usize), - __2: (usize, Term, usize), + __2: (usize, TermOrCut, usize), ) -> Rule { let __start0 = __2.2.clone(); let __end0 = __2.2.clone(); - let __temp0 = __action24( + let __temp0 = __action26( input, &__start0, &__end0, @@ -2640,19 +2736,19 @@ pub fn __action41< } #[allow(unused_variables)] -pub fn __action42< +pub fn __action44< 'input, >( input: &'input str, __0: (usize, Atom, usize), __1: (usize, &'input str, usize), - __2: (usize, Term, usize), - __3: (usize, ::std::vec::Vec, usize), + __2: (usize, TermOrCut, usize), + __3: (usize, ::std::vec::Vec, usize), ) -> Rule { let __start0 = __3.0.clone(); let __end0 = __3.2.clone(); - let __temp0 = __action25( + let __temp0 = __action27( input, __3, ); @@ -2667,7 +2763,7 @@ pub fn __action42< } #[allow(unused_variables)] -pub fn __action43< +pub fn __action45< 'input, >( input: &'input str, @@ -2677,20 +2773,20 @@ pub fn __action43< { let __start0 = __0.0.clone(); let __end0 = __1.2.clone(); - let __temp0 = __action32( + let __temp0 = __action34( input, __0, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action33( + __action35( input, __temp0, ) } #[allow(unused_variables)] -pub fn __action44< +pub fn __action46< 'input, >( input: &'input str, @@ -2701,13 +2797,13 @@ pub fn __action44< { let __start0 = __1.0.clone(); let __end0 = __2.2.clone(); - let __temp0 = __action32( + let __temp0 = __action34( input, __1, __2, ); let __temp0 = (__start0, __temp0, __end0); - __action34( + __action36( input, __0, __temp0, @@ -2715,7 +2811,7 @@ pub fn __action44< } #[allow(unused_variables)] -pub fn __action45< +pub fn __action47< 'input, >( input: &'input str, @@ -2727,7 +2823,7 @@ pub fn __action45< { let __start0 = __1.2.clone(); let __end0 = __2.0.clone(); - let __temp0 = __action30( + let __temp0 = __action32( input, &__start0, &__end0, @@ -2744,7 +2840,7 @@ pub fn __action45< } #[allow(unused_variables)] -pub fn __action46< +pub fn __action48< 'input, >( input: &'input str, @@ -2757,7 +2853,7 @@ pub fn __action46< { let __start0 = __2.0.clone(); let __end0 = __2.2.clone(); - let __temp0 = __action31( + let __temp0 = __action33( input, __2, ); @@ -2773,7 +2869,7 @@ pub fn __action46< } #[allow(unused_variables)] -pub fn __action47< +pub fn __action49< 'input, >( input: &'input str, @@ -2782,19 +2878,19 @@ pub fn __action47< { let __start0 = __0.0.clone(); let __end0 = __0.2.clone(); - let __temp0 = __action29( + let __temp0 = __action31( input, __0, ); let __temp0 = (__start0, __temp0, __end0); - __action27( + __action29( input, __temp0, ) } #[allow(unused_variables)] -pub fn __action48< +pub fn __action50< 'input, >( input: &'input str, @@ -2804,12 +2900,12 @@ pub fn __action48< { let __start0 = __1.0.clone(); let __end0 = __1.2.clone(); - let __temp0 = __action29( + let __temp0 = __action31( input, __1, ); let __temp0 = (__start0, __temp0, __end0); - __action28( + __action30( input, __0, __temp0, -- 2.54.0