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