========================================== parses literals ========================================== theFunction( 100.0, 200, /the-regex/, 'the-single-quoted-string', "the-double-quoted-string" ); --- (program (expression_statement (function_call (identifier) (number) (number) (regex) (string) (string)))) ========================================== parses multiple statements ========================================== var x = {} firstFunction(x) secondFunction(x); --- (program (var_declaration (assignment (identifier) (object))) (expression_statement (function_call (identifier) (identifier))) (expression_statement (function_call (identifier) (identifier)))) ========================================== parses function expressions and calls ========================================== var x = { theMethod: function(argA, argB) { var x = argA; } }; x.theMethod(5, 6); --- (program (var_declaration (assignment (identifier) (object (identifier) (function_expression (formal_parameters (identifier) (identifier)) (statement_block (var_declaration (assignment (identifier) (identifier)))))))) (expression_statement (function_call (property_access (identifier) (identifier)) (number) (number)))) ========================================== parses property access with dot notation ========================================== object.property = "the-value"; print(object.property); --- (program (expression_statement (assignment (property_access (identifier) (identifier)) (string))) (expression_statement (function_call (identifier) (property_access (identifier) (identifier))))) =========================================== parses dynamic property access ========================================== object[propertName()] = propertyValue(); print(object[propertyName()]); --- (program (expression_statement (assignment (property_access (identifier) (function_call (identifier))) (function_call (identifier)))) (expression_statement (function_call (identifier) (property_access (identifier) (function_call (identifier)))))) ========================================== parses comments ========================================== // this is another comment stuff(); // this is a comment --- (program (comment) (expression_statement (function_call (identifier))) (comment)) ====================================== parses real code ===================================== _.each = _.forEach = function(obj, iterator, context) { if (obj == null) return obj; if (obj.length === obj.length) { for (var i = 0; i < length; i = i + 1) { if (iterator.call(context, obj[i], i, obj) === breaker) return; } } else { var keys = _.keys(obj); for (var i = 0; i < length; i = i + 1) { if (iterator.call(context, obj[keys[i]], keys[i], obj) === breaker) return; } } return obj; }; --- (program (expression_statement (assignment (property_access (identifier) (identifier)) (assignment (property_access (identifier) (identifier)) (function_expression (formal_parameters (identifier) (identifier) (identifier)) (statement_block (if_statement (bool_op (identifier) (null)) (return_statement (identifier))) (if_statement (property_access (bool_op (property_access (identifier) (identifier)) (identifier)) (identifier)) (statement_block (for_statement (var_declaration (assignment (identifier) (number))) (expression_statement (bool_op (identifier) (identifier))) (assignment (identifier) (math_op (identifier) (number))) (statement_block (if_statement (bool_op (function_call (property_access (identifier) (identifier)) (identifier) (property_access (identifier) (identifier)) (identifier) (identifier)) (identifier)) (return_statement))))) (statement_block (var_declaration (assignment (identifier) (function_call (property_access (identifier) (identifier)) (identifier)))) (for_statement (var_declaration (assignment (identifier) (number))) (expression_statement (bool_op (identifier) (identifier))) (assignment (identifier) (math_op (identifier) (number))) (statement_block (if_statement (bool_op (function_call (property_access (identifier) (identifier)) (identifier) (property_access (identifier) (property_access (identifier) (identifier))) (property_access (identifier) (identifier)) (identifier)) (identifier)) (return_statement)))))) (return_statement (identifier))))))))