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    As,
34    On,
35    Emit,
36
37    // ───── Instruments ─────
38    Synth,
39
40    // ───── Literals ─────
41    Identifier,
42    Number,
43    String,
44    Boolean,
45    Arrow,
46
47    // ───── Structures ─────
48    Map,
49    Array,
50
51    // ───── Symbols ─────
52    Colon,
53    Comma,
54    Equals,
55    Dot,
56    Slash,
57    Plus,
58    Asterisk,
59    Minus,
60
61    // ───── Operators ─────
62    DoubleEquals,
63    NotEquals,
64    GreaterEqual,
65    LessEqual,
66    Greater,
67    Less,
68
69    // ───── Brackets ─────
70    LBrace,   // {
71    RBrace,   // }
72    LBracket, // [
73    RBracket, // ]
74    LParen,   // (
75    RParen,   // )
76
77    // ───── Quotes ─────
78    Quote,   // '
79    DbQuote, // "
80
81    // ───── Formatting ─────
82    Newline,
83    Indent,
84    Dedent,
85    Comment,
86
87    // ───── Conditions ─────
88    If,
89    Else,
90    ElseIf,
91
92    // ───── Special / Internal ─────
93    Whitespace,
94    Unknown,
95    Error(String),
96    EOF,
97}