restructure again because I feel that the lexer would be useful as a standalone subdirectory