=====================================
empty
=====================================

()

---

(source
  (block))

=====================================
single expression
=====================================

(1)

---

(source
  (block
    (integer)))

=====================================
multiple expressions separated by newline
=====================================

(
  1
  2
)

---

(source
  (block
    (integer)
    (integer)))

=====================================
multiple expressions separated by semicolon
=====================================

(1;2)

---

(source
  (block
    (integer)
    (integer)))

=====================================
multiple expressions separated by mixed separators
=====================================

(
  1

  ;

  2
)

---

(source
  (block
    (integer)
    (integer)))

=====================================
leading semicolon
=====================================

(;1;2)

---

(source
  (block
    (integer)
    (integer)))

=====================================
trailing semicolon
=====================================

(1;2;)

---

(source
  (block
    (integer)
    (integer)))

=====================================
stab clause / multiple clauses
=====================================

(x -> x; y -> y
 z -> z)

---

(source
  (block
    (stab_clause
      (arguments
        (identifier))
      (body
        (identifier)))
    (stab_clause
      (arguments
        (identifier))
      (body
        (identifier)))
    (stab_clause
      (arguments
        (identifier))
      (body
        (identifier)))))

=====================================
stab clause / multiple arguments
=====================================

(x, y, z -> x)
((x, y, z) -> x)

---

(source
  (block
    (stab_clause
      (arguments
        (identifier)
        (identifier)
        (identifier))
      (body
        (identifier))))
  (block
    (stab_clause
      (arguments
        (identifier)
        (identifier)
        (identifier))
      (body
        (identifier)))))

=====================================
stab clause / guard
=====================================

(x, y when x == y -> 1)
((x, y when x == y -> 1))
((x, y when x == y) -> 1)
(x, y when x, z -> 1)
((x, y when x, z -> 1))
((x, y when x, z) -> 1)

---

(source
  (block
    (stab_clause
      (binary_operator
        (arguments
          (identifier)
          (identifier))
        (binary_operator
          (identifier)
          (identifier)))
      (body
        (integer))))
  (block
    (block
      (stab_clause
        (binary_operator
          (arguments
            (identifier)
            (identifier))
          (binary_operator
            (identifier)
            (identifier)))
        (body
          (integer)))))
  (block
    (stab_clause
      (arguments
        (identifier)
        (binary_operator
          (identifier)
          (binary_operator
            (identifier)
            (identifier))))
      (body
        (integer))))
  (block
    (stab_clause
      (arguments
        (identifier)
        (binary_operator
          (identifier)
          (identifier))
        (identifier))
      (body
        (integer))))
  (block
    (block
      (stab_clause
        (arguments
          (identifier)
          (binary_operator
            (identifier)
            (identifier))
          (identifier))
        (body
          (integer)))))
  (block
    (stab_clause
      (arguments
        (identifier)
        (binary_operator
          (identifier)
          (identifier))
        (identifier))
      (body
        (integer)))))
