use oak_core::{Token, TokenType, UniversalTokenRole};
pub type MsilToken = Token<MsilTokenType>;
impl TokenType for MsilTokenType {
type Role = UniversalTokenRole;
const END_OF_STREAM: Self = Self::Eof;
fn is_ignored(&self) -> bool {
false
}
fn role(&self) -> Self::Role {
match self {
Self::Whitespace => UniversalTokenRole::Whitespace,
Self::CommentToken => UniversalTokenRole::Comment,
Self::IdentifierToken => UniversalTokenRole::Name,
Self::NumberToken => UniversalTokenRole::Literal,
Self::StringToken => UniversalTokenRole::Literal,
Self::AssemblyKeyword | Self::ExternKeyword | Self::ModuleKeyword | Self::ClassKeyword | Self::MethodKeyword | Self::PublicKeyword | Self::PrivateKeyword | Self::StaticKeyword | Self::Keyword => UniversalTokenRole::Keyword,
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,
Self::Eof => UniversalTokenRole::Eof,
Self::Error | Self::ErrorNode => UniversalTokenRole::Error,
_ => UniversalTokenRole::None,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum MsilTokenType {
Root,
Assembly,
AssemblyExtern,
Module,
Class,
Method,
Instruction,
Label,
Directive,
Type,
Identifier,
Number,
String,
Comment,
ErrorNode,
AssemblyKeyword,
ExternKeyword,
ModuleKeyword,
ClassKeyword,
MethodKeyword,
PublicKeyword,
PrivateKeyword,
StaticKeyword,
Keyword,
LeftBrace,
RightBrace,
LeftParen,
RightParen,
LeftBracket,
RightBracket,
Dot,
Colon,
Semicolon,
Comma,
Equal,
Slash,
IdentifierToken,
NumberToken,
StringToken,
Whitespace,
CommentToken,
Eof,
Error,
}