oak_msil/lexer/
token_type.rs1use oak_core::{Token, TokenType, UniversalTokenRole};
2
3pub type MsilToken = Token<MsilTokenType>;
5
6impl TokenType for MsilTokenType {
7 type Role = UniversalTokenRole;
8 const END_OF_STREAM: Self = Self::Eof;
9
10 fn is_ignored(&self) -> bool {
11 false
12 }
13
14 fn role(&self) -> Self::Role {
15 match self {
16 Self::Whitespace => UniversalTokenRole::Whitespace,
17 Self::CommentToken => UniversalTokenRole::Comment,
18 Self::IdentifierToken => UniversalTokenRole::Name,
19 Self::NumberToken => UniversalTokenRole::Literal,
20 Self::StringToken => UniversalTokenRole::Literal,
21 Self::AssemblyKeyword | Self::ExternKeyword | Self::ModuleKeyword | Self::ClassKeyword | Self::MethodKeyword | Self::PublicKeyword | Self::PrivateKeyword | Self::StaticKeyword | Self::Keyword => UniversalTokenRole::Keyword,
22 Self::LeftBrace | Self::RightBrace | Self::LeftParen | Self::RightParen | Self::LeftBracket | Self::RightBracket | Self::Dot | Self::Colon | Self::Semicolon | Self::Comma | Self::Equal | Self::Slash => UniversalTokenRole::Operator,
23 Self::Eof => UniversalTokenRole::Eof,
24 Self::Error | Self::ErrorNode => UniversalTokenRole::Error,
25 _ => UniversalTokenRole::None,
26 }
27 }
28}
29
30#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
32#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
33pub enum MsilTokenType {
34 Root,
36 Assembly,
38 AssemblyExtern,
40 Module,
42 Class,
44 Method,
46 Instruction,
48 Label,
50 Directive,
52 Type,
54 Identifier,
56 Number,
58 String,
60 Comment,
62 ErrorNode,
64
65 AssemblyKeyword,
67 ExternKeyword,
69 ModuleKeyword,
71 ClassKeyword,
73 MethodKeyword,
75 PublicKeyword,
77 PrivateKeyword,
79 StaticKeyword,
81 Keyword,
83
84 LeftBrace,
86 RightBrace,
88 LeftParen,
90 RightParen,
92 LeftBracket,
94 RightBracket,
96 Dot,
98 Colon,
100 Semicolon,
102 Comma,
104 Equal,
106 Slash,
108
109 IdentifierToken,
111 NumberToken,
113 StringToken,
115
116 Whitespace,
118 CommentToken,
120 Eof,
122 Error,
124}