started with hand written lexer