5.1. Operator ** quirk

Viper has a quirk processing the '**' operator: it is considered unassociative, so that brackets must be used to indicate precedence. Also, a ** -b is not permitted: since ** has a higher precedence than unary -, the expression - a ** b means -(a**b), and the meaning of a ** - b ** c would then be a ** (-(b**c)) or a ** ((-b) ** c) or even (a ** (-b)) ** c. Any ambiguities or errors can be fixed by adding brackets to the original python source without changing semantics of exiting programs. This quirk exists because it is the most conservative resolution of a problem in the Viper grammar.