code: function() {
          var test = gobbleBinaryExpression(),
            consequent,
            alternate;
          gobbleSpaces();
          if (exprICode(index) === QUMARK_CODE) {
            // Ternary expression: test ? consequent : alternate
            index++;
            consequent = gobbleExpression();
            if (!consequent) {
              throwError("Expected expression", index);
            }
            gobbleSpaces();
            if (exprICode(index) === COLON_CODE) {
              index++;
              alternate = gobbleExpression();
              if (!alternate) {
                throwError("Expected expression", index);
              }
              return {
                type: code.CONDITIONAL_EXP,
                test: test,
                consequent: consequent,
                alternate: alternate
              };
            } else {
              throwError("Expected :", index);
            }
          } else {
            return test;
          }
        }
docs: `index` stores the character number we are currently at while `length` is a constant All of the gobbles below will modify `index` as we move along