move lexer into its own module and add comment