================================================================================
Escaped string
================================================================================
esc = "\\";
multi_esc = "dir must be a 3-vector or one of \"X\", \"Y\", or \"Z\"";
esc_types = "The quick brown fox \tjumps \"over\" the lazy dog.\rThe quick brown fox.\nThe \\lazy\\
 dog.";
// comment with double quote "
--------------------------------------------------------------------------------

(source_file
  (var_declaration
    (assignment
      (identifier)
      (string
        (escape_sequence))))
  (var_declaration
    (assignment
      (identifier)
      (string
        (escape_sequence)
        (escape_sequence)
        (escape_sequence)
        (escape_sequence)
        (escape_sequence)
        (escape_sequence))))
  (var_declaration
    (assignment
      (identifier)
      (string
        (escape_sequence)
        (escape_sequence)
        (escape_sequence)
        (escape_sequence)
        (escape_sequence)
        (escape_sequence)
        (escape_sequence))))
  (line_comment))

================================================================================
All Literals
================================================================================
num = -4.3;
ex_num = -4.3E-09;
ex_num2 = 2.254871220604705e+00;
name = "Karl";
esc = "\\";
neg_ident = [-num];
boolean = true;
list = [1, 2, each [3, 4], [5, 6]];
trailing_comma_list = [[1, 2,],];
range = [1:num:-10];
fn = function(x, y) x + y;
comprehension = [for (x = 0; x < 5; x = x + 2) 12];
check = assert();
--------------------------------------------------------------------------------

(source_file
  (var_declaration
    (assignment
      (identifier)
      (float)))
  (var_declaration
    (assignment
      (identifier)
      (float)))
  (var_declaration
    (assignment
      (identifier)
      (float)))
  (var_declaration
    (assignment
      (identifier)
      (string)))
  (var_declaration
    (assignment
      (identifier)
      (string
        (escape_sequence))))
  (var_declaration
    (assignment
      (identifier)
      (list
        (unary_expression
          (identifier)))))
  (var_declaration
    (assignment
      (identifier)
      (boolean)))
  (var_declaration
    (assignment
      (identifier)
      (list
        (integer)
        (integer)
        (each
          (list
            (integer)
            (integer)))
        (list
          (integer)
          (integer)))))
  (var_declaration
    (assignment
      (identifier)
      (list
        (list
          (integer)
          (integer)))))
  (var_declaration
    (assignment
      (identifier)
      (range
        (integer)
        (identifier)
        (integer))))
  (var_declaration
    (assignment
      (identifier)
      (function_lit
        (parameters
          (parameter
            (identifier))
          (parameter
            (identifier)))
        (binary_expression
          (identifier)
          (identifier)))))
  (var_declaration
    (assignment
      (identifier)
      (list
        (list_comprehension
          (for_clause
            (condition_update_clause
              (assignment
                (identifier)
                (integer))
              (binary_expression
                (identifier)
                (integer))
              (assignment
                (identifier)
                (binary_expression
                  (identifier)
                  (integer))))
            (integer))))))
  (var_declaration
    (assignment
      (identifier)
      (assert_expression
        (arguments)))))

================================================================================
Comprehensions
================================================================================
conditionless = [for (x = [1:10]) x];
conditioned = [for (x = [1:10]) if ($preview) x];
ifelse = [for (x = [1:10]) if ($preview) x else ln(x)];
if_for_ifelse = [for (x = 0) if (x < 0) for (y = 2) if (y == 2) y else x];
complex_condition = [
    for (x = [1:10]) if (x % 2 == 0) x else if (x < 5) x - 1 else 0
];
spliced = [for (x = [1:10]) x, for (y = [1, 2, 3]) y, for (z = [4, 5, 6]) z];
nested = [for (x = [1:10]) for (y = [1, 2, 3]) for (z = [4, 5, 6]) x * y * z];
grouped = [if (x < 7) (for (y = [1:10]) if (y > x) y) else x];
let_each = [for(i = [0:1]) let(a=90) each arc(angle=a)];
let_for = [let (i=[0:1]) for(i = i) let(a=90) each arc(angle=a)];
let_if = [for(i = [0:1]) let(a=360) if (is_def(isect)) isect];
--------------------------------------------------------------------------------

