improved Parser.parse()