switched to lexer/reader model and added benches/tests