Diffstat (limited to 'src/parser/fun.rs')
-rw-r--r--src/parser/fun.rs127
1 files changed, 5 insertions, 122 deletions
diff --git a/src/parser/fun.rs b/src/parser/fun.rs
index 6222687..8989664 100644
--- a/src/parser/fun.rs
+++ b/src/parser/fun.rs
@@ -6,74 +6,8 @@ use super::util::*;
use crate::exec::Argc;
use crate::lexer::Token;
-#[derive(Debug, Clone)]
-pub enum Function<'s> {
- Both(Spanned<Λ<'s>>, usize),
- And(Vec<Spanned<Λ<'s>>>),
- Take(u64),
- If { then: Λ<'s>, or: Λ<'s> },
- Array(Option<u64>),
- Append,
- Map(Spanned<Λ<'s>>),
- Dup,
- Flip,
- Python(Argc),
- Matches,
- Eq,
- // Reverse,
- Zap(Option<u64>),
- Del,
- Debug,
- Add,
- Sub,
- IndexHashMap,
- Not,
- Mul,
- Windows,
- Pow,
- Type,
- Ne,
- Merge,
- Sqrt,
- Lt,
- Gt,
- Ge,
- Le,
- Shl,
- Shr,
- Neg,
- BitAnd,
- Length,
- Or,
- Xor,
- Div,
- Fold(Spanned<Λ<'s>>),
- Mod,
- Index,
- Mask,
- Group,
- Split,
- Open,
- First,
- Last,
- Reduce(Spanned<Λ<'s>>),
- Scan(Spanned<Λ<'s>>),
- Range,
- With(Spanned<Λ<'s>>),
- HashMap,
- Call,
- Sort,
- Zip,
- Identity,
- EmptySet,
- In,
- Setify,
- Ident(&'s str),
- Define(&'s str),
-}
-
impl<'s> Λ<'s> {
- pub fn parse(
+ pub(crate) fn parse(
exp: parser![Spanned<Expr<'s>>],
) -> parser![Spanned<Self>] {
exp.repeated()
@@ -85,62 +19,11 @@ impl<'s> Λ<'s> {
}
impl<'s> Function<'s> {
- pub fn parse(λ: parser![Λ<'s>]) -> parser![Self] {
+ pub(crate) fn parse(λ: parser![Λ<'s>]) -> parser![Self] {
use Function::*;
- let basic = select! {
- Token::Dup => Dup,
- Token::Debug => Debug,
- Token::Flip => Flip,
- // Token::Reverse => Reverse,
- Token::Zap => Zap(None),
- Token::Add => Add,
- Token::ClosingBracket('}') => Setify,
- Token::Set => EmptySet,
- Token::Identity => Identity,
- Token::Del => Del,
- Token::HashMap => HashMap,
- Token::Get => IndexHashMap,
- Token::Sub => Sub,
- Token::Windows => Windows,
- Token::Mul => Mul,
- Token::Pow => Pow,
- Token::Sqrt => Sqrt,
- Token::Lt => Lt,
- Token::Not => Not,
- Token::In => In,
- Token::Index => Index,
- Token::Merge => Merge,
- Token::Shl => Shl,
- Token::Group => Group,
- Token::Shr => Shr,
- Token::Append => Append,
- Token::Neg => Neg,
- Token::Eq => Eq,
- Token::Gt => Gt,
- Token::Ge => Ge,
- Token::Length => Length,
- Token::Range => Range,
- Token::Le => Le,
- Token::BitAnd => BitAnd,
- Token::Or => Or,
- Token::Xor => Xor,
- Token::Sort => Sort,
- Token::Zip => Zip,
- Token::Div => Div,
- Token::Mod => Mod,
- Token::Open => Open,
- Token::Mask => Mask,
- Token::First => First,
- Token::Ne => Ne,
- Token::Type => Type,
- Token::Matches => Matches,
- Token::Last => Last,
- Token::Ident(x) => Ident(x),
- }
- .labelled("token");
let fn_param = choice((
- basic
+ Self::basic()
.map_with(|x, e| {
Λ::of(vec![Expr::Function(x).spun(e.span())])
})
@@ -212,7 +95,7 @@ impl<'s> Function<'s> {
.then(t![int])
.map(|(a, b)| Python(Argc::takes(a as _).into(b as _))),
choice((
- just(Token::ArrayN)
+ just(Token::Array)
.ignore_then(t![int].map(|x| Array(Some(x)))),
t![']'].map(|_| Array(None)),
))
@@ -235,7 +118,7 @@ impl<'s> Function<'s> {
.labelled("if")
.boxed(),
t![->].ignore_then(t![ident]).map(Define).labelled("def"),
- basic,
+ Self::basic(),
))
.boxed()
.labelled("function")