raw
1use std::borrow::Cow;
2
3use chumsky::prelude::Spanned;
4
5#[derive(Debug, Clone, Hash, PartialEq, Eq)]
6pub struct Ident<'src>(pub Cow<'src, str>);
7
8#[derive(Debug, Clone, PartialEq)]
9pub enum Token<'src> {
10 Ident(Ident<'src>),
11
12 Bool(bool),
13 Integer(i64),
14 Decimal(f64),
15 String(Cow<'src, str>),
16 Regex(Cow<'src, str>),
17
18 Add,
19 Sub,
20 Mul,
21 Div,
22 Mod,
23
24 Equal,
25 NotEqual,
26 GreaterThan,
27 LessThan,
28 GreaterEqual,
29 LessEqual,
30
31 Not,
32
33 And,
34 Or,
35
36 ParenOpen,
37 ParenClose,
38 BracketOpen,
39 BracketClose,
40
41 Comma,
42 Period,
43}
44
45#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
46pub enum BinOp {
47 Add,
48 Sub,
49 Mul,
50 Div,
51 Mod,
52
53 Equal,
54 NotEqual,
55 GreaterThan,
56 LessThan,
57 GreaterEqual,
58 LessEqual,
59
60 And,
61 Or,
62}
63
64#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
65pub enum UnOp {
66 Not,
67
68 Plus,
69 Neg,
70}
71
72#[derive(Debug, Clone, PartialEq)]
73pub enum Expr<'src> {
74 Ident(Ident<'src>),
75
76 Bool(bool),
77 Integer(i64),
78 Decimal(f64),
79 String(Cow<'src, str>),
80 Regex(Cow<'src, str>),
81
82 Function(Box<Spanned<Self>>, Spanned<Vec<Spanned<Self>>>),
83 Method(
84 Box<Spanned<Self>>,
85 Spanned<Ident<'src>>,
86 Spanned<Vec<Spanned<Self>>>,
87 ),
88
89 Member(Box<Spanned<Self>>, Spanned<Ident<'src>>),
90 Index(Box<Spanned<Self>>, Box<Spanned<Self>>),
91
92 BinOp(Spanned<BinOp>, Box<Spanned<Self>>, Box<Spanned<Self>>),
93 UnOp(Spanned<UnOp>, Box<Spanned<Self>>),
94
95 Group(Box<Spanned<Self>>),
96}
97