===
binary
===

e: a & b
e: (a & b) | (c)
e: len(a) >= 2
e: ({a:1}|*{b:1}) & ({a:1}|*{b:1})

---

(source_file
 (field (label (identifier)) (value (binary_expression (identifier) (identifier))))
 (field (label (identifier)) (value (binary_expression
																		 (binary_expression (identifier) (identifier))
																		 (identifier))))
 (field (label (identifier)) (value (binary_expression
																		 (call_expression (builtin) (arguments (argument (identifier))))
																		 (int_lit))))
 (field (label (identifier)) (value (binary_expression
																		 (binary_expression
																			(struct_lit (field (label (identifier)) (value (int_lit))))
																			(unary_expression (struct_lit (field (label (identifier)) (value (int_lit))))))
																		 (binary_expression
																			(struct_lit (field (label (identifier)) (value (int_lit))))
																			(unary_expression (struct_lit (field (label (identifier)) (value (int_lit))))))))))

===
unary
===

i: *1 | number
r: =~ "foo"
c: * >=5 | int

---

(source_file
 (field (label (identifier)) (value (binary_expression
																		 (unary_expression (int_lit))
																		 (number_type))))
 (field (label (identifier)) (value (unary_expression
																		 (simple_string_lit))))
 (field (label (identifier)) (value (binary_expression
																		 (unary_expression (unary_expression (int_lit)))
																		 (int_type)))))

===
call
===

b: base64.Encode(null, "foo")
s: close({
	let X = len(["a", "b", "c"])
})

---

(source_file 
 (field (label (identifier)) 
	(value 
	 (call_expression 
		(qualified_identifier (package_identifier) (dot) (identifier)) 
		(arguments (argument (null)) (argument (simple_string_lit)))))) 
 (field (label (identifier)) 
	(value 
	 (call_expression 
		(builtin) 
		(arguments 
		 (argument 
			(struct_lit 
			 (let_clause (identifier) 
				(call_expression (builtin) 
				 (arguments (argument (list_lit (simple_string_lit) (simple_string_lit) (simple_string_lit)))))))))))))

===
selector
===

a: a.b."foo"

---

(source_file 
 (field (label (identifier)) (value 
															(selector_expression 
															 (selector_expression (identifier) 
																(selector (dot) (identifier))) 
															 (selector (dot) (simple_string_lit))))))

===
index
===

b: a["f"][x]
l: [1, 2][0]

---

(source_file 
 (field (label (identifier)) (value 
															(index_expression 
															 (index_expression (identifier) 
																(index (simple_string_lit))) 
															 (index (identifier))))) 
 (field (label (identifier)) (value 
															(index_expression 
															 (list_lit (int_lit) (int_lit)) 
															 (index (int_lit))))))
