private function parseSquash(string $string) : array
    {
        // As always, regexes to the rescue
        $matches = [];
        // @todo find out why using /^...$/ does not work capturing all groups
        if (!preg_match_all('/((\(\w+(?:\s+\w+)+\)\s*)+?)/ui', trim($string), $matches)) {
            throw new \InvalidArgumentException();
        }

        $ret = [];

        foreach ($matches[1] as $group) {
            $ret[] = array_filter(preg_split('/[\(\)\s]+/', $group));
        }

        return $ret;
    }