There exists a definite grammar which specifies how your input should be converted to an internal form.
There are several operators which basically are overloads for internal functions:
^ -> Power
+ -> Plus
~~ -> StringExpression
What these operators all have in common is that they are binary operators, meaning their equivalent is a function taking two parameters.
The only two forms that do support binary operators are:
f[x, y] -> standard form
x ~~ f ~~ y -> infix form
The other two forms support unary operators and they are special cases because of their precedence. When you write:
f @ x + y ==> f[x] + y
x + y // f ==> f[x + y]
But you could write
f[x, y] in prefix form, due to its higher precedence:
The last example
x + y // f shows perfectly the problem here. It is translated to
f[x + y] but if
f would be the equivalent to
~~ it would be incomplete and therefore a syntax error.
I highly doubt that
? is the operator equivalent for
I hope this answers your question.