(:atom atom)
(:num num)
(:string str)
(:name name)
(:array elems)
(:object properties)
(:regexp expr flags)

(:assign op place val)
(:binary op lhs rhs)
(:unary-postfix op place)
(:unary-prefix op place)
(:call func args)
(:dot obj attr)
(:sub obj attr)
(:seq form1 result)
(:conditional test then else)
(:function name args stat*)
(:new func args)

(:toplevel stat*)
(:block stat*)
(:stat form)
(:label name form)
(:if test then else)
(:with obj body)
(:var bindings)
(:defun name args stat*)
(:return value)
(:debugger)

(:try body catch finally)
(:throw expr)

(:break label)
(:continue label)
(:while cond body)
(:do cond body)
(:for init cond step body)
(:for-in init lhs obj body)
(:switch val (case . body)*)
