There's a module Text::Query on CPAN, which is, if I understood it correctly, designed for this kind of parsing. However, it is old and no longer maintained, probably due to lack of interest from the public. It might still work well, though.
Comment on Re: How can i parse google-like search strings?