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)]
28#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
29pub enum SchemeTokenType {
30 Whitespace,
32 Newline,
34 Comment,
36 LineComment,
38 NumberLiteral,
40 StringLiteral,
42 CharacterLiteral,
44 BooleanLiteral,
46 Identifier,
48 Symbol,
50 Keyword,
52 Define,
54 Lambda,
56 If,
58 Cond,
60 Case,
62 Let,
64 LetStar,
66 Letrec,
68 Begin,
70 Do,
72 Quote,
74 Quasiquote,
76 Unquote,
78 UnquoteSplicing,
80 And,
82 Or,
84 Not,
86 Set,
88 LeftParen,
90 RightParen,
92 LeftBracket,
94 RightBracket,
96 LeftBrace,
98 RightBrace,
100 Dot,
102 Hash,
104 Quote_,
106 Quasiquote_,
108 Unquote_,
110 UnquoteSplicing_,
112 Error,
114 Eof,
116 SourceFile,
118}