devalang_core/core/lexer/
token.rs

1use serde::{ Deserialize, Serialize };
2
3#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
4pub struct Token {
5    pub kind: TokenKind,
6    pub lexeme: String,
7    pub indent: usize,
8    pub line: usize,
9    pub column: usize,
10}
11
12impl Token {
13    pub fn is_error(&self) -> bool {
14        match &self.kind {
15            TokenKind::Error(_) => {
16                return true;
17            }
18            _ => {
19                return false;
20            }
21        };
22    }
23}
24
25#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
26pub enum TokenKind {
27    // ───── Keywords ─────
28    At,
29    Tempo,
30    Bank,
31    Loop,
32    Function,
33
34    // ───── Instruments ─────
35    Synth,
36
37    // ───── Literals ─────
38    Identifier,
39    Number,
40    String,
41    Boolean,
42    Arrow,
43
44    // ───── Structures ─────
45    Map,
46    Array,
47
48    // ───── Symbols ─────
49    Colon,
50    Comma,
51    Equals,
52    Dot,
53    Slash,
54    Plus,
55    Asterisk,
56    Minus,
57
58    // ───── Operators ─────
59    DoubleEquals,
60    NotEquals,
61    GreaterEqual,
62    LessEqual,
63    Greater,
64    Less,
65
66    // ───── Brackets ─────
67    LBrace, // {
68    RBrace, // }
69    LBracket, // [
70    RBracket, // ]
71    LParen, // (
72    RParen, // )
73
74    // ───── Quotes ─────
75    Quote, // '
76    DbQuote, // "
77
78    // ───── Formatting ─────
79    Newline,
80    Indent,
81    Dedent,
82    Comment,
83
84    // ───── Conditions ─────
85    If,
86    Else,
87    ElseIf,
88
89    // ───── Special / Internal ─────
90    Whitespace,
91    Unknown,
92    Error(String),
93    EOF,
94}