SIP separator rules comes from RFC 2396 that has been deprecated by RFC 3986. But with some usage specifications defined in section 19.1.1.
To summarize a bit, semicolon ";" is used to separate URI parameters, question mark "?" to signal query component's (stated as "Header fields" in section 19.1.1) starting point, and ampersand "&" is used to separate parameter pairs inside query string ("header fields").
Also worth checking Wikipedia entry: URI scheme
Hope this helps