====
cast
====

select (Foo) f

---
(ql (moduleMember (select (asExprs (asExpr (prefix_cast (typeExpr (className)) (variable (varName (simpleId)))))))))
========
dontcare
========

select foo(_)

---
(ql (moduleMember (select (asExprs (asExpr (classless_predicate_call (aritylessPredicateExpr (literalId)) (underscore)))))))
====
unop
====

select - 5, + 5

---
 (ql (moduleMember (select (asExprs (asExpr (unary_expr (unop (minus)) (literal (integer)))) (asExpr (unary_expr (unop (plus)) (literal (integer))))))))
=====
binop
=====

select 5 + 5, 5 - 5, 5 * 5, 5 / 5, 5 % 5

---

(ql (moduleMember 
  (select 
    (asExprs 
      (asExpr (add_expr (literal (integer)) (addop (plus)) (literal (integer)))) 
      (asExpr (add_expr (literal (integer)) (addop (minus)) (literal (integer)))) 
      (asExpr (mul_expr (literal (integer)) (mulop (star)) (literal (integer)))) 
      (asExpr (mul_expr (literal (integer)) (mulop (slash)) (literal (integer)))) 
      (asExpr (mul_expr (literal (integer)) (mulop (mod)) (literal (integer))))))))

================
binop precedence
================

select
  // left associative
  5 + 5 - 5,
  5 - 5 + 5,
  // mul binds tighter
  5 + 5 * 5,
  5 + 5 / 5,
  5 * 5 + 5,
  5 / 5 + 5,
  // left associative
  5 / 5 * 5,
  5 * 5 / 5,
  // mod tighter,
  5 * 5 % 5,
  5 % 5 * 5

---

(ql (moduleMember (select (line_comment) 
  (asExprs 
    (asExpr (add_expr (add_expr (literal (integer)) (addop (plus)) (literal (integer))) (addop (minus)) (literal (integer)))) 
    (asExpr (add_expr (add_expr (literal (integer)) (addop (minus)) (literal (integer))) (addop (plus)) (literal (integer)))) 
    (line_comment) 
    (asExpr (add_expr (literal (integer)) (addop (plus)) (mul_expr (literal (integer)) (mulop (star)) (literal (integer))))) 
    (asExpr (add_expr (literal (integer)) (addop (plus)) (mul_expr (literal (integer)) (mulop (slash)) (literal (integer))))) 
    (asExpr (add_expr (mul_expr (literal (integer)) (mulop (star)) (literal (integer))) (addop (plus)) (literal (integer)))) 
    (asExpr (add_expr (mul_expr (literal (integer)) (mulop (slash)) (literal (integer))) (addop (plus)) (literal (integer)))) 
    (line_comment) 
    (asExpr (mul_expr (mul_expr (literal (integer)) (mulop (slash)) (literal (integer))) (mulop (star)) (literal (integer)))) 
    (asExpr (mul_expr (mul_expr (literal (integer)) (mulop (star)) (literal (integer))) (mulop (slash)) (literal (integer)))) 
    (line_comment) 
    (asExpr (mul_expr (mul_expr (literal (integer)) (mulop (star)) (literal (integer))) (mulop (mod)) (literal (integer))))
    (asExpr (mul_expr (mul_expr (literal (integer)) (mulop (mod)) (literal (integer))) (mulop (star)) (literal (integer))))))))