oak_scheme/lexer/
token_type.rs1use oak_core::{Source, Token, TokenType, UniversalElementRole, UniversalTokenRole};
3
4pub type SchemeToken = Token<SchemeTokenType>;
5
6impl TokenType for SchemeTokenType {
7 type Role = UniversalTokenRole;
8 const END_OF_STREAM: Self = Self::Eof;
9
10 fn is_ignored(&self) -> bool {
11 matches!(self, Self::Whitespace | Self::Newline | Self::Comment | Self::LineComment)
12 }
13
14 fn role(&self) -> Self::Role {
15 match self {
16 Self::Whitespace | Self::Newline => UniversalTokenRole::Whitespace,
17 Self::Comment | Self::LineComment => UniversalTokenRole::Comment,
18 Self::Error => UniversalTokenRole::Error,
19 Self::Eof => UniversalTokenRole::Eof,
20 _ => UniversalTokenRole::None,
21 }
22 }
23}
24
25#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
27#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
28pub enum SchemeTokenType {
29 Whitespace,
31 Newline,
33 Comment,
35 LineComment,
37 NumberLiteral,
39 StringLiteral,
41 CharacterLiteral,
43 BooleanLiteral,
45 Identifier,
47 Symbol,
49 Keyword,
51 Define,
53 Lambda,
55 If,
57 Cond,
59 Case,
61 Let,
63 LetStar,
65 Letrec,
67 Begin,
69 Do,
71 Quote,
73 Quasiquote,
75 Unquote,
77 UnquoteSplicing,
79 And,
81 Or,
83 Not,
85 Set,
87 LeftParen,
89 RightParen,
91 LeftBracket,
93 RightBracket,
95 LeftBrace,
97 RightBrace,
99 Dot,
101 Hash,
103 Quote_,
105 Quasiquote_,
107 Unquote_,
109 UnquoteSplicing_,
111 Error,
113 Eof,
115 SourceFile,
117}