code: function() {
          var ch_i, node;
          ch_i = exprICode(index);
  
          if (ch_i === OPAREN_CODE) {
            node = gobbleGroup();
          } else {
            node = gobbleIdentifier();
          }
          gobbleSpaces();
          ch_i = exprICode(index);
          while (
            ch_i === PERIOD_CODE ||
            ch_i === OBRACK_CODE ||
            ch_i === OPAREN_CODE
          ) {
            index++;
            if (ch_i === PERIOD_CODE) {
              gobbleSpaces();
              node = {
                type: code.MEMBER_EXP,
                computed: false,
                object: node,
                property: gobbleIdentifier()
              };
            } else if (ch_i === OBRACK_CODE) {
              node = {
                type: code.MEMBER_EXP,
                computed: true,
                object: node,
                property: gobbleExpression()
              };
              gobbleSpaces();
              ch_i = exprICode(index);
              if (ch_i !== CBRACK_CODE) {
                throwError("Unclosed [", index);
              }
              index++;
            } else if (ch_i === OPAREN_CODE) {
              // A function call is being made; gobble all the arguments
              node = {
                type: code.CALL_EXP,
                arguments: gobbleArguments(CPAREN_CODE),
                callee: node
              };
            }
            gobbleSpaces();
            ch_i = exprICode(index);
          }
          return node;
        }
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