use oak_core::{Token, TokenType, UniversalTokenRole};
pub type MatlabToken = Token<MatlabTokenType>;
impl MatlabTokenType {
pub fn is_token(&self) -> bool {
!self.is_element()
}
pub fn is_element(&self) -> bool {
matches!(self, Self::Script | Self::FunctionDef | Self::ClassDef | Self::Block | Self::Expression | Self::Statement)
}
}
impl TokenType for MatlabTokenType {
type Role = UniversalTokenRole;
const END_OF_STREAM: Self = Self::Error;
fn is_ignored(&self) -> bool {
false
}
fn role(&self) -> Self::Role {
match self {
_ => UniversalTokenRole::None,
}
}
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[repr(u8)]
pub enum MatlabTokenType {
Whitespace,
Newline,
Comment,
BlockComment,
Identifier,
Number,
String,
Character,
Function,
End,
If,
Else,
Elseif,
While,
For,
Break,
Continue,
Return,
Switch,
Case,
Otherwise,
Try,
Catch,
Global,
Persistent,
Classdef,
Properties,
Methods,
Events,
Plus, Minus, Times, Divide, Power, LeftDivide, DotTimes, DotDivide, DotPower, DotLeftDivide,
Equal, NotEqual, Less, Greater, LessEqual, GreaterEqual,
And, Or, Not, AndAnd, OrOr,
Assign,
LeftParen, RightParen, LeftBracket, RightBracket, LeftBrace, RightBrace, Semicolon, Comma, Dot, Colon, Question, At,
Transpose, DotTranspose,
Operator,
Delimiter,
Error,
Script,
FunctionDef,
ClassDef,
Block,
Expression,
Statement,
Eof,
}