summaryrefslogtreecommitdiff
path: root/deepcrow/src/lexer.rs
diff options
context:
space:
mode:
authorMike Buland <mike@xagasoft.com>2026-08-19 13:05:01 -0700
committerMike Buland <mike@xagasoft.com>2026-08-19 13:05:01 -0700
commitd1e78b4a3454984db74ebf2a302a64b985ce6de4 (patch)
treed3953cd8aad144a1be131ff3c38688f93cbccbb5 /deepcrow/src/lexer.rs
parent5602585e7afe431f25e68f30ac54761db2a710e5 (diff)
downloaddeepcrow-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.rs48
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)]
14pub enum SymbolType<'a> { 14pub 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)]
38pub struct Symbol<'a> { 38pub 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
50impl<'a> Symbol<'a> { 50impl<'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