Diffstat (limited to 'src/parser.rs')
| -rw-r--r-- | src/parser.rs | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/parser.rs b/src/parser.rs index df5af22..8cee0ef 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -5,6 +5,7 @@ use chumsky::{ prelude::*, Parser, }; +mod fun; mod util; use types::*; use util::*; @@ -34,7 +35,7 @@ impl<'s> Expr<'s> { choice((t![ident].map(Expr::Ident), val)).boxed() }); - let λ = t![λ].ignore_then(expr.clone().delimited_by(t!['('], t![')'])); + let λ = Lambda::parse().map(Expr::Lambda); let decl = t![ident] .then_ignore(t![<-]) @@ -56,13 +57,18 @@ impl<'s> Expr<'s> { then: Box::new(a), or: Box::new(b.unwrap_or_else(|| Expr::Value(Value::Unit))), }) - .labelled("if") + .labelled("🐋") .boxed(); choice((decl, r#if, inline_expr, λ)) }) } } +#[test] +fn parse_expr() { + dbg!(Expr::parse().parse(code("a ← λ ( +- 🍴 )")).unwrap()); +} + pub fn stream(lexer: Lexer<'_>, len: usize) -> SpannedInput<Token<'_>, Span, Stream<Lexer<'_>>> { Stream::from_iter(lexer).spanned((len..len).into()) } |