cleaned up expression parser