Define lambda shorthand
parent
1780796b5f
commit
69b7714892
|
@ -7,6 +7,7 @@ grammar<'s>();
|
|||
pub(crate) Tree: Tree = {
|
||||
"(" <Tree+> ")" => Tree::Branch(<>),
|
||||
"(" "define" <Sym> <BTree> ")" => Tree::Define(<>),
|
||||
"(" "define" "(" <name:Sym> <args:RcSlice<Sym>> ")" <body:Rc<Tree>> ")" => Tree::Define(name, Box::new(Tree::Lambda(Lambda(args, body)))),
|
||||
"(" "if" <Tree> <Tree> <Tree> ")" => Tree::If(Box::new([<>])),
|
||||
"(" "lambda (" <RcSlice<Sym>> ")" <Rc<Tree>> ")" => Tree::Lambda(Lambda(<>)),
|
||||
Literal => Tree::Leaf(<>),
|
||||
|
|
389
src/grammar.rs
389
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<Tree> => ActionFn(6);
|
||||
// BTree = Box<Tree> => 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> = Tree => ActionFn(14);
|
||||
// Box<Tree> = 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> = Tree => ActionFn(15);
|
||||
// Rc<Tree> = 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<Sym> = => ActionFn(23);
|
||||
// RcSlice<Sym> = => 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> = Sym+ => ActionFn(24);
|
||||
// RcSlice<Sym> = 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<Sym>, ")", Rc<Tree>, ")" => 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<Sym>, ")", Rc<Tree>, ")" => 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<Sym>, ")", Rc<Tree>, ")" => 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<Tree>, 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,
|
||||
)
|
||||
|
|
|
@ -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))
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue