oak_j/lexer/
token_type.rs1use oak_core::{TokenType, UniversalTokenRole};
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
5#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6pub enum JTokenType {
7 Whitespace,
9 Newline,
11 Comment,
13
14 StringLiteral,
16 NumberLiteral,
18 Identifier,
20
21 Equal,
25 Dot,
27 Colon,
29
30 IsGlobal,
33 IsLocal,
35
36 Plus,
39 Minus,
41 Star,
43 Percent,
45 Dollar,
47 Comma,
49 Hash,
51 Slash,
53 Backslash,
55 Pipe,
57 Ampersand,
59 Caret,
61 Tilde,
63 Less,
65 Greater,
67
68 LeftParen,
71 RightParen,
73 LeftBracket,
75 RightBracket,
77 LeftBrace,
79 RightBrace,
81
82 Eof,
85 Error,
87}
88
89impl JTokenType {
90 pub fn is_keyword(&self) -> bool {
92 false
93 }
94
95 pub fn is_punctuation(&self) -> bool {
97 matches!(self, Self::LeftParen | Self::RightParen | Self::LeftBracket | Self::RightBracket | Self::LeftBrace | Self::RightBrace)
98 }
99
100 pub fn is_ignored(&self) -> bool {
102 matches!(self, Self::Whitespace | Self::Newline | Self::Comment)
103 }
104}
105
106impl TokenType for JTokenType {
107 type Role = UniversalTokenRole;
108 const END_OF_STREAM: Self = Self::Eof;
109
110 fn role(&self) -> Self::Role {
111 match self {
112 Self::Whitespace | Self::Newline => UniversalTokenRole::Whitespace,
113 Self::Comment => UniversalTokenRole::Comment,
114 Self::StringLiteral | Self::NumberLiteral => UniversalTokenRole::Literal,
115 Self::Identifier => UniversalTokenRole::Name,
116 _ if self.is_punctuation() => UniversalTokenRole::Punctuation,
117 Self::Eof | Self::Error => UniversalTokenRole::None,
118 _ => UniversalTokenRole::Operator,
119 }
120 }
121}