1use std::fmt::{Display, Formatter};
2
3#[allow(unused)]
4#[derive(Debug, Clone, PartialEq)]
5pub enum Token {
6 String(String),
7 FormatString(String),
8 Int(i64),
9 Float(f32),
10 Identifier(String),
11 Boolean(bool),
12 Keyword(String),
14 BraceLeft,
16 BraceRight,
18 BracketLeft,
20 BracketRight,
22 ParenLeft,
24 ParenRight,
26 Dot,
28 Colon,
30 ScopeSymbol,
32 Assign,
34 Comma,
36 Plus,
38 Minus,
40 Star,
42 Slash,
44 Mod,
46 Greater,
48 Less,
50 LessEqual,
52 GreaterEqual,
54 Equal,
56 NotEqual,
58 Arrow,
60 Not,
62 And,
64 Vertical,
66 Annotation,
68 BitAnd,
70 Eof,
71}
72impl Display for Token {
73 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
74 match self {
75 Token::String(s) => write!(f, "String({s})"),
76 Token::Int(i) => write!(f, "Int({i})"),
77 Token::Float(f0) => write!(f, "Float({f0})"),
78 Token::Identifier(i) => write!(f, "Identifier({i})"),
79 Token::Keyword(kw) => write!(f, "Keyword({kw})"),
80 Token::BraceLeft => write!(f, "Symbol(()"),
81 Token::BraceRight => write!(f, "Symbol())"),
82 Token::BracketLeft => write!(f, "Symbol([)"),
83 Token::BracketRight => write!(f, "Symbol(])"),
84 Token::ParenLeft => write!(f, "Symbol({{)"),
85 Token::ParenRight => write!(f, "Symbol(}})"),
86 Token::Dot => write!(f, "Symbol(.)"),
87 Token::Colon => write!(f, "Symbol(:)"),
88 Token::ScopeSymbol => write!(f, "Symbol(::)"),
89 Token::Assign => write!(f, "Symbol(=)"),
90 Token::Comma => write!(f, "Symbol(,)"),
91 Token::Plus => write!(f, "Symbol(+)"),
92 Token::Minus => write!(f, "Symbol(-)"),
93 Token::Star => write!(f, "Symbol(*)"),
94 Token::Slash => write!(f, "Symbol(/)"),
95 Token::Mod => write!(f, "Symbol(%)"),
96 Token::Greater => write!(f, "Symbol(>)"),
97 Token::Less => write!(f, "Symbol(<)"),
98 Token::Equal => write!(f, "Symbol(==)"),
99 Token::NotEqual => write!(f, "Symbol(!=)"),
100 Token::Arrow => write!(f, "Symbol(->)"),
101 Token::Eof => write!(f, "EOF"),
102 Token::Not => write!(f, "Symbol(!)"),
103 Token::And => write!(f, "Symbol(&&)"),
104 Token::Vertical => write!(f, "Symbol(|)"),
105 Token::Annotation => write!(f, "Symbol(@)"),
106 Token::BitAnd => write!(f, "Symbol(&)"),
107 Token::FormatString(s) => write!(f, "FormatString({s})"),
108 Token::LessEqual => write!(f, "Symbol(<=)"),
109 Token::GreaterEqual => write!(f, "Symbol(>=)"),
110 _ => todo!(),
111 }
112 }
113}
114impl Token {
115 #[allow(unused)]
116 pub fn token_id(&self) -> i8 {
117 match self {
118 Token::String(_) => 0,
119 Token::Int(_) => 1,
120 Token::Float(_) => 2,
121 Token::Identifier(_) => 3,
122 Token::Keyword(_) => 4,
123 Token::BraceLeft => 5,
124 Token::BraceRight => 6,
125 Token::BracketLeft => 7,
126 Token::BracketRight => 8,
127 Token::ParenLeft => 9,
128 Token::ParenRight => 10,
129 Token::Dot => 11,
130 Token::Comma => 12,
131 Token::Eof => 13,
132 Token::Colon => 14,
133 Token::Assign => 15,
134 Token::Plus => 16,
135 Token::Star => 17,
136 Token::Greater => 18,
137 Token::Less => 19,
138 Token::Equal => 20,
139 Token::Minus => 21,
140 Token::Slash => 22,
141 Token::Mod => 23,
142 Token::ScopeSymbol => 24,
143 Token::NotEqual => 25,
144 Token::Arrow => 26,
145 Token::Not => 27,
146 Token::And => 28,
147 Token::Vertical => 29,
148 Token::Annotation => 30,
149 _ => todo!(),
150 }
151 }
152 pub fn is_colon(&self) -> bool {
153 matches!(self, Token::Colon)
154 }
155 pub fn is_parenthesis_left(&self) -> bool {
156 matches!(self, Token::ParenLeft)
157 }
158 pub fn is_keyword(&self, keyword: &str) -> bool {
159 match self {
160 Token::Keyword(k) => {
161 if k == keyword {
162 return true;
163 }
164 false
165 }
166 _ => false,
167 }
168 }
169 pub fn is_assign(&self) -> bool {
170 matches!(self, Token::Assign)
171 }
172 pub fn get_identifier_value(&self) -> &str {
173 match self {
174 Token::Identifier(s) => s.as_str(),
175 _ => "",
176 }
177 }
178}