let shallow_string_of_bvexpr_op e = let open BV in match e with 
| Constant(c,i)  -> Printf.sprintf "BVConstant(0x%Lx,%d)" c i
| Variable(bv)   -> Printf.sprintf "%s[%d]" (BitVector.name_of_bv bv) (BitVector.size_of_bv bv)
| Extract(e,_,_) -> "BVExtract"
| Repeat(_,_)    -> "BVRepeat"
| Concat(_,_)    -> "BVConcat"
| ZeroExt(_,_)   -> "BVZeroExt"
| SignExt(_,_)   -> "BVSignExt"
| And(_,_)       -> "BVAnd"
| Or (_,_)       -> "BVOr"
| Xor(_,_)       -> "BVXor"
| Not(_)         -> "BVNot"
| RedAnd(_)      -> "BVRedAnd"
| RedOr (_)      -> "BVRedOr"
| RedXor(_)      -> "BVRedXor"
| ShlConst(_,_)  -> "BVShlConst"
| ShrConst(_,_)  -> "BVShrConst"
| SarConst(_,_)  -> "BVSarConst"
| RolConst(_,_)  -> "BVRolConst"
| RorConst(_,_)  -> "BVRorConst"
| ShlBv(_,_)     -> "BVShlBv"
| ShrBv(_,_)     -> "BVShrBv"
| SarBv(_,_)     -> "BVSarBv"
| RolBv(_,_)     -> "BVRolBv"
| RorBv(_,_)     -> "BVRorBv"
| Add(_,_)       -> "BVAdd"
| Sub(_,_)       -> "BVSub"
| Neg(_)         -> "BVNeg"
| EQ (_,_)       -> "BVEQ"
| NE (_,_)       -> "BVNE"
| SLT(_,_)       -> "BVSLT"
| SLE(_,_)       -> "BVSLE"
| ULT(_,_)       -> "BVULT"
| ULE(_,_)       -> "BVULE"

