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 = lexer.collect();

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

flexer simplifies creating lexer.

Structs

Lexer
TokenDefinition

Holds defines name and conversion for tokens which matches regex.