     o "Expression ! OF Expression",             -> new OpNode '!', new ParentheticalNode new OpNode 'in', $1, $4
   ]
 
-}
 
 # Precedence
 # ----------

  # clause. If it's an array comprehension, you can also choose to step through
  # in fixed-size increments.
  ForSource: [
    o "IN Expression",                               -> {source: $2}
    o "OF Expression",                               -> {source: $2, object: true}
    o "IN Expression WHEN Expression",               -> {source: $2, guard: $4}
    o "OF Expression WHEN Expression",               -> {source: $2, guard: $4, object: true}
    o "IN Expression BY Expression",                 -> {source: $2, step:  $4}
    o "IN Expression WHEN Expression BY Expression", -> {source: $2, guard: $4, step:   $6}
    o "IN Expression BY Expression WHEN Expression", -> {source: $2, step:  $4, guard: $6}
  ]

  # The CoffeeScript switch/when/else block replaces the JavaScript

# `$1` would be the value of the first `Expression`, `$2` would be the token
# for the `UNLESS` terminal, and `$3` would be the value of the second
# `Expression`.
grammar =

  # The **Root** is the top-level node in the syntax tree. Since we parse bottom-up,
  # all parsing must end here.
