diff options
| author | Mike Buland <mike@xagasoft.com> | 2026-08-19 13:05:01 -0700 |
|---|---|---|
| committer | Mike Buland <mike@xagasoft.com> | 2026-08-19 13:05:01 -0700 |
| commit | d1e78b4a3454984db74ebf2a302a64b985ce6de4 (patch) | |
| tree | d3953cd8aad144a1be131ff3c38688f93cbccbb5 /deepcrow/src/lexer.rs | |
| parent | 5602585e7afe431f25e68f30ac54761db2a710e5 (diff) | |
| download | deepcrow-d1e78b4a3454984db74ebf2a302a64b985ce6de4.tar.gz deepcrow-d1e78b4a3454984db74ebf2a302a64b985ce6de4.tar.bz2 deepcrow-d1e78b4a3454984db74ebf2a302a64b985ce6de4.tar.xz deepcrow-d1e78b4a3454984db74ebf2a302a64b985ce6de4.zip | |
Rearranged and renamed some bits.
Diffstat (limited to 'deepcrow/src/lexer.rs')
| -rw-r--r-- | deepcrow/src/lexer.rs | 48 |
1 files changed, 24 insertions, 24 deletions
diff --git a/deepcrow/src/lexer.rs b/deepcrow/src/lexer.rs index d4d39e9..2528cb6 100644 --- a/deepcrow/src/lexer.rs +++ b/deepcrow/src/lexer.rs | |||
| @@ -11,7 +11,7 @@ pub enum ErrorType { | |||
| 11 | } | 11 | } |
| 12 | 12 | ||
| 13 | #[derive(Debug,Copy,Clone,PartialEq,Eq)] | 13 | #[derive(Debug,Copy,Clone,PartialEq,Eq)] |
| 14 | pub enum SymbolType<'a> { | 14 | pub enum TokenType<'a> { |
| 15 | StartFlat, | 15 | StartFlat, |
| 16 | StartPoint, | 16 | StartPoint, |
| 17 | EndFlat, | 17 | EndFlat, |
| @@ -28,7 +28,7 @@ pub enum SymbolType<'a> { | |||
| 28 | Sharp, | 28 | Sharp, |
| 29 | Equals, | 29 | Equals, |
| 30 | Period, | 30 | Period, |
| 31 | Token(&'a str), | 31 | Identifier(&'a str), |
| 32 | Literal(&'a str), | 32 | Literal(&'a str), |
| 33 | Text(&'a str), | 33 | Text(&'a str), |
| 34 | Error{ what: ErrorType }, | 34 | Error{ what: ErrorType }, |
| @@ -36,7 +36,7 @@ pub enum SymbolType<'a> { | |||
| 36 | 36 | ||
| 37 | #[derive(Copy,Clone)] | 37 | #[derive(Copy,Clone)] |
| 38 | pub struct Symbol<'a> { | 38 | pub struct Symbol<'a> { |
| 39 | symbol: SymbolType<'a>, | 39 | symbol: TokenType<'a>, |
| 40 | start: Position, | 40 | start: Position, |
| 41 | end: Position, | 41 | end: Position, |
| 42 | } | 42 | } |
| @@ -48,17 +48,17 @@ impl<'a> fmt::Debug for Symbol<'a> { | |||
| 48 | } | 48 | } |
| 49 | 49 | ||
| 50 | impl<'a> Symbol<'a> { | 50 | impl<'a> Symbol<'a> { |
| 51 | pub fn new( symbol: SymbolType<'a>, start: Position, end: Position ) -> Self { | 51 | pub fn new( symbol: TokenType<'a>, start: Position, end: Position ) -> Self { |
| 52 | Self { | 52 | Self { |
| 53 | symbol, start, end, | 53 | symbol, start, end, |
| 54 | } | 54 | } |
| 55 | } | 55 | } |
| 56 | 56 | ||
| 57 | pub fn check_type<T: Fn( &SymbolType ) -> bool>(&self, f: T ) -> bool { | 57 | pub fn check_type<T: Fn( &TokenType ) -> bool>(&self, f: T ) -> bool { |
| 58 | f( &self.symbol ) | 58 | f( &self.symbol ) |
| 59 | } | 59 | } |
| 60 | 60 | ||
| 61 | pub fn symbol(&self) -> &SymbolType<'a> { | 61 | pub fn symbol(&self) -> &TokenType<'a> { |
| 62 | &self.symbol | 62 | &self.symbol |
| 63 | } | 63 | } |
| 64 | 64 | ||
| @@ -171,7 +171,7 @@ impl<'a> Lexer<'a> { | |||
| 171 | } | 171 | } |
| 172 | 172 | ||
| 173 | fn error( &self, what: ErrorType ) -> Option<Symbol<'a>> { | 173 | fn error( &self, what: ErrorType ) -> Option<Symbol<'a>> { |
| 174 | Some(Symbol::new( SymbolType::Error { | 174 | Some(Symbol::new( TokenType::Error { |
| 175 | what: what | 175 | what: what |
| 176 | }, self.pos, self.pos )) | 176 | }, self.pos, self.pos )) |
| 177 | } | 177 | } |
| @@ -217,7 +217,7 @@ impl<'a> Lexer<'a> { | |||
| 217 | if start == end { | 217 | if start == end { |
| 218 | None | 218 | None |
| 219 | } else { | 219 | } else { |
| 220 | Some(Symbol::new( SymbolType::Text(s), start_pos, end_pos )) | 220 | Some(Symbol::new( TokenType::Text(s), start_pos, end_pos )) |
| 221 | } | 221 | } |
| 222 | } | 222 | } |
| 223 | 223 | ||
| @@ -229,15 +229,15 @@ impl<'a> Lexer<'a> { | |||
| 229 | } | 229 | } |
| 230 | Some('#') => { | 230 | Some('#') => { |
| 231 | self.next(); | 231 | self.next(); |
| 232 | return Some(Symbol::new(SymbolType::Sharp, self.pos, self.pos)); | 232 | return Some(Symbol::new(TokenType::Sharp, self.pos, self.pos)); |
| 233 | } | 233 | } |
| 234 | Some('=') => { | 234 | Some('=') => { |
| 235 | self.next(); | 235 | self.next(); |
| 236 | return Some(Symbol::new(SymbolType::Equals, self.pos, self.pos)); | 236 | return Some(Symbol::new(TokenType::Equals, self.pos, self.pos)); |
| 237 | } | 237 | } |
| 238 | Some('.') => { | 238 | Some('.') => { |
| 239 | self.next(); | 239 | self.next(); |
| 240 | return Some(Symbol::new(SymbolType::Period, self.pos, self.pos)); | 240 | return Some(Symbol::new(TokenType::Period, self.pos, self.pos)); |
| 241 | } | 241 | } |
| 242 | _ => {} | 242 | _ => {} |
| 243 | } | 243 | } |
| @@ -254,14 +254,14 @@ impl<'a> Lexer<'a> { | |||
| 254 | None | 254 | None |
| 255 | } else { | 255 | } else { |
| 256 | Some(Symbol::new( match s { | 256 | Some(Symbol::new( match s { |
| 257 | "view" => SymbolType::View, | 257 | "view" => TokenType::View, |
| 258 | "show" => SymbolType::Show, | 258 | "show" => TokenType::Show, |
| 259 | "output" => SymbolType::Output, | 259 | "output" => TokenType::Output, |
| 260 | "loop" => SymbolType::Loop, | 260 | "loop" => TokenType::Loop, |
| 261 | "if" => SymbolType::If, | 261 | "if" => TokenType::If, |
| 262 | "elif" => SymbolType::ElIf, | 262 | "elif" => TokenType::ElIf, |
| 263 | "else" => SymbolType::Else, | 263 | "else" => TokenType::Else, |
| 264 | _ => SymbolType::Token(s) | 264 | _ => TokenType::Identifier(s) |
| 265 | }, start_pos, end_pos )) | 265 | }, start_pos, end_pos )) |
| 266 | } | 266 | } |
| 267 | } | 267 | } |
| @@ -277,7 +277,7 @@ impl<'a> Lexer<'a> { | |||
| 277 | let end_pos = self.pos.clone(); | 277 | let end_pos = self.pos.clone(); |
| 278 | self.next(); | 278 | self.next(); |
| 279 | let s = &self.data[start..end]; | 279 | let s = &self.data[start..end]; |
| 280 | Some(Symbol::new(SymbolType::Literal(s), start_pos, end_pos )) | 280 | Some(Symbol::new(TokenType::Literal(s), start_pos, end_pos )) |
| 281 | } | 281 | } |
| 282 | 282 | ||
| 283 | fn is_start_tag(&mut self) -> bool { | 283 | fn is_start_tag(&mut self) -> bool { |
| @@ -298,7 +298,7 @@ impl<'a> Lexer<'a> { | |||
| 298 | let end_pos = self.pos.clone(); | 298 | let end_pos = self.pos.clone(); |
| 299 | self.next(); | 299 | self.next(); |
| 300 | self.mode = Mode::InTag; | 300 | self.mode = Mode::InTag; |
| 301 | Some(Symbol::new( SymbolType::StartFlat, start_pos, end_pos ) ) | 301 | Some(Symbol::new( TokenType::StartFlat, start_pos, end_pos ) ) |
| 302 | } else { | 302 | } else { |
| 303 | None | 303 | None |
| 304 | } | 304 | } |
| @@ -309,7 +309,7 @@ impl<'a> Lexer<'a> { | |||
| 309 | let end_pos = self.pos.clone(); | 309 | let end_pos = self.pos.clone(); |
| 310 | self.next(); | 310 | self.next(); |
| 311 | self.mode = Mode::InTag; | 311 | self.mode = Mode::InTag; |
| 312 | Some(Symbol::new(SymbolType::StartPoint, start_pos, end_pos ) ) | 312 | Some(Symbol::new(TokenType::StartPoint, start_pos, end_pos ) ) |
| 313 | } else { | 313 | } else { |
| 314 | None | 314 | None |
| 315 | } | 315 | } |
| @@ -339,14 +339,14 @@ impl<'a> Lexer<'a> { | |||
| 339 | let end_pos = self.pos.clone(); | 339 | let end_pos = self.pos.clone(); |
| 340 | self.next(); | 340 | self.next(); |
| 341 | self.mode = Mode::Text; | 341 | self.mode = Mode::Text; |
| 342 | Some(Symbol::new( SymbolType::EndFlat, start_pos, end_pos)) | 342 | Some(Symbol::new( TokenType::EndFlat, start_pos, end_pos)) |
| 343 | } | 343 | } |
| 344 | Some('>') => { | 344 | Some('>') => { |
| 345 | self.next(); | 345 | self.next(); |
| 346 | let end_pos = self.pos.clone(); | 346 | let end_pos = self.pos.clone(); |
| 347 | self.next(); | 347 | self.next(); |
| 348 | self.mode = Mode::Text; | 348 | self.mode = Mode::Text; |
| 349 | Some(Symbol::new( SymbolType::EndPoint, start_pos, end_pos)) | 349 | Some(Symbol::new( TokenType::EndPoint, start_pos, end_pos)) |
| 350 | } | 350 | } |
| 351 | _ => { | 351 | _ => { |
| 352 | None | 352 | None |
