code: public Expr toConstIfPossible() {
  		if (expr instanceof Const && (op == Sym.SUB || op == Sym.ADD || op == Sym.NOT)) {
  		} else {
  			return this;
  		}
  		
  		Expr ret = this;
  		Const c = (Const)expr;
  		if (op == Sym.SUB) {
  			if (c.isInt()) {
  				ret = new Const(Sym.INT, -c.getInt());
  			} else if (c.isLong()) {
  				ret = new Const(Sym.LONG, -c.getLong());
  			} else if (c.isFloat()) {
  				ret = new Const(Sym.FLOAT, -c.getFloat());
  			} else if (c.isDouble()) {
  				ret = new Const(Sym.DOUBLE, -c.getDouble());
  			}
  		} else if (op == Sym.ADD) {
  			if (c.isNumber()) {
  				ret = c;
  			}
  		} else if (op == Sym.NOT) {
  			if (c.isBoolean()) {
  				ret = c.isTrue() ? Const.FALSE : Const.TRUE;
  			}
  		}
  		
  		return ret;
  	}
docs: 如果可能的话，将 Unary 表达式转化成 Const 表达式，类似于 ExprParser.buildMapEntry() 需要这种转化来简化实现
  除了可简化程序外，还起到一定的性能优化作用
  
  Number : +123 -456 +3.14 -0.12
  Boolean : !true !false
  
  特别注意：
  Boolean 的支持并不需要，!true、!false 已在 ExprParser 中被 Logic 表达式接管，在此仅为逻辑上的完备性而添加