My own implementation of a lexer, for fun