Finished Lexer Re-write