first stab at a lexer