This commit is contained in:
parent
52828a7f0b
commit
a74b520231
|
@ -81,11 +81,11 @@
|
|||
"locked": {
|
||||
"lastModified": 1,
|
||||
"narHash": "sha256-8wkkYGr1dPSnX9oVMX8D6dTOROXKOYpBTKfriA0sEBI=",
|
||||
"path": "/nix/store/7rlwm9hr4df367974cszjpbmjbd36jvn-source/flake.systems.nix",
|
||||
"path": "/nix/store/7v3i06afpf7zfq4cwingjhfhmbc6vbqi-source/flake.systems.nix",
|
||||
"type": "path"
|
||||
},
|
||||
"original": {
|
||||
"path": "/nix/store/7rlwm9hr4df367974cszjpbmjbd36jvn-source/flake.systems.nix",
|
||||
"path": "/nix/store/7v3i06afpf7zfq4cwingjhfhmbc6vbqi-source/flake.systems.nix",
|
||||
"type": "path"
|
||||
}
|
||||
},
|
||||
|
|
42
src/lib.rs
42
src/lib.rs
|
@ -94,9 +94,16 @@ impl Lexer {
|
|||
} else if c == '/' && self.peek() == Some('/') {
|
||||
tokens.push(self.consume_comment());
|
||||
} else {
|
||||
match c {
|
||||
'+' | '-' | '*' | '/' | '%' | '&' | '|' | '^' | '!' | '=' | '<' | '>' | '?' => {
|
||||
tokens.push(self.consume_operator());
|
||||
}
|
||||
_ => {
|
||||
tokens.push(self.consume_symbol());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
tokens.push(Token::EOF);
|
||||
tokens
|
||||
}
|
||||
|
@ -176,6 +183,11 @@ impl Lexer {
|
|||
self.advance();
|
||||
Token::Symbol(symbol)
|
||||
}
|
||||
fn consume_operator(&mut self) -> Token {
|
||||
let operator = self.current_char.unwrap();
|
||||
self.advance();
|
||||
Token::Operator(operator.to_string())
|
||||
}
|
||||
|
||||
fn error(&self, message: &str) -> ! {
|
||||
panic!("Lexer error at position {}: {}", self.position, message);
|
||||
|
@ -266,6 +278,34 @@ mod tests {
|
|||
assert_eq!(tokens, vec![Token::FloatLiteral(123.45), Token::EOF]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_operator() {
|
||||
init();
|
||||
let source = "+-*/%&|^!=<>?";
|
||||
let mut lexer = Lexer::new(source);
|
||||
let tokens = lexer.get_tokens();
|
||||
info!("[Operator] Tokens: {:#?}", tokens);
|
||||
assert_eq!(
|
||||
tokens,
|
||||
vec![
|
||||
Token::Operator("+".to_string()),
|
||||
Token::Operator("-".to_string()),
|
||||
Token::Operator("*".to_string()),
|
||||
Token::Operator("/".to_string()),
|
||||
Token::Operator("%".to_string()),
|
||||
Token::Operator("&".to_string()),
|
||||
Token::Operator("|".to_string()),
|
||||
Token::Operator("^".to_string()),
|
||||
Token::Operator("!".to_string()),
|
||||
Token::Operator("=".to_string()),
|
||||
Token::Operator("<".to_string()),
|
||||
Token::Operator(">".to_string()),
|
||||
Token::Operator("?".to_string()),
|
||||
Token::EOF,
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_single_line_comment() {
|
||||
init();
|
||||
|
@ -317,7 +357,7 @@ mod tests {
|
|||
Token::Whitespace,
|
||||
Token::Identifier("gl_FragColor".to_string()),
|
||||
Token::Whitespace,
|
||||
Token::Symbol('='),
|
||||
Token::Operator('='.to_string()),
|
||||
Token::Whitespace,
|
||||
Token::Identifier("vec4".to_string()),
|
||||
Token::Symbol('('),
|
||||
|
|
Loading…
Reference in a new issue