================
Variables
================

w
w′
θ
θ̄
logŷ
ϵ
ŷ

---

(source_file
  (identifier)
  (identifier)
  (identifier)
  (identifier)
  (identifier)
  (identifier)
  (identifier))

=================
Strings
=================

"foo"
"""a "quoted" string"""
"fo\"o"

---

(source_file
  (string)
  (triple_string)
  (string))

=================
Command strings
=================

`foo`
`foo \` bar`

---

(source_file
  (command_string)
  (command_string))

=================
Prefixed strings
=================

x = r"foo"
y = v"1.0"

---

(source_file
  (assignment_expression (identifier) (string (identifier)))
  (assignment_expression (identifier) (string (identifier))))

=================
Characters
=================

'o'
'\t'

---

(source_file (character) (character))

=================
Assignments
=================

a = b
c &= d ÷= e
a, b = c, d, e

---

(source_file
  (assignment_expression
    (identifier)
    (identifier))
  (assignment_expression
    (identifier)
    (assignment_expression
      (identifier)
      (identifier)))
  (assignment_expression
    (bare_tuple_expression (identifier) (identifier))
    (bare_tuple_expression (identifier) (identifier) (identifier))))

=================
Functions
=================

function test(x, y)
end

---

(source_file
  (function_definition
    (identifier)
    (parameter_list (identifier) (identifier))))

=================
Function calls
=================

a()
b("hi", 2)
c(d...)
d(e; f = g)
new{typeof(xs)}(xs)

---

(source_file
  (call_expression (identifier) (argument_list))
  (call_expression (identifier) (argument_list (string) (number)))
  (call_expression (identifier) (argument_list (spread_expression (identifier))))
  (call_expression (identifier) (argument_list (identifier) (named_argument (identifier) (identifier))))
  (call_expression
    (parameterized_identifier
      (identifier)
      (type_argument_list
        (call_expression (identifier) (argument_list (identifier)))))
    (argument_list (identifier))))

=============================
Function calls with do blocks
=============================

a(b) do
  print(c)
end

---

(source_file
  (call_expression
    (identifier)
    (argument_list (identifier))
    (do_clause
      (call_expression (identifier) (argument_list (identifier))))))

=====================
Fields and subscripts
=====================

(a[1].b().c).d

---

(source_file
  (field_expression
    (parenthesized_expression (field_expression
      (call_expression
        (field_expression
          (subscript_expression (identifier) (number))
          (identifier))
        (argument_list))
      (identifier)))
    (identifier)))

=================
Macro calls
=================

@assert x == y
@assert x == y "a message"

@. a

@testset "a" begin
  b = c
end

---

(source_file
  (macro_expression
    (macro_identifier (identifier))
    (macro_argument_list
      (binary_expression (identifier) (identifier))))
  (macro_expression
    (macro_identifier (identifier))
    (macro_argument_list
      (binary_expression (identifier) (identifier))
      (string)))
  (macro_expression (macro_identifier (operator)) (macro_argument_list (identifier)))
  (macro_expression
    (macro_identifier (identifier))
    (macro_argument_list
      (string)
      (compound_expression (assignment_expression (identifier) (identifier))))))

=================
Binary operators
=================

a → b ⇶ c ⭄ d
a * b ⦼ c
a == b

---

(source_file
  (binary_expression
    (identifier)
    (binary_expression
      (identifier)
      (binary_expression
        (identifier)
        (identifier))))
  (binary_expression
    (binary_expression
      (identifier)
      (identifier))
    (identifier))
  (binary_expression
    (identifier)
    (identifier)))

===================================
Binary operators with leading dots
===================================

a .* b .+ c

---

(source_file
  (binary_expression
    (binary_expression (identifier) (identifier))
    (identifier)))

=================
Unary operators
=================

+a
-b
√9
[a]'
!(a + b)

---

(source_file
  (unary_expression (identifier))
  (unary_expression (identifier))
  (unary_expression (number))
  (unary_expression (array_expression (identifier)))
  (unary_expression
    (parenthesized_expression (binary_expression (identifier) (identifier)))))

====================
The ternary operator
====================

x = batch_size == 1 ?
  rand(10) :
  rand(10, batch_size)

---

