code: function() {
      var
        op,
        node,
        ident = this.id(),
        name = ident.name;
  
      if (op =
           this.accept('=')
        || this.accept('?=')
        || this.accept('+=')
        || this.accept('-=')
        || this.accept('*=')
        || this.accept('/=')
        || this.accept('%=')) {
        this.state.push('assignment');
        var expr = this.list();
        // @block support
        if (expr.isEmpty) this.assignAtblock(expr);
        node = new nodes.Ident(name, expr);
  
        node.lineno = ident.lineno;
        node.column = ident.column;
  
        this.state.pop();
  
        switch (op.type) {
          case '?=':
            var defined = new nodes.BinOp('is defined', node)
              , lookup = new nodes.Expression;
            lookup.push(new nodes.Ident(name));
            node = new nodes.Ternary(defined, lookup, node);
            break;
          case '+=':
          case '-=':
          case '*=':
          case '/=':
          case '%=':
            node.val = new nodes.BinOp(op.type[0], new nodes.Ident(name), expr);
            break;
        }
      }
  
      return node;
    }
docs: ident ('=' | '?=') expression