refactor lexer
move to a more esprima style lexer