I know it's pedantic, but RFC 3986 seems to imply that the query string can be empty, even if "?" is present.  Thus,

    bitcoin:1JwSSubhmg6iPtRjtyqhUYYH7bZg3Lfy1T?

is a valid URI, according to RFC 3986, but would not match this grammar.