(source_file
  (var_declaration
    (assignment
      (identifier)
      (list
        (list_comprehension
          (for_clause
            (assignments
              (assignment
                (identifier)
                (range
                  (integer)
                  (integer))))
            (identifier))))))
  (var_declaration
    (assignment
      (identifier)
      (list
        (list_comprehension
          (for_clause
            (assignments
              (assignment
                (identifier)
                (range
                  (integer)
                  (integer))))
            (list_comprehension
              (if_clause
                (parenthesized_expression
                  (special_variable
                    (identifier)))
                (identifier))))))))
  (var_declaration
    (assignment
      (identifier)
      (list
        (list_comprehension
          (for_clause
            (assignments
              (assignment
                (identifier)
                (range
                  (integer)
                  (integer))))
            (list_comprehension
              (if_clause
                (parenthesized_expression
                  (special_variable
                    (identifier)))
                (identifier)
                (function_call
                  (identifier)
                  (arguments
                    (identifier))))))))))
  (var_declaration
    (assignment
      (identifier)
      (list
        (list_comprehension
          (for_clause
            (assignments
              (assignment
                (identifier)
                (integer)))
            (list_comprehension
              (if_clause
                (parenthesized_expression
                  (binary_expression
                    (identifier)
                    (integer)))
                (list_comprehension
                  (for_clause
                    (assignments
                      (assignment
                        (identifier)
                        (integer)))
                    (list_comprehension
                      (if_clause
                        (parenthesized_expression
                          (binary_expression
                            (identifier)
                            (integer)))
                        (identifier)
                        (identifier))))))))))))
  (var_declaration
    (assignment
      (identifier)
      (list
        (list_comprehension
          (for_clause
            (assignments
              (assignment
                (identifier)
                (range
                  (integer)
                  (integer))))
            (list_comprehension
              (if_clause
                (parenthesized_expression
                  (binary_expression
                    (binary_expression
                      (identifier)
                      (integer))
                    (integer)))
                (identifier)
                (list_comprehension
                  (if_clause
                    (parenthesized_expression
                      (binary_expression
                        (identifier)
                        (integer)))
                    (binary_expression
                      (identifier)
                      (integer))
                    (integer))))))))))
  (var_declaration
    (assignment
      (identifier)
      (list
        (list_comprehension
          (for_clause
            (assignments
              (assignment
                (identifier)
                (range
                  (integer)
                  (integer))))
            (identifier)))
        (list_comprehension
          (for_clause
            (assignments
              (assignment
                (identifier)
                (list
                  (integer)
                  (integer)
                  (integer))))
            (identifier)))
        (list_comprehension
          (for_clause
            (assignments
              (assignment
                (identifier)
                (list
                  (integer)
                  (integer)
                  (integer))))
            (identifier))))))
  (var_declaration
    (assignment
      (identifier)
      (list
        (list_comprehension
          (for_clause
            (assignments
              (assignment
                (identifier)
                (range
                  (integer)
                  (integer))))
            (list_comprehension
              (for_clause
                (assignments
                  (assignment
                    (identifier)
                    (list
                      (integer)
                      (integer)
                      (integer))))
                (list_comprehension
                  (for_clause
                    (assignments
                      (assignment
                        (identifier)
                        (list
                          (integer)
                          (integer)
                          (integer))))
                    (binary_expression
                      (binary_expression
                        (identifier)
                        (identifier))
                      (identifier)))))))))))
  (var_declaration
    (assignment
      (identifier)
      (list
        (list_comprehension
          (if_clause
            (parenthesized_expression
              (binary_expression
                (identifier)
                (integer)))
            (list_comprehension
              (for_clause
                (assignments
                  (assignment
                    (identifier)
                    (range
                      (integer)
                      (integer))))
                (list_comprehension
                  (if_clause
                    (parenthesized_expression
                      (binary_expression
                        (identifier)
                        (identifier)))
                    (identifier)))))
            (identifier))))))
  (var_declaration
    (assignment
      (identifier)
      (list
        (list_comprehension
          (for_clause
            (assignments
              (assignment
                (identifier)
                (range
                  (integer)
                  (integer))))
            (each
              (let_prefix
                (assignments
                  (assignment
                    (identifier)
                    (integer))))
              (function_call
                (identifier)
                (arguments
                  (assignment
                    (identifier)
                    (identifier))))))))))
  (var_declaration
    (assignment
      (identifier)
      (list
        (list_comprehension
          (for_clause
            (let_prefix
              (assignments
                (assignment
                  (identifier)
                  (range
                    (integer)
                    (integer)))))
            (assignments
              (assignment
                (identifier)
                (identifier)))
            (each
              (let_prefix
                (assignments
                  (assignment
                    (identifier)
                    (integer))))
              (function_call
                (identifier)
                (arguments
                  (assignment
                    (identifier)
                    (identifier))))))))))
  (var_declaration
    (assignment
      (identifier)
      (list
        (list_comprehension
          (for_clause
            (assignments
              (assignment
                (identifier)
                (range
                  (integer)
                  (integer))))
            (list_comprehension
              (if_clause
                (let_prefix
                  (assignments
                    (assignment
                      (identifier)
                      (integer))))
                (parenthesized_expression
                  (function_call
                    (identifier)
                    (arguments
                      (identifier))))
                (identifier)))))))))

