mimium_lang/compiler/parser/
token.rs1use std::fmt;
2
3use crate::ast::operators::Op;
4use crate::interner::Symbol;
5#[derive(Debug, Clone, PartialEq, Eq, Hash)]
6pub enum Comment {
7 SingleLine(String),
8 MultiLine(String),
9}
10
11#[derive(Clone, Debug, PartialEq, Eq, Hash)]
12pub enum Token {
13 Ident(Symbol),
14 MacroExpand(Symbol),
15
16 FloatType,
17 IntegerType,
18 StringType,
19 StructType,
20
21 Float(String),
22 Int(i64),
23 Str(String),
24
25 Op(Op),
26 SelfLit,
27 Now,
28 SampleRate,
29 Comma,
30 Dot, DoubleDot, Colon,
35 SemiColon,
36
37 Let,
38 LetRec,
39 Assign,
40
41 ParenBegin,
42 ParenEnd,
43 ArrayBegin,
44 ArrayEnd,
45 BlockBegin,
46 BlockEnd,
47 LambdaArgBeginEnd,
48 BackQuote,
49 Dollar,
50
51 Function, Macro, Arrow, LeftArrow, PlaceHolder, If,
58 Else,
59
60 Include,
63 Sharp, StageKwd, Main, LineBreak,
68
69 Comment(Comment),
70}
71
72impl fmt::Display for Token {
73 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
74 match self {
75 Token::Ident(x) => write!(f, "{x}"),
76 Token::MacroExpand(x) => write!(f, "{x}!"),
77 Token::FloatType => write!(f, "float"),
78 Token::IntegerType => write!(f, "int"),
79 Token::StringType => write!(f, "string"),
80 Token::StructType => write!(f, "struct"),
81 Token::Int(x) => write!(f, "{x}"),
82 Token::Float(x) => write!(f, "{x}"),
83 Token::Str(x) => write!(f, "\"{x}\""),
84 Token::Op(x) => write!(f, "{x}"),
85 Token::SelfLit => write!(f, "self"),
86 Token::Now => write!(f, "now"),
87 Token::SampleRate => write!(f, "samplerate"),
88 Token::Comma => write!(f, ","),
89 Token::Dot => write!(f, "."),
90 Token::DoubleDot => write!(f, ".."),
91 Token::Colon => write!(f, ":"),
92 Token::SemiColon => write!(f, ";"),
93 Token::Let => write!(f, "let"),
94 Token::LetRec => write!(f, "letrec"),
95 Token::Assign => write!(f, "="),
96 Token::ParenBegin => write!(f, "("),
97 Token::ParenEnd => write!(f, ")"),
98 Token::ArrayBegin => write!(f, "["),
99 Token::ArrayEnd => write!(f, "]"),
100 Token::BlockBegin => write!(f, "{{"),
101 Token::BlockEnd => write!(f, "}}"),
102 Token::LambdaArgBeginEnd => write!(f, "|"),
103 Token::Function => write!(f, "fn"),
104 Token::Macro => write!(f, "macro"),
105 Token::Arrow => write!(f, "->"),
106 Token::LeftArrow => write!(f, "<-"),
107 Token::PlaceHolder => write!(f, "_"),
108 Token::If => write!(f, "if"),
109 Token::Else => write!(f, "else"),
110 Token::Include => write!(f, "include"),
111 Token::LineBreak => write!(f, "linebreak"),
112 Token::Comment(_) => write!(f, "comment"),
113 Token::BackQuote => write!(f, "`"),
114 Token::Dollar => write!(f, "$"),
115 Token::StageKwd => write!(f, "stage"),
116 Token::Main => write!(f, "main"),
117 Token::Sharp => write!(f, "#"),
118 }
119 }
120}