use std::cell::Cell; use l1::ast::{Atom, Reg, Term, TopLevel, Var}; extern crate lalrpop_util as __lalrpop_util; mod __parse__TopLevel { #![allow(non_snake_case, non_camel_case_types, unused_mut, unused_variables, unused_imports)] use std::cell::Cell; use l1::ast::{Atom, Reg, Term, TopLevel, Var}; extern crate lalrpop_util as __lalrpop_util; #[allow(dead_code)] pub enum __Symbol<'input> { Term_22_28_22(&'input str), Term_22_29_22(&'input str), Term_22_2c_22(&'input str), Term_22_2e_22(&'input str), Term_22_3f_2d_22(&'input str), Termr_23_22_5bA_2dZ_5d_5ba_2dz0_2d9___5d_2a_22_23(&'input str), Termr_23_22_5ba_2dz_5d_5ba_2dz0_2d9___5d_2a_22_23(&'input str), 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>), NtAtom(Atom), NtBoxedTerm(Box), NtTerm(Term), NtTopLevel(TopLevel), NtVar(Var), Nt____TopLevel(TopLevel), } const __ACTION: &'static [i32] = &[ // State 0 0, // on "(", error 0, // on ")", error 0, // on ",", error 0, // on ".", error 6, // on "?-", goto 5 7, // on r#"[A-Z][a-z0-9_]*"#, goto 6 8, // on r#"[a-z][a-z0-9_]*"#, goto 7 // State 1 9, // on "(", goto 8 0, // on ")", error 0, // on ",", error -10, // on ".", reduce `Term = Atom => ActionFn(7);` 0, // on "?-", error 0, // on r#"[A-Z][a-z0-9_]*"#, error 0, // on r#"[a-z][a-z0-9_]*"#, error // State 2 0, // on "(", error 0, // on ")", error 0, // on ",", error 10, // on ".", goto 9 0, // on "?-", error 0, // on r#"[A-Z][a-z0-9_]*"#, error 0, // on r#"[a-z][a-z0-9_]*"#, error // State 3 0, // on "(", error 0, // on ")", error 0, // on ",", error 0, // on ".", error 0, // on "?-", error 0, // on r#"[A-Z][a-z0-9_]*"#, error 0, // on r#"[a-z][a-z0-9_]*"#, error // State 4 0, // on "(", error 0, // on ")", error 0, // on ",", error -11, // on ".", reduce `Term = Var => ActionFn(8);` 0, // on "?-", error 0, // on r#"[A-Z][a-z0-9_]*"#, error 0, // on r#"[a-z][a-z0-9_]*"#, error // State 5 0, // on "(", error 0, // on ")", error 0, // on ",", error 0, // on ".", error 0, // on "?-", error 7, // on r#"[A-Z][a-z0-9_]*"#, goto 6 8, // on r#"[a-z][a-z0-9_]*"#, goto 7 // State 6 0, // on "(", error 0, // on ")", error 0, // on ",", error -14, // on ".", reduce `Var = r#"[A-Z][a-z0-9_]*"# => ActionFn(4);` 0, // on "?-", error 0, // on r#"[A-Z][a-z0-9_]*"#, error 0, // on r#"[a-z][a-z0-9_]*"#, error // State 7 -6, // on "(", reduce `Atom = r#"[a-z][a-z0-9_]*"# => ActionFn(3);` 0, // on ")", error 0, // on ",", error -6, // on ".", reduce `Atom = r#"[a-z][a-z0-9_]*"# => ActionFn(3);` 0, // on "?-", error 0, // on r#"[A-Z][a-z0-9_]*"#, error 0, // on r#"[a-z][a-z0-9_]*"#, error // State 8 0, // on "(", error 0, // on ")", error 0, // on ",", error 0, // on ".", error 0, // on "?-", error 17, // on r#"[A-Z][a-z0-9_]*"#, goto 16 18, // on r#"[a-z][a-z0-9_]*"#, goto 17 // State 9 0, // on "(", error 0, // on ")", error 0, // on ",", error 0, // on ".", error 0, // on "?-", error 0, // on r#"[A-Z][a-z0-9_]*"#, error 0, // on r#"[a-z][a-z0-9_]*"#, error // State 10 0, // on "(", error 0, // on ")", error 0, // on ",", error 19, // on ".", goto 18 0, // on "?-", error 0, // on r#"[A-Z][a-z0-9_]*"#, error 0, // on r#"[a-z][a-z0-9_]*"#, error // State 11 0, // on "(", error 0, // on ")", error 0, // on ",", error 0, // on ".", error 0, // on "?-", error 17, // on r#"[A-Z][a-z0-9_]*"#, goto 16 18, // on r#"[a-z][a-z0-9_]*"#, goto 17 // State 12 21, // on "(", goto 20 -10, // on ")", reduce `Term = Atom => ActionFn(7);` -10, // on ",", reduce `Term = Atom => ActionFn(7);` 0, // on ".", error 0, // on "?-", error 0, // on r#"[A-Z][a-z0-9_]*"#, error 0, // on r#"[a-z][a-z0-9_]*"#, error // State 13 0, // on "(", error 22, // on ")", goto 21 23, // on ",", goto 22 0, // on ".", error 0, // on "?-", error 0, // on r#"[A-Z][a-z0-9_]*"#, error 0, // on r#"[a-z][a-z0-9_]*"#, error // State 14 0, // on "(", error -7, // on ")", reduce `BoxedTerm = Term => ActionFn(5);` -7, // on ",", reduce `BoxedTerm = Term => ActionFn(5);` 0, // on ".", error 0, // on "?-", error 0, // on r#"[A-Z][a-z0-9_]*"#, error 0, // on r#"[a-z][a-z0-9_]*"#, error // State 15 0, // on "(", error -11, // on ")", reduce `Term = Var => ActionFn(8);` -11, // on ",", reduce `Term = Var => ActionFn(8);` 0, // on ".", error 0, // on "?-", error 0, // on r#"[A-Z][a-z0-9_]*"#, error 0, // on r#"[a-z][a-z0-9_]*"#, error // State 16 0, // on "(", error -14, // on ")", reduce `Var = r#"[A-Z][a-z0-9_]*"# => ActionFn(4);` -14, // on ",", reduce `Var = r#"[A-Z][a-z0-9_]*"# => ActionFn(4);` 0, // on ".", error 0, // on "?-", error 0, // on r#"[A-Z][a-z0-9_]*"#, error 0, // on r#"[a-z][a-z0-9_]*"#, error // State 17 -6, // on "(", reduce `Atom = r#"[a-z][a-z0-9_]*"# => ActionFn(3);` -6, // on ")", reduce `Atom = r#"[a-z][a-z0-9_]*"# => ActionFn(3);` -6, // on ",", reduce `Atom = r#"[a-z][a-z0-9_]*"# => ActionFn(3);` 0, // on ".", error 0, // on "?-", error 0, // on r#"[A-Z][a-z0-9_]*"#, error 0, // on r#"[a-z][a-z0-9_]*"#, error // State 18 0, // on "(", error 0, // on ")", error 0, // on ",", error 0, // on ".", error 0, // on "?-", error 0, // on r#"[A-Z][a-z0-9_]*"#, error 0, // on r#"[a-z][a-z0-9_]*"#, error // State 19 0, // on "(", error 24, // on ")", goto 23 25, // on ",", goto 24 0, // on ".", error 0, // on "?-", error 0, // on r#"[A-Z][a-z0-9_]*"#, error 0, // on r#"[a-z][a-z0-9_]*"#, error // State 20 0, // on "(", error 0, // on ")", error 0, // on ",", error 0, // on ".", error 0, // on "?-", error 17, // on r#"[A-Z][a-z0-9_]*"#, goto 16 18, // on r#"[a-z][a-z0-9_]*"#, goto 17 // State 21 0, // on "(", error 0, // on ")", error 0, // on ",", error -8, // on ".", reduce `Term = Atom, "(", BoxedTerm, ")" => ActionFn(16);` 0, // on "?-", error 0, // on r#"[A-Z][a-z0-9_]*"#, error 0, // on r#"[a-z][a-z0-9_]*"#, error // State 22 0, // on "(", error 0, // on ")", error 0, // on ",", error 0, // on ".", error 0, // on "?-", error -4, // on r#"[A-Z][a-z0-9_]*"#, reduce `( ",")+ = BoxedTerm, "," => ActionFn(14);` -4, // on r#"[a-z][a-z0-9_]*"#, reduce `( ",")+ = BoxedTerm, "," => ActionFn(14);` // State 23 0, // on "(", error 0, // on ")", error 0, // on ",", error -9, // on ".", reduce `Term = Atom, "(", ( ",")+, BoxedTerm, ")" => ActionFn(17);` 0, // on "?-", error 0, // on r#"[A-Z][a-z0-9_]*"#, error 0, // on r#"[a-z][a-z0-9_]*"#, error // State 24 0, // on "(", error 0, // on ")", error 0, // on ",", error 0, // on ".", error 0, // on "?-", error -5, // on r#"[A-Z][a-z0-9_]*"#, reduce `( ",")+ = ( ",")+, BoxedTerm, "," => ActionFn(15);` -5, // on r#"[a-z][a-z0-9_]*"#, reduce `( ",")+ = ( ",")+, BoxedTerm, "," => ActionFn(15);` // State 25 0, // on "(", error 0, // on ")", error 0, // on ",", error 0, // on ".", error 0, // on "?-", error 17, // on r#"[A-Z][a-z0-9_]*"#, goto 16 18, // on r#"[a-z][a-z0-9_]*"#, goto 17 // State 26 0, // on "(", error 29, // on ")", goto 28 23, // on ",", goto 22 0, // on ".", error 0, // on "?-", error 0, // on r#"[A-Z][a-z0-9_]*"#, error 0, // on r#"[a-z][a-z0-9_]*"#, error // State 27 0, // on "(", error 30, // on ")", goto 29 25, // on ",", goto 24 0, // on ".", error 0, // on "?-", error 0, // on r#"[A-Z][a-z0-9_]*"#, error 0, // on r#"[a-z][a-z0-9_]*"#, error // State 28 0, // on "(", error -8, // on ")", reduce `Term = Atom, "(", BoxedTerm, ")" => ActionFn(16);` -8, // on ",", reduce `Term = Atom, "(", BoxedTerm, ")" => ActionFn(16);` 0, // on ".", error 0, // on "?-", error 0, // on r#"[A-Z][a-z0-9_]*"#, error 0, // on r#"[a-z][a-z0-9_]*"#, error // State 29 0, // on "(", error -9, // on ")", reduce `Term = Atom, "(", ( ",")+, BoxedTerm, ")" => ActionFn(17);` -9, // on ",", reduce `Term = Atom, "(", ( ",")+, BoxedTerm, ")" => ActionFn(17);` 0, // on ".", error 0, // on "?-", error 0, // on r#"[A-Z][a-z0-9_]*"#, error 0, // on r#"[a-z][a-z0-9_]*"#, error ]; const __EOF_ACTION: &'static [i32] = &[ 0, // on EOF, error 0, // on EOF, error 0, // on EOF, error -15, // on EOF, reduce `__TopLevel = TopLevel => ActionFn(0);` 0, // on EOF, error 0, // on EOF, error 0, // on EOF, error 0, // on EOF, error 0, // on EOF, error -13, // on EOF, reduce `TopLevel = Term, "." => ActionFn(2);` 0, // on EOF, error 0, // on EOF, error 0, // on EOF, error 0, // on EOF, error 0, // on EOF, error 0, // on EOF, error 0, // on EOF, error 0, // on EOF, error -12, // on EOF, reduce `TopLevel = "?-", Term, "." => ActionFn(1);` 0, // on EOF, error 0, // on EOF, error 0, // on EOF, error 0, // on EOF, error 0, // on EOF, error 0, // on EOF, error 0, // on EOF, error 0, // on EOF, error 0, // on EOF, error 0, // on EOF, error 0, // on EOF, error ]; const __GOTO: &'static [i32] = &[ // State 0 0, // on ( ","), error 0, // on ( ",")*, error 0, // on ( ",")+, error 2, // on Atom, goto 1 0, // on BoxedTerm, error 3, // on Term, goto 2 4, // on TopLevel, goto 3 5, // on Var, goto 4 0, // on __TopLevel, error // State 1 0, // on ( ","), error 0, // on ( ",")*, error 0, // on ( ",")+, error 0, // on Atom, error 0, // on BoxedTerm, error 0, // on Term, error 0, // on TopLevel, error 0, // on Var, error 0, // on __TopLevel, error // State 2 0, // on ( ","), error 0, // on ( ",")*, error 0, // on ( ",")+, error 0, // on Atom, error 0, // on BoxedTerm, error 0, // on Term, error 0, // on TopLevel, error 0, // on Var, error 0, // on __TopLevel, error // State 3 0, // on ( ","), error 0, // on ( ",")*, error 0, // on ( ",")+, error 0, // on Atom, error 0, // on BoxedTerm, error 0, // on Term, error 0, // on TopLevel, error 0, // on Var, error 0, // on __TopLevel, error // State 4 0, // on ( ","), error 0, // on ( ",")*, error 0, // on ( ",")+, error 0, // on Atom, error 0, // on BoxedTerm, error 0, // on Term, error 0, // on TopLevel, error 0, // on Var, error 0, // on __TopLevel, error // State 5 0, // on ( ","), error 0, // on ( ",")*, error 0, // on ( ",")+, error 2, // on Atom, goto 1 0, // on BoxedTerm, error 11, // on Term, goto 10 0, // on TopLevel, error 5, // on Var, goto 4 0, // on __TopLevel, error // State 6 0, // on ( ","), error 0, // on ( ",")*, error 0, // on ( ",")+, error 0, // on Atom, error 0, // on BoxedTerm, error 0, // on Term, error 0, // on TopLevel, error 0, // on Var, error 0, // on __TopLevel, error // State 7 0, // on ( ","), error 0, // on ( ",")*, error 0, // on ( ",")+, error 0, // on Atom, error 0, // on BoxedTerm, error 0, // on Term, error 0, // on TopLevel, error 0, // on Var, error 0, // on __TopLevel, error // State 8 0, // on ( ","), error 0, // on ( ",")*, error 12, // on ( ",")+, goto 11 13, // on Atom, goto 12 14, // on BoxedTerm, goto 13 15, // on Term, goto 14 0, // on TopLevel, error 16, // on Var, goto 15 0, // on __TopLevel, error // State 9 0, // on ( ","), error 0, // on ( ",")*, error 0, // on ( ",")+, error 0, // on Atom, error 0, // on BoxedTerm, error 0, // on Term, error 0, // on TopLevel, error 0, // on Var, error 0, // on __TopLevel, error // State 10 0, // on ( ","), error 0, // on ( ",")*, error 0, // on ( ",")+, error 0, // on Atom, error 0, // on BoxedTerm, error 0, // on Term, error 0, // on TopLevel, error 0, // on Var, error 0, // on __TopLevel, error // State 11 0, // on ( ","), error 0, // on ( ",")*, error 0, // on ( ",")+, error 13, // on Atom, goto 12 20, // on BoxedTerm, goto 19 15, // on Term, goto 14 0, // on TopLevel, error 16, // on Var, goto 15 0, // on __TopLevel, error // State 12 0, // on ( ","), error 0, // on ( ",")*, error 0, // on ( ",")+, error 0, // on Atom, error 0, // on BoxedTerm, error 0, // on Term, error 0, // on TopLevel, error 0, // on Var, error 0, // on __TopLevel, error // State 13 0, // on ( ","), error 0, // on ( ",")*, error 0, // on ( ",")+, error 0, // on Atom, error 0, // on BoxedTerm, error 0, // on Term, error 0, // on TopLevel, error 0, // on Var, error 0, // on __TopLevel, error // State 14 0, // on ( ","), error 0, // on ( ",")*, error 0, // on ( ",")+, error 0, // on Atom, error 0, // on BoxedTerm, error 0, // on Term, error 0, // on TopLevel, error 0, // on Var, error 0, // on __TopLevel, error // State 15 0, // on ( ","), error 0, // on ( ",")*, error 0, // on ( ",")+, error 0, // on Atom, error 0, // on BoxedTerm, error 0, // on Term, error 0, // on TopLevel, error 0, // on Var, error 0, // on __TopLevel, error // State 16 0, // on ( ","), error 0, // on ( ",")*, error 0, // on ( ",")+, error 0, // on Atom, error 0, // on BoxedTerm, error 0, // on Term, error 0, // on TopLevel, error 0, // on Var, error 0, // on __TopLevel, error // State 17 0, // on ( ","), error 0, // on ( ",")*, error 0, // on ( ",")+, error 0, // on Atom, error 0, // on BoxedTerm, error 0, // on Term, error 0, // on TopLevel, error 0, // on Var, error 0, // on __TopLevel, error // State 18 0, // on ( ","), error 0, // on ( ",")*, error 0, // on ( ",")+, error 0, // on Atom, error 0, // on BoxedTerm, error 0, // on Term, error 0, // on TopLevel, error 0, // on Var, error 0, // on __TopLevel, error // State 19 0, // on ( ","), error 0, // on ( ",")*, error 0, // on ( ",")+, error 0, // on Atom, error 0, // on BoxedTerm, error 0, // on Term, error 0, // on TopLevel, error 0, // on Var, error 0, // on __TopLevel, error // State 20 0, // on ( ","), error 0, // on ( ",")*, error 26, // on ( ",")+, goto 25 13, // on Atom, goto 12 27, // on BoxedTerm, goto 26 15, // on Term, goto 14 0, // on TopLevel, error 16, // on Var, goto 15 0, // on __TopLevel, error // State 21 0, // on ( ","), error 0, // on ( ",")*, error 0, // on ( ",")+, error 0, // on Atom, error 0, // on BoxedTerm, error 0, // on Term, error 0, // on TopLevel, error 0, // on Var, error 0, // on __TopLevel, error // State 22 0, // on ( ","), error 0, // on ( ",")*, error 0, // on ( ",")+, error 0, // on Atom, error 0, // on BoxedTerm, error 0, // on Term, error 0, // on TopLevel, error 0, // on Var, error 0, // on __TopLevel, error // State 23 0, // on ( ","), error 0, // on ( ",")*, error 0, // on ( ",")+, error 0, // on Atom, error 0, // on BoxedTerm, error 0, // on Term, error 0, // on TopLevel, error 0, // on Var, error 0, // on __TopLevel, error // State 24 0, // on ( ","), error 0, // on ( ",")*, error 0, // on ( ",")+, error 0, // on Atom, error 0, // on BoxedTerm, error 0, // on Term, error 0, // on TopLevel, error 0, // on Var, error 0, // on __TopLevel, error // State 25 0, // on ( ","), error 0, // on ( ",")*, error 0, // on ( ",")+, error 13, // on Atom, goto 12 28, // on BoxedTerm, goto 27 15, // on Term, goto 14 0, // on TopLevel, error 16, // on Var, goto 15 0, // on __TopLevel, error // State 26 0, // on ( ","), error 0, // on ( ",")*, error 0, // on ( ",")+, error 0, // on Atom, error 0, // on BoxedTerm, error 0, // on Term, error 0, // on TopLevel, error 0, // on Var, error 0, // on __TopLevel, error // State 27 0, // on ( ","), error 0, // on ( ",")*, error 0, // on ( ",")+, error 0, // on Atom, error 0, // on BoxedTerm, error 0, // on Term, error 0, // on TopLevel, error 0, // on Var, error 0, // on __TopLevel, error // State 28 0, // on ( ","), error 0, // on ( ",")*, error 0, // on ( ",")+, error 0, // on Atom, error 0, // on BoxedTerm, error 0, // on Term, error 0, // on TopLevel, error 0, // on Var, error 0, // on __TopLevel, error // State 29 0, // on ( ","), error 0, // on ( ",")*, error 0, // on ( ",")+, error 0, // on Atom, error 0, // on BoxedTerm, error 0, // on Term, error 0, // on TopLevel, error 0, // on Var, error 0, // on __TopLevel, error ]; pub fn parse_TopLevel< 'input, >( input: &'input str, ) -> Result> { let mut __tokens = super::__intern_token::__Matcher::new(input); let mut __states = vec![0_i32]; let mut __symbols = vec![]; '__shift: loop { let __lookahead = match __tokens.next() { Some(Ok(v)) => v, None => break '__shift, Some(Err(e)) => return Err(e), }; let __integer = match __lookahead { (_, (0, _), _) if true => 0, (_, (1, _), _) if true => 1, (_, (2, _), _) if true => 2, (_, (3, _), _) if true => 3, (_, (4, _), _) if true => 4, (_, (5, _), _) if true => 5, (_, (6, _), _) if true => 6, _ => { return Err(__lalrpop_util::ParseError::UnrecognizedToken { token: Some(__lookahead), expected: vec![], }); } }; loop { let __state = *__states.last().unwrap() as usize; let __action = __ACTION[__state * 7 + __integer]; if __action > 0 { let __symbol = match __integer { 0 => match __lookahead.1 { (0, __tok0) => __Symbol::Term_22_28_22(__tok0), _ => unreachable!(), }, 1 => match __lookahead.1 { (1, __tok0) => __Symbol::Term_22_29_22(__tok0), _ => unreachable!(), }, 2 => match __lookahead.1 { (2, __tok0) => __Symbol::Term_22_2c_22(__tok0), _ => unreachable!(), }, 3 => match __lookahead.1 { (3, __tok0) => __Symbol::Term_22_2e_22(__tok0), _ => unreachable!(), }, 4 => match __lookahead.1 { (4, __tok0) => __Symbol::Term_22_3f_2d_22(__tok0), _ => unreachable!(), }, 5 => match __lookahead.1 { (5, __tok0) => __Symbol::Termr_23_22_5bA_2dZ_5d_5ba_2dz0_2d9___5d_2a_22_23(__tok0), _ => unreachable!(), }, 6 => match __lookahead.1 { (6, __tok0) => __Symbol::Termr_23_22_5ba_2dz_5d_5ba_2dz0_2d9___5d_2a_22_23(__tok0), _ => unreachable!(), }, _ => unreachable!(), }; __states.push(__action - 1); __symbols.push((__lookahead.0, __symbol, __lookahead.2)); continue '__shift; } else if __action < 0 { if let Some(r) = __reduce(input, __action, Some(&__lookahead.0), &mut __states, &mut __symbols) { return r; } } else { return Err(__lalrpop_util::ParseError::UnrecognizedToken { token: Some(__lookahead), expected: vec![], }); } } } loop { let __state = *__states.last().unwrap() as usize; let __action = __EOF_ACTION[__state]; if __action < 0 { if let Some(r) = __reduce(input, __action, None, &mut __states, &mut __symbols) { return r; } } else { return Err(__lalrpop_util::ParseError::UnrecognizedToken { token: None, expected: vec![], }); } } } pub fn __reduce< 'input, >( input: &'input str, __action: i32, __lookahead_start: Option<&usize>, __states: &mut ::std::vec::Vec, __symbols: &mut ::std::vec::Vec<(usize,__Symbol<'input>,usize)>, ) -> Option>> { let __nonterminal = match -__action { 1 => { // ( ",") = BoxedTerm, "," => ActionFn(11); 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::__action11(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)); 0 } 2 => { // ( ",")* = => ActionFn(9); 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::__action9(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)); 1 } 3 => { // ( ",")* = ( ",")+ => ActionFn(10); 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::__action10(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)); 1 } 4 => { // ( ",")+ = BoxedTerm, "," => ActionFn(14); 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::__action14(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)); 2 } 5 => { // ( ",")+ = ( ",")+, BoxedTerm, "," => ActionFn(15); 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::__action15(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)); 2 } 6 => { // Atom = r#"[a-z][a-z0-9_]*"# => ActionFn(3); let __sym0 = __pop_Termr_23_22_5ba_2dz_5d_5ba_2dz0_2d9___5d_2a_22_23(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); let __nt = super::__action3(input, __sym0); let __states_len = __states.len(); __states.truncate(__states_len - 1); __symbols.push((__start, __Symbol::NtAtom(__nt), __end)); 3 } 7 => { // BoxedTerm = Term => ActionFn(5); let __sym0 = __pop_NtTerm(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); let __nt = super::__action5(input, __sym0); let __states_len = __states.len(); __states.truncate(__states_len - 1); __symbols.push((__start, __Symbol::NtBoxedTerm(__nt), __end)); 4 } 8 => { // Term = Atom, "(", BoxedTerm, ")" => ActionFn(16); 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::__action16(input, __sym0, __sym1, __sym2, __sym3); let __states_len = __states.len(); __states.truncate(__states_len - 4); __symbols.push((__start, __Symbol::NtTerm(__nt), __end)); 5 } 9 => { // Term = Atom, "(", ( ",")+, BoxedTerm, ")" => ActionFn(17); 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); let __sym1 = __pop_Term_22_28_22(__symbols); let __sym0 = __pop_NtAtom(__symbols); let __start = __sym0.0.clone(); let __end = __sym4.2.clone(); let __nt = super::__action17(input, __sym0, __sym1, __sym2, __sym3, __sym4); let __states_len = __states.len(); __states.truncate(__states_len - 5); __symbols.push((__start, __Symbol::NtTerm(__nt), __end)); 5 } 10 => { // Term = Atom => ActionFn(7); let __sym0 = __pop_NtAtom(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); let __nt = super::__action7(input, __sym0); let __states_len = __states.len(); __states.truncate(__states_len - 1); __symbols.push((__start, __Symbol::NtTerm(__nt), __end)); 5 } 11 => { // Term = Var => ActionFn(8); let __sym0 = __pop_NtVar(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); let __nt = super::__action8(input, __sym0); let __states_len = __states.len(); __states.truncate(__states_len - 1); __symbols.push((__start, __Symbol::NtTerm(__nt), __end)); 5 } 12 => { // TopLevel = "?-", Term, "." => ActionFn(1); let __sym2 = __pop_Term_22_2e_22(__symbols); let __sym1 = __pop_NtTerm(__symbols); let __sym0 = __pop_Term_22_3f_2d_22(__symbols); let __start = __sym0.0.clone(); let __end = __sym2.2.clone(); let __nt = super::__action1(input, __sym0, __sym1, __sym2); let __states_len = __states.len(); __states.truncate(__states_len - 3); __symbols.push((__start, __Symbol::NtTopLevel(__nt), __end)); 6 } 13 => { // TopLevel = Term, "." => ActionFn(2); let __sym1 = __pop_Term_22_2e_22(__symbols); let __sym0 = __pop_NtTerm(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); let __nt = super::__action2(input, __sym0, __sym1); let __states_len = __states.len(); __states.truncate(__states_len - 2); __symbols.push((__start, __Symbol::NtTopLevel(__nt), __end)); 6 } 14 => { // Var = r#"[A-Z][a-z0-9_]*"# => ActionFn(4); let __sym0 = __pop_Termr_23_22_5bA_2dZ_5d_5ba_2dz0_2d9___5d_2a_22_23(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); let __nt = super::__action4(input, __sym0); let __states_len = __states.len(); __states.truncate(__states_len - 1); __symbols.push((__start, __Symbol::NtVar(__nt), __end)); 7 } 15 => { // __TopLevel = TopLevel => ActionFn(0); let __sym0 = __pop_NtTopLevel(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); let __nt = super::__action0(input, __sym0); return Some(Ok(__nt)); } _ => panic!("invalid action code {}", __action) }; let __state = *__states.last().unwrap() as usize; let __next_state = __GOTO[__state * 9 + __nonterminal] - 1; __states.push(__next_state); None } fn __pop_Term_22_28_22< 'input, >( __symbols: &mut ::std::vec::Vec<(usize,__Symbol<'input>,usize)> ) -> (usize, &'input str, usize) { match __symbols.pop().unwrap() { (__l, __Symbol::Term_22_28_22(__v), __r) => (__l, __v, __r), _ => panic!("symbol type mismatch") } } fn __pop_Term_22_29_22< 'input, >( __symbols: &mut ::std::vec::Vec<(usize,__Symbol<'input>,usize)> ) -> (usize, &'input str, usize) { match __symbols.pop().unwrap() { (__l, __Symbol::Term_22_29_22(__v), __r) => (__l, __v, __r), _ => panic!("symbol type mismatch") } } fn __pop_Term_22_2c_22< 'input, >( __symbols: &mut ::std::vec::Vec<(usize,__Symbol<'input>,usize)> ) -> (usize, &'input str, usize) { match __symbols.pop().unwrap() { (__l, __Symbol::Term_22_2c_22(__v), __r) => (__l, __v, __r), _ => panic!("symbol type mismatch") } } fn __pop_Term_22_2e_22< 'input, >( __symbols: &mut ::std::vec::Vec<(usize,__Symbol<'input>,usize)> ) -> (usize, &'input str, usize) { match __symbols.pop().unwrap() { (__l, __Symbol::Term_22_2e_22(__v), __r) => (__l, __v, __r), _ => panic!("symbol type mismatch") } } fn __pop_Term_22_3f_2d_22< 'input, >( __symbols: &mut ::std::vec::Vec<(usize,__Symbol<'input>,usize)> ) -> (usize, &'input str, usize) { match __symbols.pop().unwrap() { (__l, __Symbol::Term_22_3f_2d_22(__v), __r) => (__l, __v, __r), _ => panic!("symbol type mismatch") } } fn __pop_Termr_23_22_5bA_2dZ_5d_5ba_2dz0_2d9___5d_2a_22_23< 'input, >( __symbols: &mut ::std::vec::Vec<(usize,__Symbol<'input>,usize)> ) -> (usize, &'input str, usize) { match __symbols.pop().unwrap() { (__l, __Symbol::Termr_23_22_5bA_2dZ_5d_5ba_2dz0_2d9___5d_2a_22_23(__v), __r) => (__l, __v, __r), _ => panic!("symbol type mismatch") } } fn __pop_Termr_23_22_5ba_2dz_5d_5ba_2dz0_2d9___5d_2a_22_23< 'input, >( __symbols: &mut ::std::vec::Vec<(usize,__Symbol<'input>,usize)> ) -> (usize, &'input str, usize) { match __symbols.pop().unwrap() { (__l, __Symbol::Termr_23_22_5ba_2dz_5d_5ba_2dz0_2d9___5d_2a_22_23(__v), __r) => (__l, __v, __r), _ => panic!("symbol type mismatch") } } fn __pop_Nt_28_3cBoxedTerm_3e_20_22_2c_22_29< 'input, >( __symbols: &mut ::std::vec::Vec<(usize,__Symbol<'input>,usize)> ) -> (usize, Box, usize) { match __symbols.pop().unwrap() { (__l, __Symbol::Nt_28_3cBoxedTerm_3e_20_22_2c_22_29(__v), __r) => (__l, __v, __r), _ => panic!("symbol type mismatch") } } fn __pop_Nt_28_3cBoxedTerm_3e_20_22_2c_22_29_2a< 'input, >( __symbols: &mut ::std::vec::Vec<(usize,__Symbol<'input>,usize)> ) -> (usize, ::std::vec::Vec>, usize) { match __symbols.pop().unwrap() { (__l, __Symbol::Nt_28_3cBoxedTerm_3e_20_22_2c_22_29_2a(__v), __r) => (__l, __v, __r), _ => panic!("symbol type mismatch") } } fn __pop_Nt_28_3cBoxedTerm_3e_20_22_2c_22_29_2b< 'input, >( __symbols: &mut ::std::vec::Vec<(usize,__Symbol<'input>,usize)> ) -> (usize, ::std::vec::Vec>, usize) { match __symbols.pop().unwrap() { (__l, __Symbol::Nt_28_3cBoxedTerm_3e_20_22_2c_22_29_2b(__v), __r) => (__l, __v, __r), _ => panic!("symbol type mismatch") } } fn __pop_NtAtom< 'input, >( __symbols: &mut ::std::vec::Vec<(usize,__Symbol<'input>,usize)> ) -> (usize, Atom, usize) { match __symbols.pop().unwrap() { (__l, __Symbol::NtAtom(__v), __r) => (__l, __v, __r), _ => panic!("symbol type mismatch") } } fn __pop_NtBoxedTerm< 'input, >( __symbols: &mut ::std::vec::Vec<(usize,__Symbol<'input>,usize)> ) -> (usize, Box, usize) { match __symbols.pop().unwrap() { (__l, __Symbol::NtBoxedTerm(__v), __r) => (__l, __v, __r), _ => panic!("symbol type mismatch") } } fn __pop_NtTerm< 'input, >( __symbols: &mut ::std::vec::Vec<(usize,__Symbol<'input>,usize)> ) -> (usize, Term, usize) { match __symbols.pop().unwrap() { (__l, __Symbol::NtTerm(__v), __r) => (__l, __v, __r), _ => panic!("symbol type mismatch") } } fn __pop_NtTopLevel< 'input, >( __symbols: &mut ::std::vec::Vec<(usize,__Symbol<'input>,usize)> ) -> (usize, TopLevel, usize) { match __symbols.pop().unwrap() { (__l, __Symbol::NtTopLevel(__v), __r) => (__l, __v, __r), _ => panic!("symbol type mismatch") } } fn __pop_NtVar< 'input, >( __symbols: &mut ::std::vec::Vec<(usize,__Symbol<'input>,usize)> ) -> (usize, Var, usize) { match __symbols.pop().unwrap() { (__l, __Symbol::NtVar(__v), __r) => (__l, __v, __r), _ => panic!("symbol type mismatch") } } fn __pop_Nt____TopLevel< 'input, >( __symbols: &mut ::std::vec::Vec<(usize,__Symbol<'input>,usize)> ) -> (usize, TopLevel, usize) { match __symbols.pop().unwrap() { (__l, __Symbol::Nt____TopLevel(__v), __r) => (__l, __v, __r), _ => panic!("symbol type mismatch") } } } pub use self::__parse__TopLevel::parse_TopLevel; mod __intern_token { extern crate lalrpop_util as __lalrpop_util; pub struct __Matcher<'input> { text: &'input str, consumed: usize, } fn __tokenize(text: &str) -> Option<(usize, usize)> { let mut __chars = text.char_indices(); let mut __current_match: Option<(usize, usize)> = None; let mut __current_state: usize = 0; loop { match __current_state { 0 => { let (__index, __ch) = match __chars.next() { Some(p) => p, None => return __current_match }; match __ch as u32 { 40 => /* '(' */ { __current_match = Some((0, __index + 1)); __current_state = 1; continue; } 41 => /* ')' */ { __current_match = Some((1, __index + 1)); __current_state = 2; continue; } 44 => /* ',' */ { __current_match = Some((2, __index + 1)); __current_state = 3; continue; } 46 => /* '.' */ { __current_match = Some((3, __index + 1)); __current_state = 4; continue; } 63 => /* '?' */ { __current_state = 5; continue; } 65 ... 90 => { __current_match = Some((5, __index + __ch.len_utf8())); __current_state = 6; continue; } 97 ... 122 => { __current_match = Some((6, __index + __ch.len_utf8())); __current_state = 7; continue; } _ => { return __current_match; } } } 1 => { let (__index, __ch) = match __chars.next() { Some(p) => p, None => return __current_match }; match __ch as u32 { _ => { return __current_match; } } } 2 => { let (__index, __ch) = match __chars.next() { Some(p) => p, None => return __current_match }; match __ch as u32 { _ => { return __current_match; } } } 3 => { let (__index, __ch) = match __chars.next() { Some(p) => p, None => return __current_match }; match __ch as u32 { _ => { return __current_match; } } } 4 => { let (__index, __ch) = match __chars.next() { Some(p) => p, None => return __current_match }; match __ch as u32 { _ => { return __current_match; } } } 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 = 9; continue; } _ => { return __current_match; } } } 6 => { let (__index, __ch) = match __chars.next() { Some(p) => p, None => return __current_match }; match __ch as u32 { 48 ... 57 => { __current_match = Some((5, __index + __ch.len_utf8())); __current_state = 10; continue; } 95 => /* '_' */ { __current_match = Some((5, __index + 1)); __current_state = 10; continue; } 97 ... 122 => { __current_match = Some((5, __index + __ch.len_utf8())); __current_state = 10; continue; } _ => { return __current_match; } } } 7 => { let (__index, __ch) = match __chars.next() { Some(p) => p, None => return __current_match }; match __ch as u32 { 48 ... 57 => { __current_match = Some((6, __index + __ch.len_utf8())); __current_state = 11; continue; } 95 => /* '_' */ { __current_match = Some((6, __index + 1)); __current_state = 11; continue; } 97 ... 122 => { __current_match = Some((6, __index + __ch.len_utf8())); __current_state = 11; continue; } _ => { return __current_match; } } } 8 => { let (__index, __ch) = match __chars.next() { Some(p) => p, None => return __current_match }; match __ch as u32 { _ => { return __current_match; } } } 9 => { let (__index, __ch) = match __chars.next() { Some(p) => p, None => return __current_match }; match __ch as u32 { _ => { return __current_match; } } } 10 => { let (__index, __ch) = match __chars.next() { Some(p) => p, None => return __current_match }; match __ch as u32 { 48 ... 57 => { __current_match = Some((5, __index + __ch.len_utf8())); __current_state = 10; continue; } 95 => /* '_' */ { __current_match = Some((5, __index + 1)); __current_state = 10; continue; } 97 ... 122 => { __current_match = Some((5, __index + __ch.len_utf8())); __current_state = 10; continue; } _ => { return __current_match; } } } 11 => { let (__index, __ch) = match __chars.next() { Some(p) => p, None => return __current_match }; match __ch as u32 { 48 ... 57 => { __current_match = Some((6, __index + __ch.len_utf8())); __current_state = 11; continue; } 95 => /* '_' */ { __current_match = Some((6, __index + 1)); __current_state = 11; continue; } 97 ... 122 => { __current_match = Some((6, __index + __ch.len_utf8())); __current_state = 11; continue; } _ => { return __current_match; } } } _ => { panic!("invalid state {}", __current_state); } } } } impl<'input> __Matcher<'input> { pub fn new(s: &'input str) -> __Matcher<'input> { __Matcher { text: s, consumed: 0 } } } impl<'input> Iterator for __Matcher<'input> { type Item = Result<(usize, (usize, &'input str), usize), __lalrpop_util::ParseError>; fn next(&mut self) -> Option { let __text = self.text.trim_left(); let __whitespace = self.text.len() - __text.len(); let __start_offset = self.consumed + __whitespace; if __text.is_empty() { self.text = __text; self.consumed = __start_offset; None } else { match __tokenize(__text) { Some((__index, __length)) => { let __result = &__text[..__length]; let __remaining = &__text[__length..]; let __end_offset = __start_offset + __length; self.text = __remaining; self.consumed = __end_offset; Some(Ok((__start_offset, (__index, __result), __end_offset))) } None => { Some(Err(__lalrpop_util::ParseError::InvalidToken { location: __start_offset })) } } } } } } #[allow(unused_variables)] pub fn __action0< 'input, >( input: &'input str, (_, __0, _): (usize, TopLevel, usize), ) -> TopLevel { (__0) } #[allow(unused_variables)] pub fn __action1< 'input, >( input: &'input str, (_, _, _): (usize, &'input str, usize), (_, t, _): (usize, Term, usize), (_, _, _): (usize, &'input str, usize), ) -> TopLevel { TopLevel::Query(t) } #[allow(unused_variables)] pub fn __action2< 'input, >( input: &'input str, (_, t, _): (usize, Term, usize), (_, _, _): (usize, &'input str, usize), ) -> TopLevel { TopLevel::Fact(t) } #[allow(unused_variables)] pub fn __action3< 'input, >( input: &'input str, (_, __0, _): (usize, &'input str, usize), ) -> Atom { __0.trim().to_string() } #[allow(unused_variables)] pub fn __action4< 'input, >( input: &'input str, (_, __0, _): (usize, &'input str, usize), ) -> Var { __0.trim().to_string() } #[allow(unused_variables)] pub fn __action5< 'input, >( input: &'input str, (_, t, _): (usize, Term, usize), ) -> Box { Box::new(t) } #[allow(unused_variables)] pub fn __action6< 'input, >( input: &'input str, (_, a, _): (usize, Atom, usize), (_, _, _): (usize, &'input str, usize), (_, ts, _): (usize, ::std::vec::Vec>, usize), (_, t, _): (usize, Box, usize), (_, _, _): (usize, &'input str, usize), ) -> Term { { let mut ts = ts; ts.push(t); Term::Clause(Cell::new(0), a, ts) } } #[allow(unused_variables)] pub fn __action7< 'input, >( input: &'input str, (_, __0, _): (usize, Atom, usize), ) -> Term { Term::Atom(Cell::new(0), __0) } #[allow(unused_variables)] pub fn __action8< 'input, >( input: &'input str, (_, __0, _): (usize, Var, usize), ) -> Term { Term::Var(Cell::new(Reg::Norm(0)), __0) } #[allow(unused_variables)] pub fn __action9< 'input, >( input: &'input str, __lookbehind: &usize, __lookahead: &usize, ) -> ::std::vec::Vec> { vec![] } #[allow(unused_variables)] pub fn __action10< 'input, >( input: &'input str, (_, v, _): (usize, ::std::vec::Vec>, usize), ) -> ::std::vec::Vec> { v } #[allow(unused_variables)] pub fn __action11< 'input, >( input: &'input str, (_, __0, _): (usize, Box, usize), (_, _, _): (usize, &'input str, usize), ) -> Box { (__0) } #[allow(unused_variables)] pub fn __action12< 'input, >( input: &'input str, (_, __0, _): (usize, Box, usize), ) -> ::std::vec::Vec> { vec![__0] } #[allow(unused_variables)] pub fn __action13< 'input, >( input: &'input str, (_, v, _): (usize, ::std::vec::Vec>, usize), (_, e, _): (usize, Box, usize), ) -> ::std::vec::Vec> { { let mut v = v; v.push(e); v } } #[allow(unused_variables)] pub fn __action14< 'input, >( input: &'input str, __0: (usize, Box, usize), __1: (usize, &'input str, usize), ) -> ::std::vec::Vec> { let __start0 = __0.0.clone(); let __end0 = __1.2.clone(); let __temp0 = __action11( input, __0, __1, ); let __temp0 = (__start0, __temp0, __end0); __action12( input, __temp0, ) } #[allow(unused_variables)] pub fn __action15< 'input, >( input: &'input str, __0: (usize, ::std::vec::Vec>, usize), __1: (usize, Box, usize), __2: (usize, &'input str, usize), ) -> ::std::vec::Vec> { let __start0 = __1.0.clone(); let __end0 = __2.2.clone(); let __temp0 = __action11( input, __1, __2, ); let __temp0 = (__start0, __temp0, __end0); __action13( input, __0, __temp0, ) } #[allow(unused_variables)] pub fn __action16< 'input, >( input: &'input str, __0: (usize, Atom, usize), __1: (usize, &'input str, usize), __2: (usize, Box, usize), __3: (usize, &'input str, usize), ) -> Term { let __start0 = __1.2.clone(); let __end0 = __2.0.clone(); let __temp0 = __action9( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); __action6( input, __0, __1, __temp0, __2, __3, ) } #[allow(unused_variables)] pub fn __action17< 'input, >( input: &'input str, __0: (usize, Atom, usize), __1: (usize, &'input str, usize), __2: (usize, ::std::vec::Vec>, usize), __3: (usize, Box, usize), __4: (usize, &'input str, usize), ) -> Term { let __start0 = __2.0.clone(); let __end0 = __2.2.clone(); let __temp0 = __action10( input, __2, ); let __temp0 = (__start0, __temp0, __end0); __action6( input, __0, __1, __temp0, __3, __4, ) } pub trait __ToTriple<'input, > { type Error; fn to_triple(value: Self) -> Result<(usize,(usize, &'input str),usize),Self::Error>; } impl<'input, > __ToTriple<'input, > for (usize, (usize, &'input str), usize) { type Error = (); fn to_triple(value: Self) -> Result<(usize,(usize, &'input str),usize),()> { Ok(value) } } impl<'input, > __ToTriple<'input, > for Result<(usize, (usize, &'input str), usize),()> { type Error = (); fn to_triple(value: Self) -> Result<(usize,(usize, &'input str),usize),()> { value } }