⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 expstdop.java

📁 UML设计测试工具
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
    public Value eval(EvalContext ctx, Value[] args, Type resultType) {        int i1 = ((IntegerValue) args[0]).value();        int i2 = ((IntegerValue) args[1]).value();        return new IntegerValue(i1 / i2);    }}// --------------------------------------------------------/* < : Number x Number -> Boolean */final class Op_number_less extends OpGeneric {    public String name() { return "<"; }    public int kind() { return PREDICATE; }    public boolean isInfixOrPrefix() { return true; }    public Type matches(Type params[]) {        return ( params.length == 2                 && params[0].isNumber()                 && params[1].isNumber() )            ? TypeFactory.mkBoolean() : null;    }    public Value eval(EvalContext ctx, Value[] args, Type resultType) {        double d1;        double d2;        if (args[0].isInteger() )            d1 = ((IntegerValue) args[0]).value();        else            d1 = ((RealValue) args[0]).value();        if (args[1].isInteger() )            d2 = ((IntegerValue) args[1]).value();        else            d2 = ((RealValue) args[1]).value();        return BooleanValue.get(d1 < d2);    }}// --------------------------------------------------------/* > : Number x Number -> Boolean */final class Op_number_greater extends OpGeneric {    public String name() { return ">"; }    public int kind() { return PREDICATE; }    public boolean isInfixOrPrefix() { return true; }    public Type matches(Type params[]) {        return ( params.length == 2                 && params[0].isNumber()                 && params[1].isNumber() )            ? TypeFactory.mkBoolean() : null;    }    public Value eval(EvalContext ctx, Value[] args, Type resultType) {        double d1;        double d2;        if (args[0].isInteger() )            d1 = ((IntegerValue) args[0]).value();        else            d1 = ((RealValue) args[0]).value();        if (args[1].isInteger() )            d2 = ((IntegerValue) args[1]).value();        else            d2 = ((RealValue) args[1]).value();        return BooleanValue.get(d1 > d2);    }}// --------------------------------------------------------/* <= : Number x Number -> Boolean */final class Op_number_lessequal extends OpGeneric {    public String name() { return "<="; }    public int kind() { return PREDICATE; }    public boolean isInfixOrPrefix() { return true; }    public Type matches(Type params[]) {        return ( params.length == 2                 && params[0].isNumber()                 && params[1].isNumber() )            ? TypeFactory.mkBoolean() : null;    }    public Value eval(EvalContext ctx, Value[] args, Type resultType) {        double d1;        double d2;        if (args[0].isInteger() )            d1 = ((IntegerValue) args[0]).value();        else            d1 = ((RealValue) args[0]).value();        if (args[1].isInteger() )            d2 = ((IntegerValue) args[1]).value();        else            d2 = ((RealValue) args[1]).value();        return BooleanValue.get(d1 <= d2);    }}// --------------------------------------------------------/* >= : Number x Number -> Boolean */final class Op_number_greaterequal extends OpGeneric {    public String name() { return ">="; }    public int kind() { return PREDICATE; }    public boolean isInfixOrPrefix() { return true; }    public Type matches(Type params[]) {        return ( params.length == 2                 && params[0].isNumber()                 && params[1].isNumber() )            ? TypeFactory.mkBoolean() : null;    }    public Value eval(EvalContext ctx, Value[] args, Type resultType) {        double d1;        double d2;        if (args[0].isInteger() )            d1 = ((IntegerValue) args[0]).value();        else            d1 = ((RealValue) args[0]).value();        if (args[1].isInteger() )            d2 = ((IntegerValue) args[1]).value();        else            d2 = ((RealValue) args[1]).value();        return BooleanValue.get(d1 >= d2);    }}// --------------------------------------------------------// // String operations. //// --------------------------------------------------------/* size : String -> Integer */final class Op_string_size extends OpGeneric {    public String name() { return "size"; }    public int kind() { return OPERATION; }    public boolean isInfixOrPrefix() { return false; }    public Type matches(Type params[]) {        return ( params.length == 1 && params[0].isString() )            ? TypeFactory.mkInteger() : null;    }    public Value eval(EvalContext ctx, Value[] args, Type resultType) {        int res = ((StringValue) args[0]).value().length();        return new IntegerValue(res);    }}// --------------------------------------------------------/* concat : String x String -> String */final class Op_string_concat extends OpGeneric {    public String name() { return "concat"; }    public int kind() { return OPERATION; }    public boolean isInfixOrPrefix() { return false; }    public Type matches(Type params[]) {        return ( params.length == 2                 && params[0].isString()                 && params[1].isString() )            ? params[0] : null;    }    public Value eval(EvalContext ctx, Value[] args, Type resultType) {        String s1 = ((StringValue) args[0]).value();        String s2 = ((StringValue) args[1]).value();        return new StringValue(s1 + s2);    }}// --------------------------------------------------------/* toUpper : String -> String */final class Op_string_toUpper extends OpGeneric {    public String name() { return "toUpper"; }    public int kind() { return OPERATION; }    public boolean isInfixOrPrefix() { return false; }    public Type matches(Type params[]) {        return ( params.length == 1 && params[0].isString() )            ? params[0] : null;    }    public Value eval(EvalContext ctx, Value[] args, Type resultType) {        String s1 = ((StringValue) args[0]).value();        return new StringValue(s1.toUpperCase());    }}// --------------------------------------------------------/* toLower : String -> String */final class Op_string_toLower extends OpGeneric {    public String name() { return "toLower"; }    public int kind() { return OPERATION; }    public boolean isInfixOrPrefix() { return false; }    public Type matches(Type params[]) {        return ( params.length == 1 && params[0].isString() )            ? params[0] : null;    }    public Value eval(EvalContext ctx, Value[] args, Type resultType) {        String s1 = ((StringValue) args[0]).value();        return new StringValue(s1.toLowerCase());    }}// --------------------------------------------------------/* substring : String x Integer x Integer -> String */final class Op_string_substring extends OpGeneric {    public String name() { return "substring"; }    public int kind() { return OPERATION; }    public boolean isInfixOrPrefix() { return true; }    public Type matches(Type params[]) {        return ( params.length == 3                 && params[0].isString()                 && params[1].isInteger()                 && params[2].isInteger() )            ? params[0] : null;    }    public Value eval(EvalContext ctx, Value[] args, Type resultType) {        String s1 = ((StringValue) args[0]).value();        int lower = ((IntegerValue) args[1]).value();        int upper = ((IntegerValue) args[2]).value();                // return empty string in case of invalid range        String s;        try {            s = s1.substring(lower - 1, upper);        } catch (StringIndexOutOfBoundsException e) {            s = "";        }        return new StringValue(s);    }}// --------------------------------------------------------/* < : String x String -> Boolean */final class Op_string_less extends OpGeneric {    public String name() { return "<"; }    public int kind() { return PREDICATE; }    public boolean isInfixOrPrefix() { return true; }    public Type matches(Type params[]) {        return ( params.length == 2                 && params[0].isString()                 && params[1].isString() )            ? TypeFactory.mkBoolean() : null;    }    public Value eval(EvalContext ctx, Value[] args, Type resultType) {        int c = args[0].compareTo(args[1]);        return ( c < 0 ) ? BooleanValue.TRUE : BooleanValue.FALSE;    }}// --------------------------------------------------------/* > : String x String -> Boolean */final class Op_string_greater extends OpGeneric {    public String name() { return ">"; }    public int kind() { return PREDICATE; }    public boolean isInfixOrPrefix() { return true; }    public Type matches(Type params[]) {        return ( params.length == 2                 && params[0].isString()                 && params[1].isString() )            ? TypeFactory.mkBoolean() : null;    }    public Value eval(EvalContext ctx, Value[] args, Type resultType) {        int c = args[0].compareTo(args[1]);        return ( c > 0 ) ? BooleanValue.TRUE : BooleanValue.FALSE;    }}// --------------------------------------------------------/* <= : String x String -> Boolean */final class Op_string_lessequal extends OpGeneric {    public String name() { return "<="; }    public int kind() { return PREDICATE; }    public boolean isInfixOrPrefix() { return true; }    public Type matches(Type params[]) {        return ( params.length == 2                 && params[0].isString()                 && params[1].isString() )            ? TypeFactory.mkBoolean() : null;    }    public Value eval(EvalContext ctx, Value[] args, Type resultType) {        int c = args[0].compareTo(args[1]);        return ( c <= 0 ) ? BooleanValue.TRUE : BooleanValue.FALSE;    }}// --------------------------------------------------------/* >= : String x String -> Boolean */final class Op_string_greaterequal extends OpGeneric {    public String name() { return ">="; }    public int kind() { return PREDICATE; }    public boolean isInfixOrPrefix() { return true; }    public Type matches(Type params[]) {        return ( params.length == 2                 && params[0].isString()                 && params[1].isString() )            ? TypeFactory.mkBoolean() : null;    }    public Value eval(EvalContext ctx, Value[] args, Type resultType) {        int c = args[0].compareTo(args[1]);        return ( c >= 0 ) ? BooleanValue.TRUE : BooleanValue.FALSE;    }}// --------------------------------------------------------//// Boolean operations. //// --------------------------------------------------------/** * This class is the base class for boolean operations. Boolean * operations need special treatment of undefined arguments. Also, * short-circuit evaluation may be used to speed up the evaluation * process. */abstract class BooleanOperation extends OpGeneric {    public int kind() { return SPECIAL; }    public Value eval(EvalContext ctx, Value[] args, Type resultType) {        throw new RuntimeException("Use evalWithArgs");    }    public abstract Value evalWithArgs(EvalContext ctx, Expression args[]);}// --------------------------------------------------------/* or : Boolean x Boolean -> Boolean */final class Op_boolean_or extends BooleanOperation {    public String name() { return "or"; }    public boolean isInfixOrPrefix() { return true; }    public Type matches(Type params[]) {        return ( params.length == 2                 && params[0].isBoolean()                 && params[1].isBoolean() )            ? params[0] : null;    }    public Value evalWithArgs(EvalContext ctx, Expression args[]) {        Value v1 = args[0].eval(ctx);        if (v1.isDefined() ) {            boolean b1 = ((BooleanValue) v1).value();            if (b1 )                 return BooleanValue.TRUE;            else {                Value v2 = args[1].eval(ctx);                return v2;            }        } else {            Value v2 = args[1].eval(ctx);            if (v2.isDefined() ) {                boolean b2 = ((BooleanValue) v2).value();                if (b2 )                    return BooleanValue.TRUE;            }            return new UndefinedValue(TypeFactory.mkBoolean());        }    }}// --------------------------------------------------------/* xor : Boolean x Boolean -> Boolean */final class Op_boolean_xor extends BooleanOperation {    public String name() { return "xor"; }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -