// Example lexer specification for klex
// This will generate a simple calculator lexer
%%
[0-9]+ -> Number
Number '.' [0-9]+ -> Float
[a-zA-Z_][a-zA-Z0-9_]* -> Identifier
'+' -> Plus
'-' -> Minus
'*' -> Multiply
'/' -> Divide
'(' -> LParen
')' -> RParen
[ \t]+ -> Whitespace
\n -> Newline
%%
// Example suffix code - main function, tests, etc.
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_lexer() {
let input = "123 + abc";
let mut lexer = Lexer::from_str(input);
let token = lexer.next_token().unwrap();
assert_eq!(token.kind, TokenKind::Number);
assert_eq!(token.text, "123");
let token = lexer.next_token().unwrap();
assert_eq!(token.kind, TokenKind::Whitespace);
let token = lexer.next_token().unwrap();
assert_eq!(token.kind, TokenKind::Plus);
assert_eq!(token.text, "+");
}
}