oak_racket/lexer/
token_type.rs1use oak_core::language::UniversalTokenRole;
2
3#[derive(Debug, PartialEq, Eq, Clone, Copy, Hash)]
8#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
9pub enum TokenType {
10 For,
12 In,
14 Require,
16 Provide,
18 Struct,
20 Class,
22 Match,
24 WithHandlers,
26 Raise,
28
29 Identifier,
31
32 Number,
34 String,
36 Boolean,
38
39 LParen,
41 RParen,
43 LBracket,
45 RBracket,
47 LBrace,
49 RBrace,
51 Comma,
53 Dot,
55 Colon,
57 Semicolon,
59
60 Plus,
62 Minus,
64 Multiply,
66 Divide,
68 Modulo,
70 Equals,
72 NotEquals,
74 LessThan,
76 LessThanOrEqual,
78 GreaterThan,
80 GreaterThanOrEqual,
82 And,
84 Or,
86 Not,
88
89 Comment,
91 Whitespace,
93 Eof,
95}
96
97impl oak_core::language::TokenType for TokenType {
98 type Role = UniversalTokenRole;
99
100 const END_OF_STREAM: Self = TokenType::Eof;
101
102 fn role(&self) -> Self::Role {
103 match self {
104 TokenType::For | TokenType::In | TokenType::Require | TokenType::Provide | TokenType::Struct | TokenType::Class | TokenType::Match | TokenType::WithHandlers | TokenType::Raise => UniversalTokenRole::Keyword,
105 TokenType::Identifier => UniversalTokenRole::Name,
106 TokenType::Number | TokenType::String | TokenType::Boolean => UniversalTokenRole::Literal,
107 TokenType::LParen | TokenType::RParen | TokenType::LBracket | TokenType::RBracket | TokenType::LBrace | TokenType::RBrace | TokenType::Comma | TokenType::Dot | TokenType::Colon | TokenType::Semicolon => UniversalTokenRole::Punctuation,
108 TokenType::Plus
109 | TokenType::Minus
110 | TokenType::Multiply
111 | TokenType::Divide
112 | TokenType::Modulo
113 | TokenType::Equals
114 | TokenType::NotEquals
115 | TokenType::LessThan
116 | TokenType::LessThanOrEqual
117 | TokenType::GreaterThan
118 | TokenType::GreaterThanOrEqual
119 | TokenType::And
120 | TokenType::Or
121 | TokenType::Not => UniversalTokenRole::Operator,
122 TokenType::Comment => UniversalTokenRole::Comment,
123 TokenType::Whitespace => UniversalTokenRole::Whitespace,
124 TokenType::Eof => UniversalTokenRole::Eof,
125 }
126 }
127}