========================================== function calls ========================================== x.theMethod(5, 6); --- (program (expression_statement (function_call (member_access (identifier) (identifier)) (arguments (number) (number))))) ========================================== constructor calls ========================================== var x = new Node(5, new Node(3, null)); new Thing; --- (program (var_declaration (var_assignment (identifier) (constructor_call (identifier) (arguments (number) (constructor_call (identifier) (arguments (number) (null))))))) (expression_statement (constructor_call (identifier)))) ========================================== property access with dot notation ========================================== object.property = "the-value"; object.property; --- (program (expression_statement (assignment (member_access (identifier) (identifier)) (string))) (expression_statement (member_access (identifier) (identifier)))) ========================================== property access across lines ========================================== object .someProperty .otherProperty --- (program (expression_statement (member_access (member_access (identifier) (identifier)) (identifier)))) =========================================== dynamic property access ========================================== object[propertName()] = propertyValue(); object[propertyName()]; --- (program (expression_statement (assignment (subscript_access (identifier) (function_call (identifier) (arguments))) (function_call (identifier) (arguments)))) (expression_statement (subscript_access (identifier) (function_call (identifier) (arguments))))) ========================================== ternary expressions ========================================== isDone() ? stuff : otherStuff; --- (program (expression_statement (ternary (function_call (identifier) (arguments)) (identifier) (identifier)))) ========================================== mathematical operators ========================================== a++ + b * c - d / e-- --- (program (expression_statement (math_op (math_op (math_op (identifier)) (math_op (identifier) (identifier))) (math_op (identifier) (math_op (identifier)))))) ========================================== boolean operators ========================================= !a || !(b && c) --- (program (expression_statement (bool_op (bool_op (identifier)) (bool_op (bool_op (identifier) (identifier)))))) =========================================== type operators =========================================== (x instanceof Array) || (typeof x === "string") --- (program (expression_statement (bool_op (type_op (identifier) (identifier)) (rel_op (type_op (identifier)) (string))))) ============================================ the 'in' operator =========================================== print(x in y) --- (program (expression_statement (function_call (identifier) (arguments (type_op (identifier) (identifier)))))) ============================================ assignment operators ============================================ x += 1; x -= 1; x *= 2; x /= 2; --- (program (expression_statement (math_assignment (identifier) (number))) (expression_statement (math_assignment (identifier) (number))) (expression_statement (math_assignment (identifier) (number))) (expression_statement (math_assignment (identifier) (number)))) ============================================ property access and operators ============================================ print(x.y.z && a.b.c) --- (program (expression_statement (function_call (identifier) (arguments (bool_op (member_access (member_access (identifier) (identifier)) (identifier)) (member_access (member_access (identifier) (identifier)) (identifier)))))))