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        matches!(&self.kind, TokenKind::Error(_))
15    }
16}
17
18#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
19pub enum TokenKind {
20    // ───── Keywords ─────
21    At,
22    Tempo,
23    Bank,
24    Loop,
25    Function,
26    As,
27    On,
28    Emit,
29
30    // ───── Instruments ─────
31    Synth,
32
33    // ───── Literals ─────
34    Identifier,
35    Number,
36    String,
37    Boolean,
38    Arrow,
39
40    // ───── Structures ─────
41    Map,
42    Array,
43
44    // ───── Symbols ─────
45    Colon,
46    Comma,
47    Equals,
48    Dot,
49    Slash,
50    Plus,
51    Asterisk,
52    Minus,
53
54    // ───── Operators ─────
55    DoubleEquals,
56    NotEquals,
57    GreaterEqual,
58    LessEqual,
59    Greater,
60    Less,
61
62    // ───── Brackets ─────
63    LBrace,   // {
64    RBrace,   // }
65    LBracket, // [
66    RBracket, // ]
67    LParen,   // (
68    RParen,   // )
69
70    // ───── Quotes ─────
71    Quote,   // '
72    DbQuote, // "
73
74    // ───── Formatting ─────
75    Newline,
76    Indent,
77    Dedent,
78    Comment,
79
80    // ───── Conditions ─────
81    If,
82    Else,
83    ElseIf,
84
85    // ───── Special / Internal ─────
86    Whitespace,
87    Unknown,
88    Error(String),
89    EOF,
90}