       keyword("switch"),
       "(", @expression, ")",
       "{", repeat(choice(@case, @default)), "}")
-
-    case: -> seq(
-      keyword("case"),
-      @expression,
-      ":",
-      repeat(@statement))
-
-    default: -> seq(
-      keyword("default"),
-      ":",
-      repeat(@statement))
-
-    break_statement: -> seq(
-      keyword("break"),
-      terminator())
 
     for_statement: -> seq(
       keyword("for"),

  rules:
    program: -> repeat(@statement)

    statement: -> choice(
      @expression_statement,
      @if_statement,
      @switch_statement,
      @for_statement,
      @for_in_statement,
      @while_statement,
      @do_statement,
      @break_statement,
      @statement_block,
      @return_statement,
      @throw_statement,
      @try_statement,
      @delete_statement,
      @var_declaration)

    expression_statement: -> seq(
      err(@expression), terminator())

    if_statement: -> seq(
      keyword("if"),

      keyword("finally"),
      @statement_block)

    var_assignment: -> seq(
      @identifier,
      "=",
      @expression)

    _paren_expression: -> seq(
      "(", err(@expression), ")")

    #
    # Expressions
    #

    expression: -> choice(
      @object,
      @array,
      @function,
      @function_call,
      @constructor_call,
      @member_access,
      @subscript_access,
      @assignment,
      @math_assignment,
      @ternary,
      @bool_op,
      @math_op,
      @comma_op,
      @bitwise_op,
      @rel_op,
      @type_op,
      @_paren_expression,

      @identifier,
      @number,
      @string,
