1pub mod evaluator;
2mod lexer;
3mod parser;
4mod stdlib;
5pub mod utils;
6
7use charon_ariadne::Report;
8use std::collections::HashMap;
9use std::fmt;
10
11#[derive(Debug, Clone, PartialEq)]
12pub enum Token {
13 Value(f64),
14 Function(String),
15 FunctionLiteral(String),
16 Container(String),
17 ContainerLiteral(String),
18 Lambda(Vec<Token>),
19 ActiveLambda(Vec<Token>),
20 Parameter(usize),
21 Atom(String),
22 Char(char),
23 Special(String),
24 Group(Vec<Token>),
25 List(Vec<Token>),
26 Iterator(Vec<Token>),
27 Null,
28 Void,
29}
30
31impl fmt::Display for Token {
32 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
33 write!(f, "{:?}", self)
34 }
35}
36
37#[derive(PartialEq, Debug, Default, Clone)]
38pub struct CodeBlock {
39 pub container: Option<String>,
40 pub cases: Option<Vec<(Tokens, Tokens)>>,
41 pub default_case: Tokens,
42}
43
44#[derive(Debug, Clone, PartialEq, Eq)]
45pub enum Range {
46 Full(std::ops::RangeInclusive<usize>),
47 To(std::ops::RangeFrom<usize>),
48 From(std::ops::RangeTo<usize>),
49}
50
51pub type Tokens = Vec<Token>;
52pub(crate) type FunctionRef = fn(&mut State, Tokens) -> Result<Token, Report>;
53pub type State = HashMap<String, Vec<(Tokens, Tokens)>>;