================================================================================
Numbers
================================================================================
i = 5;
f  = -0.0;
ie = 10e10;
full = -2.3e-4;
negative_int = -6;
--------------------------------------------------------------------------------

(source_file
  (var_declaration
    (assignment
      (identifier)
      (integer)))
  (var_declaration
    (assignment
      (identifier)
      (float)))
  (var_declaration
    (assignment
      (identifier)
      (float)))
  (var_declaration
    (assignment
      (identifier)
      (float)))
  (var_declaration
    (assignment
      (identifier)
      (integer))))

================================================================================
Each Expansion
================================================================================
a = [1, 2, 3];
list = [1, 2, each a, each ([3, 4]), each 5, each for (x = [1:10]) x];
str_list = [each false, each [1:2], each undef, each "hello"];
fn_list = [each function() 10];
each_if = [each if (len(a) < 5) 10 else 15, each if (len(str_list) < 5) true];
--------------------------------------------------------------------------------

(source_file
  (var_declaration
    (assignment
      (identifier)
      (list
        (integer)
        (integer)
        (integer))))
  (var_declaration
    (assignment
      (identifier)
      (list
        (integer)
        (integer)
        (each
          (identifier))
        (each
          (parenthesized_expression
            (list
              (integer)
              (integer))))
        (each
          (integer))
        (each
          (list_comprehension
            (for_clause
              (assignments
                (assignment
                  (identifier)
                  (range
                    (integer)
                    (integer))))
              (identifier)))))))
  (var_declaration
    (assignment
      (identifier)
      (list
        (each
          (boolean))
        (each
          (range
            (integer)
            (integer)))
        (each
          (undef))
        (each
          (string)))))
  (var_declaration
    (assignment
      (identifier)
      (list
        (each
          (function_lit
            (parameters)
            (integer))))))
  (var_declaration
    (assignment
      (identifier)
      (list
        (each
          (list_comprehension
            (if_clause
              (parenthesized_expression
                (binary_expression
                  (function_call
                    (identifier)
                    (arguments
                      (identifier)))
                  (integer)))
              (integer)
              (integer))))
        (each
          (list_comprehension
            (if_clause
              (parenthesized_expression
                (binary_expression
                  (function_call
                    (identifier)
                    (arguments
                      (identifier)))
                  (integer)))
              (boolean))))))))