(source_file
  (assignment_expression
    (identifier)
    (ternary_expression
      (binary_expression (identifier) (number))
      (call_expression (identifier) (argument_list (number)))
      (call_expression (identifier) (argument_list (number) (identifier))))))

====================
Operators as values
====================

x = +
print(:)
foo(^, ÷)

---

(source_file
  (assignment_expression (identifier) (operator))
  (call_expression (identifier) (argument_list (operator)))
  (call_expression (identifier) (argument_list (operator) (operator))))

============================
Numerical expressions
============================

1
2.0
3.
0xdeadbeef999
100_000_000
.4
1.0e-7

---

(source_file
  (number)
  (number)
  (number)
  (number)
  (number)
  (number)
  (number))

===========================
Coefficient expressions
===========================

2x^2 - 3x + 1
1.5x^2 - .5x + 1
2^2x
2(x-1)^2 - 3(x-1) + 1

---

(source_file
  (binary_expression
    (binary_expression
      (binary_expression
        (coefficient_expression (number) (identifier))
        (number))
      (coefficient_expression (number) (identifier)))
    (number))
  (binary_expression
    (binary_expression
      (binary_expression
        (coefficient_expression (number) (identifier))
        (number))
      (coefficient_expression (number) (identifier)))
    (number))
  (binary_expression
    (number)
    (coefficient_expression (number) (identifier)))
  (binary_expression
    (binary_expression
      (binary_expression
        (coefficient_expression
          (number)
          (parenthesized_expression (binary_expression (identifier) (number))))
        (number))
      (coefficient_expression
        (number)
        (parenthesized_expression (binary_expression (identifier) (number)))))
    (number)))

=================
Tuples
=================

()
(1)
(1,)
(2,3,4,)

---

(source_file
  (tuple_expression)
  (parenthesized_expression (number))
  (tuple_expression (number))
  (tuple_expression (number) (number) (number)))

=================
Named tuples
=================

(a = 1)
(a = 1,)
(a = 1, b = 2)

---

(source_file
  (parenthesized_expression
    (assignment_expression (identifier) (number)))
  (tuple_expression
    (named_field (identifier) (number)))
  (tuple_expression
    (named_field (identifier) (number))
    (named_field (identifier) (number))))

=================
Arrays
=================

[]
[1, 2,]

---

(source_file
  (array_expression)
  (array_expression (number) (number)))

=================
Matrices
=================

[1 2]
[1 2; 3 4]
[1 2; 3 4;]

---

(source_file
  (matrix_expression
    (matrix_row (number) (number)))
  (matrix_expression
    (matrix_row (number) (number))
    (matrix_row (number) (number)))
  (matrix_expression
    (matrix_row (number) (number))
    (matrix_row (number) (number))))

=================
Pairs
=================

A(b => c, d => e)

---

(source_file
  (call_expression
    (identifier)
    (argument_list
      (pair_expression (identifier) (identifier))
      (pair_expression (identifier) (identifier)))))

====================
Function expressions
====================

x -> x^2
(x,y,z)->2x+y-z
()->3
function () 3 end
() -> (sleep(0.1); i += 1; l)

---

(source_file
  (function_expression
    (identifier)
    (binary_expression (identifier) (number)))
  (function_expression
    (parameter_list (identifier) (identifier) (identifier))
    (binary_expression
      (binary_expression (coefficient_expression (number) (identifier)) (identifier))
      (identifier)))
  (function_expression
    (parameter_list)
    (number))
  (function_expression
    (parameter_list)
    (number))
  (function_expression
    (parameter_list)
    (parenthesized_expression
      (call_expression (identifier) (argument_list (number)))
      (assignment_expression (identifier) (number))
      (identifier))))

============================
Generator expressions
============================

(b(c, e) for c in d, e = 5 if e)
[b(c, e) for c in d for e in f]

---

(source_file
  (generator_expression
    (call_expression (identifier) (argument_list (identifier) (identifier)))
    (for_clause
      (for_binding (identifier) (identifier))
      (for_binding (identifier) (number)))
    (if_clause (identifier)))
  (array_comprehension_expression
    (call_expression (identifier) (argument_list (identifier) (identifier)))
    (for_clause (for_binding (identifier) (identifier)))
    (for_clause (for_binding (identifier) (identifier)))))
