From 9.2.5 in the book
Operator Priority and Order of Evaluation Operator priority is not defined by the language, except that expressions in parentheses are evaluated first. Thus an expression like 2+3*4 may yield either 20 or 14, whereas 2+(3*4) is guaranteed to yield 14. The need to use parentheses in such expressions makes Jack programming a bit cumbersome. However, the lack of formal operator priority is intentional, since it simplifies the writing of Jack compilers. Of course, different language implementations (compilers) can specify an operator priority and add it to the language documentation, if so desired.
There is no discussion of side effects, but in keeping with the general philosophy of the book, I'd say that anything goes.
That said, the parsing described in the book results in strictly left to right evaluation of subroutine calls within statements.
--Mark