lexer: Consume invalid characters

This commit is contained in:
John 2023-10-25 19:28:54 -05:00
parent 32bde2f749
commit 5c4c8bcb80
2 changed files with 9 additions and 5 deletions

View File

@ -46,7 +46,7 @@ fn lex_tokens(file: &str, path: Option<&Path>) -> Result<(), Box<dyn Error>> {
Ok(t) => t, Ok(t) => t,
Err(e) => { Err(e) => {
println!("{e:?}"); println!("{e:?}");
break; continue;
}, },
}; };
if let Some(path) = path { if let Some(path) = path {

View File

@ -42,10 +42,10 @@ pub mod lexer_iter {
} }
/// The Lexer iterates over the characters in a body of text, searching for [Tokens](Token). /// The Lexer iterates over the characters in a body of text, searching for [Tokens](Token).
/// ///
/// # Examples /// # Examples
/// ```rust /// ```rust
///# use conlang::lexer::Lexer; /// # use conlang::lexer::Lexer;
/// // Read in your code from somewhere /// // Read in your code from somewhere
/// let some_code = " /// let some_code = "
/// fn main () { /// fn main () {
@ -59,7 +59,7 @@ pub mod lexer_iter {
/// println!("{first_token:?}"); /// println!("{first_token:?}");
/// // Loop over all the rest of the tokens /// // Loop over all the rest of the tokens
/// for token in lexer { /// for token in lexer {
///# let token: Result<_,()> = Ok(token.unwrap()); /// # let token: Result<_,()> = Ok(token.unwrap());
/// match token { /// match token {
/// Ok(token) => println!("{token:?}"), /// Ok(token) => println!("{token:?}"),
/// Err(e) => eprintln!("{e:?}"), /// Err(e) => eprintln!("{e:?}"),
@ -123,7 +123,11 @@ impl<'t> Lexer<'t> {
'\'' => self.consume()?.character(), '\'' => self.consume()?.character(),
'_' => self.identifier(), '_' => self.identifier(),
i if i.is_xid_start() => self.identifier(), i if i.is_xid_start() => self.identifier(),
e => Err(Error::unexpected_char(e, self.line(), self.col())), e => {
let err = Err(Error::unexpected_char(e, self.line(), self.col()));
let _ = self.consume();
err
}
} }
} }
/// Returns the current line /// Returns the current line