Crate flexer [−] [src]
Flexer is a simple flexible lexer. You can create your lexer with few lines. For example: ```rust
#[macro use] extern crate flexer;
use flexer::*;
let source_code = "(set variable 12.9)\n(print variable)\n";
enum Token {
OpeningParenthesis,
ClosingParenthesis,
Id(String),
Number(f64),
}
let lexer = flexer!( src(source_code) "opening_parenthesis" => r"(" => |token| { Token::OpeningParenthesis } "closing_parenthesis" => r")" => |token| { Token::ClosingParenthesis } "id" => r"[_\w]{1}[_\w\d]*" => |token| { Token::Id(token) } "number" => r"[+-]?\d+(.\d+)?" => |token| { Token::Number(token.parse().unwrap()) } );
let tokens: Vec
let want = vec![
Token::OpeningParenthesis,
Token::Id(String::from("set")),
Token::Id(String::from("variable")),
Token::Number(12.9),
Token::ClosingParenthesis,
Token::OpeningParenthesis,
Token::Id(String::from("print")),
Token::Id(String::from("variable")),
Token::ClosingParenthesis,
];
assert_eq!(want, tokens); ```
Macros
flexer |
|
Structs
Lexer | |
TokenDefinition |
Holds defines name and conversion for tokens which matches regex. |