Skip to main content

oak_matlab/lexer/
token_type.rs

1use oak_core::{Source, Token, TokenType, UniversalElementRole, UniversalTokenRole};
2#[cfg(feature = "serde")]
3use serde::{Deserialize, Serialize};
4
5pub type MatlabToken = Token<MatlabTokenType>;
6
7impl MatlabTokenType {
8    pub fn is_token(&self) -> bool {
9        !self.is_element()
10    }
11
12    pub fn is_element(&self) -> bool {
13        matches!(self, Self::Script | Self::FunctionDef | Self::ClassDef | Self::Block | Self::Expression | Self::Statement)
14    }
15}
16
17impl TokenType for MatlabTokenType {
18    type Role = UniversalTokenRole;
19    const END_OF_STREAM: Self = Self::Error;
20
21    fn is_ignored(&self) -> bool {
22        false
23    }
24
25    fn role(&self) -> Self::Role {
26        match self {
27            _ => UniversalTokenRole::None,
28        }
29    }
30}
31
32#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
33#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
34#[repr(u8)]
35pub enum MatlabTokenType {
36    // 基础标记
37    Whitespace,
38    Newline,
39    Comment,
40    BlockComment,
41
42    // 标识符和字面量
43    Identifier,
44    Number,
45    String,
46    Character,
47
48    // 关键字
49    Function,
50    End,
51    If,
52    Else,
53    Elseif,
54    While,
55    For,
56    Break,
57    Continue,
58    Return,
59    Switch,
60    Case,
61    Otherwise,
62    Try,
63    Catch,
64    Global,
65    Persistent,
66    Classdef,
67    Properties,
68    Methods,
69    Events,
70
71    // 运算符
72    Plus,          // +
73    Minus,         // -
74    Times,         // *
75    Divide,        // /
76    Power,         // ^
77    LeftDivide,    // \
78    DotTimes,      // .*
79    DotDivide,     // ./
80    DotPower,      // .^
81    DotLeftDivide, // .\
82
83    // 比较运算符
84    Equal,        // ==
85    NotEqual,     // ~=
86    Less,         // <
87    Greater,      // >
88    LessEqual,    // <=
89    GreaterEqual, // >=
90
91    // 逻辑运算符
92    And,    // &
93    Or,     // |
94    Not,    // ~
95    AndAnd, // &&
96    OrOr,   // ||
97
98    // 赋值运算符
99    Assign, // =
100
101    // 分隔符
102    LeftParen,    // (
103    RightParen,   // )
104    LeftBracket,  // [
105    RightBracket, // ]
106    LeftBrace,    // {
107    RightBrace,   // }
108    Semicolon,    // ;
109    Comma,        // ,
110    Dot,          // .
111    Colon,        // :
112    Question,     // ?
113    At,           // ↯
114
115    // 特殊运算符
116    Transpose,    // '
117    DotTranspose, // .'
118
119    // 泛化类型
120    Operator,
121    Delimiter,
122
123    // 错误处理
124    Error,
125
126    // 文档结构
127    Script,
128    FunctionDef,
129    ClassDef,
130    Block,
131    Expression,
132    Statement,
133
134    // EOF
135    Eof,
136}