diff --git a/src/grammar.lalrpop b/src/grammar.lalrpop index 453a7fa..61d16f7 100644 --- a/src/grammar.lalrpop +++ b/src/grammar.lalrpop @@ -7,6 +7,7 @@ grammar<'s>(); pub(crate) Tree: Tree = { "(" ")" => Tree::Branch(<>), "(" "define" ")" => Tree::Define(<>), + "(" "define" "(" > ")" > ")" => Tree::Define(name, Box::new(Tree::Lambda(Lambda(args, body)))), "(" "if" ")" => Tree::If(Box::new([<>])), "(" "lambda (" > ")" > ")" => Tree::Lambda(Lambda(<>)), Literal => Tree::Leaf(<>), diff --git a/src/grammar.rs b/src/grammar.rs index c06bbf8..b275c54 100644 --- a/src/grammar.rs +++ b/src/grammar.rs @@ -1,5 +1,5 @@ // auto-generated: "lalrpop 0.19.6" -// sha3: 753fb4f6236f2d88546d1b9a3c423a0af234f3c971035520e33d7e7510538 +// sha3: 779020ca179c7d99169ea2a3dc209511d4dc5bfa2f6290c09a821c6f93ced8c use crate::{Tree, Literal, Lambda}; use std::rc::Rc; #[allow(unused_extern_crates)] @@ -39,75 +39,87 @@ mod __parse__Tree { } const __ACTION: &[i8] = &[ // State 0 - 17, 18, 2, 0, 0, 0, 0, 19, 20, + 20, 21, 2, 0, 0, 0, 0, 22, 23, // State 1 - 17, 18, 2, 0, 4, 5, 6, 19, 20, + 20, 21, 2, 0, 4, 5, 6, 22, 23, // State 2 - 17, 18, 2, 23, 0, 0, 0, 19, 20, + 20, 21, 2, 26, 0, 0, 0, 22, 23, // State 3 - 0, 0, 0, 0, 0, 0, 0, 0, 20, + 0, 0, 8, 0, 0, 0, 0, 0, 23, // State 4 - 17, 18, 2, 0, 0, 0, 0, 19, 20, + 20, 21, 2, 0, 0, 0, 0, 22, 23, // State 5 - 0, 0, 0, -10, 0, 0, 0, 0, 20, + 0, 0, 0, -10, 0, 0, 0, 0, 23, // State 6 - 17, 18, 2, 0, 0, 0, 0, 19, 20, + 20, 21, 2, 0, 0, 0, 0, 22, 23, // State 7 - 17, 18, 2, 0, 0, 0, 0, 19, 20, + 0, 0, 0, 0, 0, 0, 0, 0, 23, // State 8 - 0, 0, 0, -11, 0, 0, 0, 0, 20, + 20, 21, 2, 0, 0, 0, 0, 22, 23, // State 9 - 17, 18, 2, 0, 0, 0, 0, 19, 20, + 0, 0, 0, -11, 0, 0, 0, 0, 23, // State 10 - 17, 18, 2, 0, 0, 0, 0, 19, 20, + 0, 0, 0, -10, 0, 0, 0, 0, 23, // State 11 - -7, -7, -7, -7, 0, 0, 0, -7, -7, + 20, 21, 2, 0, 0, 0, 0, 22, 23, // State 12 - -21, -21, -21, -21, 0, 0, 0, -21, -21, + 20, 21, 2, 0, 0, 0, 0, 22, 23, // State 13 - -6, -6, -6, -6, 0, 0, 0, -6, -6, + 20, 21, 2, 0, 0, 0, 0, 22, 23, // State 14 - -5, -5, -5, -5, 0, 0, 0, -5, -5, + -7, -7, -7, -7, 0, 0, 0, -7, -7, // State 15 - 0, 0, 0, 0, 0, 0, 0, 0, 0, - // State 16 - -3, -3, -3, -3, 0, 0, 0, -3, -3, - // State 17 - -2, -2, -2, -2, 0, 0, 0, -2, -2, - // State 18 - -8, -8, -8, -8, 0, 0, 0, -8, -8, - // State 19 - -12, -12, -12, -12, 0, 0, 0, -12, -12, - // State 20 -22, -22, -22, -22, 0, 0, 0, -22, -22, + // State 16 + -6, -6, -6, -6, 0, 0, 0, -6, -6, + // State 17 + -5, -5, -5, -5, 0, 0, 0, -5, -5, + // State 18 + 0, 0, 0, 0, 0, 0, 0, 0, 0, + // State 19 + -3, -3, -3, -3, 0, 0, 0, -3, -3, + // State 20 + -2, -2, -2, -2, 0, 0, 0, -2, -2, // State 21 - -23, -23, -23, -23, 0, 0, 0, -23, -23, + -8, -8, -8, -8, 0, 0, 0, -8, -8, // State 22 - -17, -17, -17, -17, 0, 0, 0, -17, -17, + -12, -12, -12, -12, 0, 0, 0, -12, -12, // State 23 - 0, 0, 0, 11, 0, 0, 0, 0, 0, + -23, -23, -23, -23, 0, 0, 0, -23, -23, // State 24 - 0, 0, 0, -15, 0, 0, 0, 0, -15, + -24, -24, -24, -24, 0, 0, 0, -24, -24, // State 25 - 0, 0, 0, 30, 0, 0, 0, 0, 0, + -17, -17, -17, -17, 0, 0, 0, -17, -17, // State 26 - 0, 0, 0, -1, 0, 0, 0, 0, 0, + 0, 0, 0, 13, 0, 0, 0, 0, 0, // State 27 - 0, 0, 0, -4, 0, 0, 0, 0, 0, + 0, 0, 0, -15, 0, 0, 0, 0, -15, // State 28 - 0, 0, 0, -16, 0, 0, 0, 0, -16, + 0, 0, 0, 33, 0, 0, 0, 0, 0, // State 29 - -18, -18, -18, -18, 0, 0, 0, -18, -18, + 0, 0, 0, -1, 0, 0, 0, 0, 0, // State 30 - 0, 0, 0, 34, 0, 0, 0, 0, 0, + 0, 0, 0, -4, 0, 0, 0, 0, 0, // State 31 - 0, 0, 0, 35, 0, 0, 0, 0, 0, + 0, 0, 0, -16, 0, 0, 0, 0, -16, // State 32 - 0, 0, 0, -9, 0, 0, 0, 0, 0, + -18, -18, -18, -18, 0, 0, 0, -18, -18, // State 33 - -19, -19, -19, -19, 0, 0, 0, -19, -19, + 0, 0, 0, 14, 0, 0, 0, 0, 0, // State 34 + 0, 0, 0, 38, 0, 0, 0, 0, 0, + // State 35 + 0, 0, 0, 39, 0, 0, 0, 0, 0, + // State 36 + 0, 0, 0, -9, 0, 0, 0, 0, 0, + // State 37 -20, -20, -20, -20, 0, 0, 0, -20, -20, + // State 38 + -21, -21, -21, -21, 0, 0, 0, -21, -21, + // State 39 + 0, 0, 0, 41, 0, 0, 0, 0, 0, + // State 40 + -19, -19, -19, -19, 0, 0, 0, -19, -19, ]; fn __action(state: i8, integer: usize) -> i8 { __ACTION[(state as usize) * 9 + integer] @@ -136,35 +148,35 @@ mod __parse__Tree { // State 10 0, // State 11 - -7, + 0, // State 12 - -21, + 0, // State 13 - -6, + 0, // State 14 - -5, + -7, // State 15 - -24, + -22, // State 16 - -3, + -6, // State 17 - -2, + -5, // State 18 - -8, + -25, // State 19 - -12, + -3, // State 20 - 0, + -2, // State 21 - 0, + -8, // State 22 - -17, + -12, // State 23 0, // State 24 0, // State 25 - 0, + -17, // State 26 0, // State 27 @@ -172,43 +184,62 @@ mod __parse__Tree { // State 28 0, // State 29 - -18, + 0, // State 30 0, // State 31 0, // State 32 - 0, + -18, // State 33 - -19, + 0, // State 34 + 0, + // State 35 + 0, + // State 36 + 0, + // State 37 -20, + // State 38 + -21, + // State 39 + 0, + // State 40 + -19, ]; fn __goto(state: i8, nt: usize) -> i8 { match nt { - 0 => 25, - 1 => 11, - 2 => 26, - 3 => 12, - 4 => 13, - 5 => 31, - 6 => 23, + 0 => 28, + 1 => 14, + 2 => 29, + 3 => 15, + 4 => 16, + 5 => match state { + 13 => 39, + _ => 35, + }, + 6 => match state { + 10 => 33, + _ => 26, + }, 7 => match state { 3 => 6, - 5 => 24, - 8 => 28, - _ => 14, + 7 => 10, + 5 | 10 => 27, + 9 => 31, + _ => 17, }, - 9 => 8, + 9 => 9, 10 => match state { - 7 => 9, - 0 => 15, - 1 => 20, - 2 => 21, - 6 => 27, - 9 => 30, - 10 => 32, - _ => 7, + 8 => 11, + 0 => 18, + 1 => 23, + 2 => 24, + 6 => 30, + 11 => 34, + 12..=13 => 36, + _ => 8, }, 11 => 2, _ => 0, @@ -486,6 +517,9 @@ mod __parse__Tree { __reduce22(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&(), &())>) } 23 => { + __reduce23(input, __lookahead_start, __symbols, core::marker::PhantomData::<(&(), &())>) + } + 24 => { // __Tree = Tree => ActionFn(0); let __sym0 = __pop_Variant9(__symbols); let __start = __sym0.0.clone(); @@ -637,11 +671,11 @@ mod __parse__Tree { _: core::marker::PhantomData<(&'input (), &'s ())>, ) -> (usize, usize) { - // BTree = Box => ActionFn(6); + // BTree = Box => ActionFn(7); let __sym0 = __pop_Variant1(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action6::<>(input, __sym0); + let __nt = super::__action7::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); (1, 0) } @@ -655,11 +689,11 @@ mod __parse__Tree { _: core::marker::PhantomData<(&'input (), &'s ())>, ) -> (usize, usize) { - // Bool = "#t" => ActionFn(12); + // Bool = "#t" => ActionFn(13); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action12::<>(input, __sym0); + let __nt = super::__action13::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (1, 1) } @@ -673,11 +707,11 @@ mod __parse__Tree { _: core::marker::PhantomData<(&'input (), &'s ())>, ) -> (usize, usize) { - // Bool = "#f" => ActionFn(13); + // Bool = "#f" => ActionFn(14); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action13::<>(input, __sym0); + let __nt = super::__action14::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant2(__nt), __end)); (1, 1) } @@ -691,11 +725,11 @@ mod __parse__Tree { _: core::marker::PhantomData<(&'input (), &'s ())>, ) -> (usize, usize) { - // Box = Tree => ActionFn(14); + // Box = Tree => ActionFn(15); let __sym0 = __pop_Variant9(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action14::<>(input, __sym0); + let __nt = super::__action15::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant1(__nt), __end)); (1, 2) } @@ -709,11 +743,11 @@ mod __parse__Tree { _: core::marker::PhantomData<(&'input (), &'s ())>, ) -> (usize, usize) { - // Literal = Sym => ActionFn(7); + // Literal = Sym => ActionFn(8); let __sym0 = __pop_Variant7(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action7::<>(input, __sym0); + let __nt = super::__action8::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); (1, 3) } @@ -727,11 +761,11 @@ mod __parse__Tree { _: core::marker::PhantomData<(&'input (), &'s ())>, ) -> (usize, usize) { - // Literal = Num => ActionFn(8); + // Literal = Num => ActionFn(9); let __sym0 = __pop_Variant4(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action8::<>(input, __sym0); + let __nt = super::__action9::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); (1, 3) } @@ -745,11 +779,11 @@ mod __parse__Tree { _: core::marker::PhantomData<(&'input (), &'s ())>, ) -> (usize, usize) { - // Literal = Bool => ActionFn(9); + // Literal = Bool => ActionFn(10); let __sym0 = __pop_Variant2(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action9::<>(input, __sym0); + let __nt = super::__action10::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant3(__nt), __end)); (1, 3) } @@ -763,11 +797,11 @@ mod __parse__Tree { _: core::marker::PhantomData<(&'input (), &'s ())>, ) -> (usize, usize) { - // Num = r#"[0-9]+(\\.[0-9]+)?"# => ActionFn(11); + // Num = r#"[0-9]+(\\.[0-9]+)?"# => ActionFn(12); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action11::<>(input, __sym0); + let __nt = super::__action12::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant4(__nt), __end)); (1, 4) } @@ -781,11 +815,11 @@ mod __parse__Tree { _: core::marker::PhantomData<(&'input (), &'s ())>, ) -> (usize, usize) { - // Rc = Tree => ActionFn(15); + // Rc = Tree => ActionFn(16); let __sym0 = __pop_Variant9(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action15::<>(input, __sym0); + let __nt = super::__action16::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant5(__nt), __end)); (1, 5) } @@ -799,10 +833,10 @@ mod __parse__Tree { _: core::marker::PhantomData<(&'input (), &'s ())>, ) -> (usize, usize) { - // RcSlice = => ActionFn(23); + // RcSlice = => ActionFn(24); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action23::<>(input, &__start, &__end); + let __nt = super::__action24::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (0, 6) } @@ -816,11 +850,11 @@ mod __parse__Tree { _: core::marker::PhantomData<(&'input (), &'s ())>, ) -> (usize, usize) { - // RcSlice = Sym+ => ActionFn(24); + // RcSlice = Sym+ => ActionFn(25); let __sym0 = __pop_Variant8(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action24::<>(input, __sym0); + let __nt = super::__action25::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant6(__nt), __end)); (1, 6) } @@ -834,11 +868,11 @@ mod __parse__Tree { _: core::marker::PhantomData<(&'input (), &'s ())>, ) -> (usize, usize) { - // Sym = r#"[A-Za-z!$%&*+\\-./:<=>?@^_~][A-Za-z!$%&*+\\-./:<=>?@^_~0-9]*"# => ActionFn(10); + // Sym = r#"[A-Za-z!$%&*+\\-./:<=>?@^_~][A-Za-z!$%&*+\\-./:<=>?@^_~0-9]*"# => ActionFn(11); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action10::<>(input, __sym0); + let __nt = super::__action11::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant7(__nt), __end)); (1, 7) } @@ -852,10 +886,10 @@ mod __parse__Tree { _: core::marker::PhantomData<(&'input (), &'s ())>, ) -> (usize, usize) { - // Sym* = => ActionFn(19); + // Sym* = => ActionFn(20); let __start = __lookahead_start.cloned().or_else(|| __symbols.last().map(|s| s.2.clone())).unwrap_or_default(); let __end = __start.clone(); - let __nt = super::__action19::<>(input, &__start, &__end); + let __nt = super::__action20::<>(input, &__start, &__end); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (0, 8) } @@ -869,11 +903,11 @@ mod __parse__Tree { _: core::marker::PhantomData<(&'input (), &'s ())>, ) -> (usize, usize) { - // Sym* = Sym+ => ActionFn(20); + // Sym* = Sym+ => ActionFn(21); let __sym0 = __pop_Variant8(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action20::<>(input, __sym0); + let __nt = super::__action21::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (1, 8) } @@ -887,11 +921,11 @@ mod __parse__Tree { _: core::marker::PhantomData<(&'input (), &'s ())>, ) -> (usize, usize) { - // Sym+ = Sym => ActionFn(21); + // Sym+ = Sym => ActionFn(22); let __sym0 = __pop_Variant7(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action21::<>(input, __sym0); + let __nt = super::__action22::<>(input, __sym0); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (1, 9) } @@ -905,13 +939,13 @@ mod __parse__Tree { _: core::marker::PhantomData<(&'input (), &'s ())>, ) -> (usize, usize) { - // Sym+ = Sym+, Sym => ActionFn(22); + // Sym+ = Sym+, Sym => ActionFn(23); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant7(__symbols); let __sym0 = __pop_Variant8(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action22::<>(input, __sym0, __sym1); + let __nt = super::__action23::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant8(__nt), __end)); (2, 9) } @@ -969,19 +1003,21 @@ mod __parse__Tree { _: core::marker::PhantomData<(&'input (), &'s ())>, ) -> (usize, usize) { - // Tree = "(", "if", Tree, Tree, Tree, ")" => ActionFn(3); - assert!(__symbols.len() >= 6); + // Tree = "(", "define", "(", Sym, RcSlice, ")", Rc, ")" => ActionFn(3); + assert!(__symbols.len() >= 8); + let __sym7 = __pop_Variant0(__symbols); + let __sym6 = __pop_Variant5(__symbols); let __sym5 = __pop_Variant0(__symbols); - let __sym4 = __pop_Variant9(__symbols); - let __sym3 = __pop_Variant9(__symbols); - let __sym2 = __pop_Variant9(__symbols); + let __sym4 = __pop_Variant6(__symbols); + let __sym3 = __pop_Variant7(__symbols); + let __sym2 = __pop_Variant0(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); - let __end = __sym5.2.clone(); - let __nt = super::__action3::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); + let __end = __sym7.2.clone(); + let __nt = super::__action3::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5, __sym6, __sym7); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (6, 10) + (8, 10) } pub(crate) fn __reduce19< 'input, @@ -993,12 +1029,12 @@ mod __parse__Tree { _: core::marker::PhantomData<(&'input (), &'s ())>, ) -> (usize, usize) { - // Tree = "(", "lambda (", RcSlice, ")", Rc, ")" => ActionFn(4); + // Tree = "(", "if", Tree, Tree, Tree, ")" => ActionFn(4); assert!(__symbols.len() >= 6); let __sym5 = __pop_Variant0(__symbols); - let __sym4 = __pop_Variant5(__symbols); - let __sym3 = __pop_Variant0(__symbols); - let __sym2 = __pop_Variant6(__symbols); + let __sym4 = __pop_Variant9(__symbols); + let __sym3 = __pop_Variant9(__symbols); + let __sym2 = __pop_Variant9(__symbols); let __sym1 = __pop_Variant0(__symbols); let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); @@ -1017,13 +1053,19 @@ mod __parse__Tree { _: core::marker::PhantomData<(&'input (), &'s ())>, ) -> (usize, usize) { - // Tree = Literal => ActionFn(5); - let __sym0 = __pop_Variant3(__symbols); + // Tree = "(", "lambda (", RcSlice, ")", Rc, ")" => ActionFn(5); + assert!(__symbols.len() >= 6); + let __sym5 = __pop_Variant0(__symbols); + let __sym4 = __pop_Variant5(__symbols); + let __sym3 = __pop_Variant0(__symbols); + let __sym2 = __pop_Variant6(__symbols); + let __sym1 = __pop_Variant0(__symbols); + let __sym0 = __pop_Variant0(__symbols); let __start = __sym0.0.clone(); - let __end = __sym0.2.clone(); - let __nt = super::__action5::<>(input, __sym0); + let __end = __sym5.2.clone(); + let __nt = super::__action5::<>(input, __sym0, __sym1, __sym2, __sym3, __sym4, __sym5); __symbols.push((__start, __Symbol::Variant9(__nt), __end)); - (1, 10) + (6, 10) } pub(crate) fn __reduce21< 'input, @@ -1035,13 +1077,13 @@ mod __parse__Tree { _: core::marker::PhantomData<(&'input (), &'s ())>, ) -> (usize, usize) { - // Tree+ = Tree => ActionFn(17); - let __sym0 = __pop_Variant9(__symbols); + // Tree = Literal => ActionFn(6); + let __sym0 = __pop_Variant3(__symbols); let __start = __sym0.0.clone(); let __end = __sym0.2.clone(); - let __nt = super::__action17::<>(input, __sym0); - __symbols.push((__start, __Symbol::Variant10(__nt), __end)); - (1, 11) + let __nt = super::__action6::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant9(__nt), __end)); + (1, 10) } pub(crate) fn __reduce22< 'input, @@ -1053,13 +1095,31 @@ mod __parse__Tree { _: core::marker::PhantomData<(&'input (), &'s ())>, ) -> (usize, usize) { - // Tree+ = Tree+, Tree => ActionFn(18); + // Tree+ = Tree => ActionFn(18); + let __sym0 = __pop_Variant9(__symbols); + let __start = __sym0.0.clone(); + let __end = __sym0.2.clone(); + let __nt = super::__action18::<>(input, __sym0); + __symbols.push((__start, __Symbol::Variant10(__nt), __end)); + (1, 11) + } + pub(crate) fn __reduce23< + 'input, + 's, + >( + input: &'input str, + __lookahead_start: Option<&usize>, + __symbols: &mut alloc::vec::Vec<(usize,__Symbol<'input>,usize)>, + _: core::marker::PhantomData<(&'input (), &'s ())>, + ) -> (usize, usize) + { + // Tree+ = Tree+, Tree => ActionFn(19); assert!(__symbols.len() >= 2); let __sym1 = __pop_Variant9(__symbols); let __sym0 = __pop_Variant10(__symbols); let __start = __sym0.0.clone(); let __end = __sym1.2.clone(); - let __nt = super::__action18::<>(input, __sym0, __sym1); + let __nt = super::__action19::<>(input, __sym0, __sym1); __symbols.push((__start, __Symbol::Variant10(__nt), __end)); (2, 11) } @@ -1140,6 +1200,25 @@ fn __action2< fn __action3< 'input, 's, +>( + input: &'input str, + (_, _, _): (usize, &'input str, usize), + (_, _, _): (usize, &'input str, usize), + (_, _, _): (usize, &'input str, usize), + (_, name, _): (usize, String, usize), + (_, args, _): (usize, Rc<[String]>, usize), + (_, _, _): (usize, &'input str, usize), + (_, body, _): (usize, Rc, usize), + (_, _, _): (usize, &'input str, usize), +) -> Tree +{ + Tree::Define(name, Box::new(Tree::Lambda(Lambda(args, body)))) +} + +#[allow(unused_variables)] +fn __action4< + 'input, + 's, >( input: &'input str, (_, _, _): (usize, &'input str, usize), @@ -1154,7 +1233,7 @@ fn __action3< } #[allow(unused_variables)] -fn __action4< +fn __action5< 'input, 's, >( @@ -1171,7 +1250,7 @@ fn __action4< } #[allow(unused_variables)] -fn __action5< +fn __action6< 'input, 's, >( @@ -1183,7 +1262,7 @@ fn __action5< } #[allow(unused_variables)] -fn __action6< +fn __action7< 'input, 's, >( @@ -1195,7 +1274,7 @@ fn __action6< } #[allow(unused_variables)] -fn __action7< +fn __action8< 'input, 's, >( @@ -1207,7 +1286,7 @@ fn __action7< } #[allow(unused_variables)] -fn __action8< +fn __action9< 'input, 's, >( @@ -1219,7 +1298,7 @@ fn __action8< } #[allow(unused_variables)] -fn __action9< +fn __action10< 'input, 's, >( @@ -1231,7 +1310,7 @@ fn __action9< } #[allow(unused_variables)] -fn __action10< +fn __action11< 'input, 's, >( @@ -1243,7 +1322,7 @@ fn __action10< } #[allow(unused_variables)] -fn __action11< +fn __action12< 'input, 's, >( @@ -1255,7 +1334,7 @@ fn __action11< } #[allow(unused_variables)] -fn __action12< +fn __action13< 'input, 's, >( @@ -1267,7 +1346,7 @@ fn __action12< } #[allow(unused_variables)] -fn __action13< +fn __action14< 'input, 's, >( @@ -1279,7 +1358,7 @@ fn __action13< } #[allow(unused_variables)] -fn __action14< +fn __action15< 'input, 's, >( @@ -1291,7 +1370,7 @@ fn __action14< } #[allow(unused_variables)] -fn __action15< +fn __action16< 'input, 's, >( @@ -1303,7 +1382,7 @@ fn __action15< } #[allow(unused_variables)] -fn __action16< +fn __action17< 'input, 's, >( @@ -1315,7 +1394,7 @@ fn __action16< } #[allow(unused_variables)] -fn __action17< +fn __action18< 'input, 's, >( @@ -1327,7 +1406,7 @@ fn __action17< } #[allow(unused_variables)] -fn __action18< +fn __action19< 'input, 's, >( @@ -1340,7 +1419,7 @@ fn __action18< } #[allow(unused_variables)] -fn __action19< +fn __action20< 'input, 's, >( @@ -1353,7 +1432,7 @@ fn __action19< } #[allow(unused_variables)] -fn __action20< +fn __action21< 'input, 's, >( @@ -1365,7 +1444,7 @@ fn __action20< } #[allow(unused_variables)] -fn __action21< +fn __action22< 'input, 's, >( @@ -1377,7 +1456,7 @@ fn __action21< } #[allow(unused_variables)] -fn __action22< +fn __action23< 'input, 's, >( @@ -1390,7 +1469,7 @@ fn __action22< } #[allow(unused_variables)] -fn __action23< +fn __action24< 'input, 's, >( @@ -1401,20 +1480,20 @@ fn __action23< { let __start0 = __lookbehind.clone(); let __end0 = __lookahead.clone(); - let __temp0 = __action19( + let __temp0 = __action20( input, &__start0, &__end0, ); let __temp0 = (__start0, __temp0, __end0); - __action16( + __action17( input, __temp0, ) } #[allow(unused_variables)] -fn __action24< +fn __action25< 'input, 's, >( @@ -1424,12 +1503,12 @@ fn __action24< { let __start0 = __0.0.clone(); let __end0 = __0.2.clone(); - let __temp0 = __action20( + let __temp0 = __action21( input, __0, ); let __temp0 = (__start0, __temp0, __end0); - __action16( + __action17( input, __temp0, ) diff --git a/src/main.rs b/src/main.rs index a2c160a..120441d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -152,7 +152,7 @@ fn main() { rl.add_history_entry(&line); let tree = grammar::TreeParser::new().parse(&line).unwrap(); - dbg!(&tree); + // dbg!(&tree); println!("< {:?}", eval(&tree, &mut env)) } }