=================== Array Comprehension =================== simple = [ i | i in X ]; where = [ i | i in X where i == 2 ]; multiple = [ i | i in X, j in Y where i == j]; --- (source_file (assignment (identifier) (array_comprehension (identifier) (generator (identifier) (identifier)))) (assignment (identifier) (array_comprehension (identifier) (generator (identifier) (identifier) (infix_operator (identifier) (integer_literal))))) (assignment (identifier) (array_comprehension (identifier) (generator (identifier) (identifier)) (generator (identifier) (identifier) (infix_operator (identifier) (identifier)))))) ==== Call ==== no_args = my_fn(); single_arg = my_fn(1); mult_args = my_fn(2, "test"); generator_lookalike = my_fn(x in Xs) --- (source_file (assignment (identifier) (call (identifier))) (assignment (identifier) (call (identifier) (integer_literal))) (assignment (identifier) (call (identifier) (integer_literal) (string_literal))) (assignment (identifier) (call (identifier) (infix_operator (identifier) (identifier))))) ============== Generator Call ============== simple_sum = sum(i in N)(i); selective_sum = sum(i in N where i in X)(i); --- (source_file (assignment (identifier) (generator_call (identifier) (generator (identifier) (identifier)) (identifier))) (assignment (identifier) (generator_call (identifier) (generator (identifier) (identifier) (infix_operator (identifier) (identifier))) (identifier)))) ============ If-Then-Else ============ if_only = if b then i < j endif; value_select = if b then i else j endif; elseif = if b then i elseif c then j else k endif; elseif_no_else = if b then i < j elseif c then j > i endif; --- (source_file (assignment (identifier) (if_then_else (identifier) (infix_operator (identifier) (identifier)))) (assignment (identifier) (if_then_else (identifier) (identifier) (identifier))) (assignment (identifier) (if_then_else (identifier) (identifier) (identifier) (identifier) (identifier))) (assignment (identifier) (if_then_else (identifier) (infix_operator (identifier) (identifier)) (identifier) (infix_operator (identifier) (identifier))))) ============ Index Access ============ named_colection = my_collection[1]; named_accessor = my_collection[i]; literal_collection = [1,2,3][i]; multiple_accessor = my_collection[i,2]; expression_accessor = my_collection[-i + 2]; slice = my_collection[1..2]; --- (source_file (assignment (identifier) (indexed_access (identifier) (integer_literal))) (assignment (identifier) (indexed_access (identifier) (identifier))) (assignment (identifier) (indexed_access (array_literal (integer_literal) (integer_literal) (integer_literal)) (identifier))) (assignment (identifier) (indexed_access (identifier) (identifier) (integer_literal))) (assignment (identifier) (indexed_access (identifier) (infix_operator (prefix_operator (identifier)) (integer_literal)))) (assignment (identifier) (indexed_access (identifier) (infix_operator (integer_literal) (integer_literal))))) ============== Infix Operator ============== exponent = x ^ y; mult = x * y; div = x / y; idiv = x div y; add = x + y; minus = x - y; set_inter = x intersect y; set_dotdot = x..y; set_symdiff = x symdiff y; set_diff = x diff y; set_union = x union y; same = x = y; samedouble = x == y; different = x != y; smaller = x < y; bigger = x > y; smalleq = x <= y; bigeq = x >= y; set_in = x in y; set_sub = x subset y; set_super = x superset y; and = x /\ y; bool_xor = x xor y; or = x \/ y; --- (source_file (assignment (identifier) (infix_operator (identifier) (identifier))) (assignment (identifier) (infix_operator (identifier) (identifier))) (assignment (identifier) (infix_operator (identifier) (identifier))) (assignment (identifier) (infix_operator (identifier) (identifier))) (assignment (identifier) (infix_operator (identifier) (identifier))) (assignment (identifier) (infix_operator (identifier) (identifier))) (assignment (identifier) (infix_operator (identifier) (identifier))) (assignment (identifier) (infix_operator (identifier) (identifier))) (assignment (identifier) (infix_operator (identifier) (identifier))) (assignment (identifier) (infix_operator (identifier) (identifier))) (assignment (identifier) (infix_operator (identifier) (identifier))) (assignment (identifier) (infix_operator (identifier) (identifier))) (assignment (identifier) (infix_operator (identifier) (identifier))) (assignment (identifier) (infix_operator (identifier) (identifier))) (assignment (identifier) (infix_operator (identifier) (identifier))) (assignment (identifier) (infix_operator (identifier) (identifier))) (assignment (identifier) (infix_operator (identifier) (identifier))) (assignment (identifier) (infix_operator (identifier) (identifier))) (assignment (identifier) (infix_operator (identifier) (identifier))) (assignment (identifier) (infix_operator (identifier) (identifier))) (assignment (identifier) (infix_operator (identifier) (identifier))) (assignment (identifier) (infix_operator (identifier) (identifier))) (assignment (identifier) (infix_operator (identifier) (identifier))) (assignment (identifier) (infix_operator (identifier) (identifier)))) =========== Precedences =========== given_precedence = (1 + 1) * 1; mult_first = 1 + 1 * 1; exp_first = 1 * 1 ^ 1; annotation_bind = 1 ^ 1::some_ann; --- (source_file (assignment (identifier) (infix_operator (parenthesised_expression (infix_operator (integer_literal) (integer_literal))) (integer_literal))) (assignment (identifier) (infix_operator (integer_literal) (infix_operator (integer_literal) (integer_literal)))) (assignment (identifier) (infix_operator (integer_literal) (infix_operator (integer_literal) (integer_literal)))) (assignment (identifier) (infix_operator (integer_literal) (infix_operator (integer_literal) (identifier))))) =============== Prefix Operator =============== negatitve_number = -5; negative_ident = -num; negated_bool = not true; unicode_negation = ¬ b; --- (source_file (assignment (identifier) (prefix_operator (integer_literal))) (assignment (identifier) (prefix_operator (identifier))) (assignment (identifier) (prefix_operator (boolean_literal))) (assignment (identifier) (prefix_operator (identifier)))) ================= Set Comprehension ================= simple = { i | i in X }; where = { i | i in X where i == 2 }; multiple = { i | i in X, j in Y where i == j}; --- (source_file (assignment (identifier) (set_comprehension (identifier) (generator (identifier) (identifier)))) (assignment (identifier) (set_comprehension (identifier) (generator (identifier) (identifier) (infix_operator (identifier) (integer_literal))))) (assignment (identifier) (set_comprehension (identifier) (generator (identifier) (identifier)) (generator (identifier) (identifier) (infix_operator (identifier) (identifier)))))) ==================== String Interpolation ==================== simple = "\(x)"; with_text = "the \(i)th variable"; multiple = "\(x) and \(y)"; --- (source_file (assignment (identifier) (string_interpolation (identifier))) (assignment (identifier) (string_interpolation (string_content) (identifier) (string_content))) (assignment (identifier) (string_interpolation (identifier) (string_content) (identifier))))