oak_scheme/lexer/
token_type.rs1use oak_core::{Source, Token, TokenType, UniversalElementRole, UniversalTokenRole};
2#[cfg(feature = "serde")]
3use serde::{Deserialize, Serialize};
4
5pub type SchemeToken = Token<SchemeTokenType>;
6
7impl TokenType for SchemeTokenType {
8 type Role = UniversalTokenRole;
9 const END_OF_STREAM: Self = Self::Eof;
10
11 fn is_ignored(&self) -> bool {
12 matches!(self, Self::Whitespace | Self::Newline | Self::Comment | Self::LineComment)
13 }
14
15 fn role(&self) -> Self::Role {
16 match self {
17 Self::Whitespace | Self::Newline => UniversalTokenRole::Whitespace,
18 Self::Comment | Self::LineComment => UniversalTokenRole::Comment,
19 Self::Error => UniversalTokenRole::Error,
20 Self::Eof => UniversalTokenRole::Eof,
21 _ => UniversalTokenRole::None,
22 }
23 }
24}
25
26#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
27#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
28pub enum SchemeTokenType {
29 Whitespace,
31 Newline,
32 Comment,
33
34 LineComment,
36
37 NumberLiteral,
39 StringLiteral,
40 CharacterLiteral,
41 BooleanLiteral,
42
43 Identifier,
45 Symbol,
46
47 Keyword,
49 Define,
50 Lambda,
51 If,
52 Cond,
53 Case,
54 Let,
55 LetStar,
56 Letrec,
57 Begin,
58 Do,
59 Quote,
60 Quasiquote,
61 Unquote,
62 UnquoteSplicing,
63 And,
64 Or,
65 Not,
66 Set,
67
68 LeftParen,
70 RightParen,
71 LeftBracket,
72 RightBracket,
73 LeftBrace,
74 RightBrace,
75 Dot,
76
77 Hash,
79 Quote_,
80 Quasiquote_,
81 Unquote_,
82 UnquoteSplicing_,
83
84 Error,
86 Eof,
87
88 SourceFile,
90}