Mathematical operators ----- > $b; $a ** $b; // associativity $a * $b * $c; $a * ($b * $c); // precedence $a + $b * $c; ($a + $b) * $c; // pow is special $a ** $b ** $c; ($a ** $b) ** $c; ----- array( 0: Stmt_Expression( expr: Expr_BitwiseNot( expr: Expr_Variable( name: a ) comments: array( 0: // unary ops ) ) comments: array( 0: // unary ops ) ) 1: Stmt_Expression( expr: Expr_UnaryPlus( expr: Expr_Variable( name: a ) ) ) 2: Stmt_Expression( expr: Expr_UnaryMinus( expr: Expr_Variable( name: a ) ) ) 3: Stmt_Expression( expr: Expr_BinaryOp_BitwiseAnd( left: Expr_Variable( name: a comments: array( 0: // binary ops ) ) right: Expr_Variable( name: b ) comments: array( 0: // binary ops ) ) comments: array( 0: // binary ops ) ) 4: Stmt_Expression( expr: Expr_BinaryOp_BitwiseOr( left: Expr_Variable( name: a ) right: Expr_Variable( name: b ) ) ) 5: Stmt_Expression( expr: Expr_BinaryOp_BitwiseXor( left: Expr_Variable( name: a ) right: Expr_Variable( name: b ) ) ) 6: Stmt_Expression( expr: Expr_BinaryOp_Concat( left: Expr_Variable( name: a ) right: Expr_Variable( name: b ) ) ) 7: Stmt_Expression( expr: Expr_BinaryOp_Div( left: Expr_Variable( name: a ) right: Expr_Variable( name: b ) ) ) 8: Stmt_Expression( expr: Expr_BinaryOp_Minus( left: Expr_Variable( name: a ) right: Expr_Variable( name: b ) ) ) 9: Stmt_Expression( expr: Expr_BinaryOp_Mod( left: Expr_Variable( name: a ) right: Expr_Variable( name: b ) ) ) 10: Stmt_Expression( expr: Expr_BinaryOp_Mul( left: Expr_Variable( name: a ) right: Expr_Variable( name: b ) ) ) 11: Stmt_Expression( expr: Expr_BinaryOp_Plus( left: Expr_Variable( name: a ) right: Expr_Variable( name: b ) ) ) 12: Stmt_Expression( expr: Expr_BinaryOp_ShiftLeft( left: Expr_Variable( name: a ) right: Expr_Variable( name: b ) ) ) 13: Stmt_Expression( expr: Expr_BinaryOp_ShiftRight( left: Expr_Variable( name: a ) right: Expr_Variable( name: b ) ) ) 14: Stmt_Expression( expr: Expr_BinaryOp_Pow( left: Expr_Variable( name: a ) right: Expr_Variable( name: b ) ) ) 15: Stmt_Expression( expr: Expr_BinaryOp_Mul( left: Expr_BinaryOp_Mul( left: Expr_Variable( name: a comments: array( 0: // associativity ) ) right: Expr_Variable( name: b ) comments: array( 0: // associativity ) ) right: Expr_Variable( name: c ) comments: array( 0: // associativity ) ) comments: array( 0: // associativity ) ) 16: Stmt_Expression( expr: Expr_BinaryOp_Mul( left: Expr_Variable( name: a ) right: Expr_BinaryOp_Mul( left: Expr_Variable( name: b ) right: Expr_Variable( name: c ) ) ) ) 17: Stmt_Expression( expr: Expr_BinaryOp_Plus( left: Expr_Variable( name: a comments: array( 0: // precedence ) ) right: Expr_BinaryOp_Mul( left: Expr_Variable( name: b ) right: Expr_Variable( name: c ) ) comments: array( 0: // precedence ) ) comments: array( 0: // precedence ) ) 18: Stmt_Expression( expr: Expr_BinaryOp_Mul( left: Expr_BinaryOp_Plus( left: Expr_Variable( name: a ) right: Expr_Variable( name: b ) ) right: Expr_Variable( name: c ) ) ) 19: Stmt_Expression( expr: Expr_BinaryOp_Pow( left: Expr_Variable( name: a comments: array( 0: // pow is special ) ) right: Expr_BinaryOp_Pow( left: Expr_Variable( name: b ) right: Expr_Variable( name: c ) ) comments: array( 0: // pow is special ) ) comments: array( 0: // pow is special ) ) 20: Stmt_Expression( expr: Expr_BinaryOp_Pow( left: Expr_BinaryOp_Pow( left: Expr_Variable( name: a ) right: Expr_Variable( name: b ) ) right: Expr_Variable( name: c ) ) ) )