Skip to main content

oak_msil/parser/
element_type.rs

1use oak_core::{ElementType, Parser, UniversalElementRole};
2#[cfg(feature = "serde")]
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
6#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
7pub enum MsilElementType {
8    // 节点种类
9    Root,
10    Assembly,
11    AssemblyExtern,
12    Module,
13    Class,
14    Method,
15    Instruction,
16    Label,
17    Directive,
18    Type,
19    Identifier,
20    Number,
21    String,
22    Comment,
23    ErrorNode,
24
25    // 词法种类 - 关键
26    AssemblyKeyword, // .assembly
27    ExternKeyword,   // extern
28    ModuleKeyword,   // .module
29    ClassKeyword,    // .class
30    MethodKeyword,   // .method
31    PublicKeyword,   // public
32    PrivateKeyword,  // private
33    StaticKeyword,   // static
34    Keyword,         // other keywords
35    // 词法种类 - 符号
36    LeftBrace,    // {
37    RightBrace,   // }
38    LeftParen,    // (
39    RightParen,   // )
40    LeftBracket,  // [
41    RightBracket, // ]
42    Dot,          // .
43    Colon,        // :
44    Semicolon,    // ;
45    Comma,        // ,
46    Equal,        // =
47    Slash,        // /
48
49    // 词法种类 - 字面
50    IdentifierToken,
51    NumberToken,
52    StringToken,
53
54    // 词法种类 - 其他
55    Whitespace,
56    CommentToken,
57    Eof,
58    Error,
59}
60
61impl ElementType for MsilElementType {
62    type Role = UniversalElementRole;
63
64    fn role(&self) -> Self::Role {
65        match self {
66            _ => UniversalElementRole::None,
67        }
68    }
69}
70
71impl From<crate::lexer::token_type::MsilTokenType> for MsilElementType {
72    fn from(token: crate::lexer::token_type::MsilTokenType) -> Self {
73        match token {
74            crate::lexer::token_type::MsilTokenType::Root => MsilElementType::Root,
75            crate::lexer::token_type::MsilTokenType::Assembly => MsilElementType::Assembly,
76            crate::lexer::token_type::MsilTokenType::AssemblyExtern => MsilElementType::AssemblyExtern,
77            crate::lexer::token_type::MsilTokenType::Module => MsilElementType::Module,
78            crate::lexer::token_type::MsilTokenType::Class => MsilElementType::Class,
79            crate::lexer::token_type::MsilTokenType::Method => MsilElementType::Method,
80            crate::lexer::token_type::MsilTokenType::Instruction => MsilElementType::Instruction,
81            crate::lexer::token_type::MsilTokenType::Label => MsilElementType::Label,
82            crate::lexer::token_type::MsilTokenType::Directive => MsilElementType::Directive,
83            crate::lexer::token_type::MsilTokenType::Type => MsilElementType::Type,
84            crate::lexer::token_type::MsilTokenType::Identifier => MsilElementType::Identifier,
85            crate::lexer::token_type::MsilTokenType::Number => MsilElementType::Number,
86            crate::lexer::token_type::MsilTokenType::String => MsilElementType::String,
87            crate::lexer::token_type::MsilTokenType::Comment => MsilElementType::Comment,
88            crate::lexer::token_type::MsilTokenType::ErrorNode => MsilElementType::ErrorNode,
89            crate::lexer::token_type::MsilTokenType::AssemblyKeyword => MsilElementType::AssemblyKeyword,
90            crate::lexer::token_type::MsilTokenType::ExternKeyword => MsilElementType::ExternKeyword,
91            crate::lexer::token_type::MsilTokenType::ModuleKeyword => MsilElementType::ModuleKeyword,
92            crate::lexer::token_type::MsilTokenType::ClassKeyword => MsilElementType::ClassKeyword,
93            crate::lexer::token_type::MsilTokenType::MethodKeyword => MsilElementType::MethodKeyword,
94            crate::lexer::token_type::MsilTokenType::PublicKeyword => MsilElementType::PublicKeyword,
95            crate::lexer::token_type::MsilTokenType::PrivateKeyword => MsilElementType::PrivateKeyword,
96            crate::lexer::token_type::MsilTokenType::StaticKeyword => MsilElementType::StaticKeyword,
97            crate::lexer::token_type::MsilTokenType::Keyword => MsilElementType::Keyword,
98            crate::lexer::token_type::MsilTokenType::LeftBrace => MsilElementType::LeftBrace,
99            crate::lexer::token_type::MsilTokenType::RightBrace => MsilElementType::RightBrace,
100            crate::lexer::token_type::MsilTokenType::LeftParen => MsilElementType::LeftParen,
101            crate::lexer::token_type::MsilTokenType::RightParen => MsilElementType::RightParen,
102            crate::lexer::token_type::MsilTokenType::LeftBracket => MsilElementType::LeftBracket,
103            crate::lexer::token_type::MsilTokenType::RightBracket => MsilElementType::RightBracket,
104            crate::lexer::token_type::MsilTokenType::Dot => MsilElementType::Dot,
105            crate::lexer::token_type::MsilTokenType::Colon => MsilElementType::Colon,
106            crate::lexer::token_type::MsilTokenType::Semicolon => MsilElementType::Semicolon,
107            crate::lexer::token_type::MsilTokenType::Comma => MsilElementType::Comma,
108            crate::lexer::token_type::MsilTokenType::Equal => MsilElementType::Equal,
109            crate::lexer::token_type::MsilTokenType::Slash => MsilElementType::Slash,
110            crate::lexer::token_type::MsilTokenType::IdentifierToken => MsilElementType::IdentifierToken,
111            crate::lexer::token_type::MsilTokenType::NumberToken => MsilElementType::NumberToken,
112            crate::lexer::token_type::MsilTokenType::StringToken => MsilElementType::StringToken,
113            crate::lexer::token_type::MsilTokenType::Whitespace => MsilElementType::Whitespace,
114            crate::lexer::token_type::MsilTokenType::CommentToken => MsilElementType::CommentToken,
115            crate::lexer::token_type::MsilTokenType::Eof => MsilElementType::Eof,
116            crate::lexer::token_type::MsilTokenType::Error => MsilElementType::Error,
117        }
118    }
119}