charon_core/
lib.rs

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)>>;