fix a parser bug with "^" and "&" operators