Lexer impl done

This commit is contained in:
2025-12-08 23:19:23 -07:00
parent 115a57128c
commit fac36c756b
3 changed files with 44 additions and 49 deletions

View File

@@ -5,9 +5,7 @@ use quick_error::quick_error;
use std::{
cmp::Ordering,
collections::VecDeque,
io::{BufReader, Cursor, Read, Seek, SeekFrom},
iter::Peekable,
path::PathBuf,
io::{Read, Seek, SeekFrom},
};
use token::{Token, TokenType};
@@ -60,7 +58,7 @@ impl<'a> From<&'a str> for Tokenizer<'a> {
}
impl<'a> Tokenizer<'a> {
fn to_token(&mut self, t_type: TokenType<'a>) -> Token<'a> {
fn get_token(&mut self, t_type: TokenType<'a>) -> Token<'a> {
let mut span = self.lexer.span();
span.start -= self.lexer.extras.line_start_index;
span.end -= self.lexer.extras.line_start_index;
@@ -72,14 +70,10 @@ impl<'a> Tokenizer<'a> {
.lexer
.next()
.transpose()
.map(|t| t.map(|t| self.to_token(t)))?;
.map(|t| t.map(|t| self.get_token(t)))?;
Ok(to_return)
}
pub fn peek_next(&mut self) -> Result<Option<Token<'a>>, Error> {
todo!()
}
}
// ... Iterator and TokenizerBuffer implementations remain unchanged ...
@@ -101,10 +95,8 @@ impl<'a> Iterator for Tokenizer<'a> {
}
}
Some(t) => match t {
Err(e) => {
todo!()
}
Ok(t) => Some(Ok(self.to_token(t))),
Err(e) => Some(Err(e.into())),
Ok(t) => Some(Ok(self.get_token(t))),
},
}
}
@@ -126,7 +118,7 @@ impl<'a> TokenizerBuffer<'a> {
index: 0,
}
}
pub fn next_token(&mut self) -> Result<Option<Token>, Error> {
pub fn next_token(&mut self) -> Result<Option<Token<'a>>, Error> {
if let Some(token) = self.buffer.pop_front() {
self.history.push_back(token.clone());
self.index += 1;
@@ -141,12 +133,16 @@ impl<'a> TokenizerBuffer<'a> {
self.index += 1;
Ok(token)
}
pub fn peek(&mut self) -> Result<Option<Token>, Error> {
pub fn peek(&mut self) -> Result<Option<Token<'a>>, Error> {
if let Some(token) = self.buffer.front() {
return Ok(Some(token.clone()));
}
let token = self.tokenizer.peek_next()?;
Ok(token)
let Some(new_token) = self.tokenizer.next_token()? else {
return Ok(None);
};
self.buffer.push_front(new_token.clone());
Ok(Some(new_token))
}
pub fn loc(&self) -> i64 {
self.index