Small changes to keyword handling; Comment consumption
This commit is contained in:
parent
f40f6be70d
commit
c2966ce973
|
@ -23,7 +23,10 @@ impl Lexer {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
self.is_keyword(&word).unwrap()
|
match self.is_keyword(&word) {
|
||||||
|
Some(token) => token,
|
||||||
|
None => crate::tokens::Token::IDENTIFIER(word),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn consume_number(&mut self) -> crate::tokens::Token {
|
pub fn consume_number(&mut self) -> crate::tokens::Token {
|
||||||
|
@ -31,7 +34,15 @@ impl Lexer {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn consume_comment(&mut self) -> crate::tokens::Token {
|
pub fn consume_comment(&mut self) -> crate::tokens::Token {
|
||||||
todo!()
|
let mut comment = String::new();
|
||||||
|
while let Some(c) = self.current_char {
|
||||||
|
if c == '\n' {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
comment.push(c);
|
||||||
|
self.advance();
|
||||||
|
}
|
||||||
|
crate::tokens::Token::Comment(comment)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn consume_symbol(&mut self) -> crate::tokens::Token {
|
pub fn consume_symbol(&mut self) -> crate::tokens::Token {
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
use crate::tokens::{Image, Material, Sampler, Token, Vector};
|
use crate::tokens::{Image, Material, Sampler, Token, Vector};
|
||||||
|
|
||||||
pub fn populate_tokens(lexer: &mut crate::lex::lexer::Lexer) {
|
pub fn populate_tokens(lexer: &mut crate::lex::lexer::Lexer) {
|
||||||
|
@ -373,10 +372,8 @@ impl crate::lex::lexer::Lexer {
|
||||||
pub fn is_keyword(&mut self, word: &str) -> Option<Token> {
|
pub fn is_keyword(&mut self, word: &str) -> Option<Token> {
|
||||||
let token = self.keywords.get(word);
|
let token = self.keywords.get(word);
|
||||||
if let Some(token) = token {
|
if let Some(token) = token {
|
||||||
Some(token.clone())
|
return Some(token.clone());
|
||||||
} else {
|
|
||||||
// TODO: Check if word is an identifier
|
|
||||||
Some(Token::IDENTIFIER(word.to_string()))
|
|
||||||
}
|
}
|
||||||
|
None
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
33
src/lib.rs
33
src/lib.rs
|
@ -56,6 +56,22 @@ mod tests {
|
||||||
let tokens = lexer.get_tokens();
|
let tokens = lexer.get_tokens();
|
||||||
assert_eq!(tokens, vec![Token::UNIFORM, Token::EOF].into());
|
assert_eq!(tokens, vec![Token::UNIFORM, Token::EOF].into());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_single_line_comment() {
|
||||||
|
let source = "// This is a comment\n";
|
||||||
|
let mut lexer = Lexer::new(source);
|
||||||
|
let tokens = lexer.get_tokens();
|
||||||
|
assert_eq!(
|
||||||
|
tokens,
|
||||||
|
vec![
|
||||||
|
Token::Comment("// This is a comment".to_string()),
|
||||||
|
Token::Whitespace,
|
||||||
|
Token::EOF,
|
||||||
|
]
|
||||||
|
.into()
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// #[cfg(test)]
|
// #[cfg(test)]
|
||||||
// mod tests {
|
// mod tests {
|
||||||
|
@ -164,23 +180,6 @@ mod tests {
|
||||||
// );
|
// );
|
||||||
// }
|
// }
|
||||||
//
|
//
|
||||||
// #[test]
|
|
||||||
// fn test_single_line_comment() {
|
|
||||||
// init();
|
|
||||||
// let source = "// This is a comment\n";
|
|
||||||
// let mut lexer = Lexer::new(source);
|
|
||||||
// let tokens = lexer.get_tokens();
|
|
||||||
// info!("[Comment] Tokens: {:#?}", tokens);
|
|
||||||
// assert_eq!(
|
|
||||||
// tokens,
|
|
||||||
// vec![
|
|
||||||
// Token::Comment("// This is a comment".to_string()),
|
|
||||||
// Token::Whitespace,
|
|
||||||
// Token::EOF,
|
|
||||||
// ]
|
|
||||||
// .into()
|
|
||||||
// );
|
|
||||||
// }
|
|
||||||
//
|
//
|
||||||
// // I hope that does it. Writing this test was pain.
|
// // I hope that does it. Writing this test was pain.
|
||||||
// #[test]
|
// #[test]
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
pub enum Token {
|
pub enum Token {
|
||||||
EOF,
|
EOF,
|
||||||
Whitespace,
|
Whitespace,
|
||||||
|
Comment(String),
|
||||||
CONST,
|
CONST,
|
||||||
BOOL,
|
BOOL,
|
||||||
FLOAT,
|
FLOAT,
|
||||||
|
|
Loading…
Reference in a new issue