Add comments and whitespace to lexer
This commit is contained in:
parent
2dd3a5904b
commit
c262418f88
@ -115,6 +115,7 @@ pub enum Token {
|
|||||||
Unknown(char),
|
Unknown(char),
|
||||||
|
|
||||||
Whitespace(String),
|
Whitespace(String),
|
||||||
|
Comment(String),
|
||||||
Eof,
|
Eof,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -194,6 +195,7 @@ impl ToString for Token {
|
|||||||
Token::Slash => String::from('/'),
|
Token::Slash => String::from('/'),
|
||||||
Token::Percent => String::from('%'),
|
Token::Percent => String::from('%'),
|
||||||
Token::Whitespace(val) => val.clone(),
|
Token::Whitespace(val) => val.clone(),
|
||||||
|
Token::Comment(val) => format!("//{}", val.clone()),
|
||||||
Token::Unknown(val) => val.to_string(),
|
Token::Unknown(val) => val.to_string(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -307,10 +309,13 @@ pub fn tokenize<T: Into<String>>(to_tokenize: T) -> Result<Vec<FullToken>, Error
|
|||||||
}
|
}
|
||||||
// Comments
|
// Comments
|
||||||
'/' if cursor.first() == Some('/') => {
|
'/' if cursor.first() == Some('/') => {
|
||||||
|
let mut comment = String::new();
|
||||||
while !matches!(cursor.first(), Some('\n') | None) {
|
while !matches!(cursor.first(), Some('\n') | None) {
|
||||||
cursor.next();
|
if let Some(c) = cursor.next() {
|
||||||
|
comment.push(c);
|
||||||
}
|
}
|
||||||
continue;
|
}
|
||||||
|
Token::Comment(comment)
|
||||||
}
|
}
|
||||||
'\"' | '\'' => {
|
'\"' | '\'' => {
|
||||||
let mut value = String::new();
|
let mut value = String::new();
|
||||||
|
@ -180,7 +180,7 @@ impl<'a, 'b> TokenStream<'a, 'b> {
|
|||||||
fn previous_token(&self, mut from: usize) -> (usize, Option<&'a FullToken>) {
|
fn previous_token(&self, mut from: usize) -> (usize, Option<&'a FullToken>) {
|
||||||
from -= 1;
|
from -= 1;
|
||||||
while let Some(token) = self.tokens.get(from) {
|
while let Some(token) = self.tokens.get(from) {
|
||||||
if let Token::Whitespace(_) = token.token {
|
if matches!(token.token, Token::Whitespace(_) | Token::Comment(_)) {
|
||||||
from -= 1;
|
from -= 1;
|
||||||
} else {
|
} else {
|
||||||
break;
|
break;
|
||||||
@ -191,7 +191,7 @@ impl<'a, 'b> TokenStream<'a, 'b> {
|
|||||||
|
|
||||||
fn next_token(&self, mut from: usize) -> (usize, Option<&'a FullToken>) {
|
fn next_token(&self, mut from: usize) -> (usize, Option<&'a FullToken>) {
|
||||||
while let Some(token) = self.tokens.get(from) {
|
while let Some(token) = self.tokens.get(from) {
|
||||||
if let Token::Whitespace(_) = token.token {
|
if matches!(token.token, Token::Whitespace(_) | Token::Comment(_)) {
|
||||||
from += 1;
|
from += 1;
|
||||||
} else {
|
} else {
|
||||||
break;
|
break;
|
||||||
|
Loading…
Reference in New Issue
Block a user