seperated parser into lexer + parser