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

📄 types.java

📁 大名鼎鼎的java动态脚本语言。已经通过了sun的认证
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
                }                switch( specific )                {                    case KEYWORD_INSTANCEOF:                    case GSTRING_EXPRESSION_START:                    case GSTRING_EXPRESSION_END:                    case GSTRING_END:                        return false;                }                return true;            case PRECLUDES_CAST_OPERATOR:                switch( specific )                {                    case PLUS:                    case MINUS:                    case PREFIX_MINUS:                    case PREFIX_MINUS_MINUS:                    case PREFIX_PLUS:                    case PREFIX_PLUS_PLUS:                    case LEFT_PARENTHESIS:                        return false;                }                return !ofType( specific, COMPLEX_EXPRESSION );            case OPERATOR_EXPRESSION:                return specific >= DOT && specific <= RIGHT_SHIFT_UNSIGNED;            case SYNTH_EXPRESSION:                switch( specific )                {                    case SYNTH_CAST:                    case SYNTH_CLOSURE:                    case SYNTH_TERNARY:                        return true;                }                break;            case KEYWORD_EXPRESSION:                switch( specific )                {                    case KEYWORD_NEW:                    case KEYWORD_THIS:                    case KEYWORD_SUPER:                    case KEYWORD_INSTANCEOF:                    case KEYWORD_TRUE:                    case KEYWORD_FALSE:                    case KEYWORD_NULL:                        return true;                }                break;            case LITERAL_EXPRESSION:                return specific >= STRING && specific <= DECIMAL_NUMBER;            case ARRAY_EXPRESSION:                return specific == LEFT_SQUARE_BRACKET;            case EXPRESSION:                if( specific >= DOT && specific <= RIGHT_SHIFT_UNSIGNED )                {                    return true;                }                if( specific >= STRING && specific <= DECIMAL_NUMBER )                {                    return true;                }                switch( specific )                {                    case SYNTH_CAST:                    case SYNTH_CLOSURE:                    case SYNTH_TERNARY:                    case SYNTH_GSTRING:                    case KEYWORD_NEW:                    case KEYWORD_THIS:                    case KEYWORD_SUPER:                    case KEYWORD_INSTANCEOF:                    case KEYWORD_TRUE:                    case KEYWORD_FALSE:                    case KEYWORD_NULL:                    case LEFT_SQUARE_BRACKET:                        return true;                }                break;            case COMPLEX_EXPRESSION:                switch( specific )                {                    case KEYWORD_NEW:                    case SYNTH_METHOD_CALL:                    case SYNTH_GSTRING:                    case SYNTH_LIST:                    case SYNTH_MAP:                    case SYNTH_CLOSURE:                    case SYNTH_TERNARY:                    case SYNTH_VARIABLE_DECLARATION:                        return true;                }                /* FALL THROUGH */            case SIMPLE_EXPRESSION:                if( specific >= STRING && specific <= DECIMAL_NUMBER ) {                    return true;                }                switch( specific ) {                    case KEYWORD_SUPER:                    case KEYWORD_THIS:                    case KEYWORD_TRUE:                    case KEYWORD_FALSE:                    case KEYWORD_NULL:                        return true;                }                break;        }        return false;    }  //---------------------------------------------------------------------------  // TYPE COERSIONS   /**    *  Given two types, returns true if the first can be viewed as the second.    *  NOTE that <code>canMean()</code> is orthogonal to <code>ofType()</code>.    */    public static boolean canMean( int actual, int preferred ) {        if( actual == preferred ) {            return true;        }        switch( preferred ) {            case SYNTH_PARAMETER_DECLARATION:            case IDENTIFIER:                switch( actual ) {                    case IDENTIFIER:                    case KEYWORD_DEF:                    case KEYWORD_DEFMACRO:                    case KEYWORD_CLASS:                    case KEYWORD_INTERFACE:                    case KEYWORD_MIXIN:                        return true;                }                break;            case SYNTH_CLASS:            case SYNTH_INTERFACE:            case SYNTH_MIXIN:            case SYNTH_METHOD:            case SYNTH_PROPERTY:                return actual == IDENTIFIER;            case SYNTH_LIST:            case SYNTH_MAP:                return actual == LEFT_SQUARE_BRACKET;            case SYNTH_CAST:                return actual == LEFT_PARENTHESIS;            case SYNTH_BLOCK:            case SYNTH_CLOSURE:                return actual == LEFT_CURLY_BRACE;            case SYNTH_LABEL:                return actual == COLON;            case SYNTH_VARIABLE_DECLARATION:                return actual == IDENTIFIER;        }        return false;    }   /**    *  Converts a node from a generic type to a specific prefix type.    *  Throws a <code>GroovyBugError</code> if the type can't be converted    *  and requested.    */    public static void makePrefix( CSTNode node, boolean throwIfInvalid ) {        switch( node.getMeaning() ) {            case PLUS:                node.setMeaning( PREFIX_PLUS );                break;            case MINUS:                node.setMeaning( PREFIX_MINUS );                break;            case PLUS_PLUS:                node.setMeaning( PREFIX_PLUS_PLUS );                break;            case MINUS_MINUS:                node.setMeaning( PREFIX_MINUS_MINUS );                break;            default:                if( throwIfInvalid ) {                    throw new GroovyBugError( "cannot convert to prefix for type [" + node.getMeaning() + "]" );                }        }    }   /**    *  Converts a node from a generic type to a specific postfix type.    *  Throws a <code>GroovyBugError</code> if the type can't be converted.    */    public static void makePostfix( CSTNode node, boolean throwIfInvalid ) {        switch( node.getMeaning() ) {            case PLUS_PLUS:                node.setMeaning( POSTFIX_PLUS_PLUS );                break;            case MINUS_MINUS:                node.setMeaning( POSTFIX_MINUS_MINUS );                break;            default:                if( throwIfInvalid ) {                    throw new GroovyBugError( "cannot convert to postfix for type [" + node.getMeaning() + "]" );                }        }    }  //---------------------------------------------------------------------------  // OPERATOR PRECEDENCE   /**    *  Returns the precendence of the specified operator.  Non-operator's will    *  receive -1 or a GroovyBugError, depending on your preference.    */    public static int getPrecedence( int type, boolean throwIfInvalid ) {        switch( type ) {            case LEFT_PARENTHESIS:                return 0;            case EQUAL:            case PLUS_EQUAL:            case MINUS_EQUAL:            case MULTIPLY_EQUAL:            case DIVIDE_EQUAL:            case INTDIV_EQUAL:            case MOD_EQUAL:            case POWER_EQUAL:            case LOGICAL_OR_EQUAL:            case LOGICAL_AND_EQUAL:            case LEFT_SHIFT_EQUAL:            case RIGHT_SHIFT_EQUAL:            case RIGHT_SHIFT_UNSIGNED_EQUAL:            case BITWISE_OR_EQUAL:            case BITWISE_AND_EQUAL:            case BITWISE_XOR_EQUAL:                return 5;            case QUESTION:                return 10;            case LOGICAL_OR:                return 15;            case LOGICAL_AND:                return 20;            case BITWISE_OR:	    case BITWISE_AND:            case BITWISE_XOR:                return 22;            case COMPARE_IDENTICAL:            case COMPARE_NOT_IDENTICAL:                return 24;            case COMPARE_NOT_EQUAL:            case COMPARE_EQUAL:            case COMPARE_LESS_THAN:            case COMPARE_LESS_THAN_EQUAL:            case COMPARE_GREATER_THAN:            case COMPARE_GREATER_THAN_EQUAL:            case COMPARE_TO:            case FIND_REGEX:            case MATCH_REGEX:            case KEYWORD_INSTANCEOF:                return 25;            case DOT_DOT:            case DOT_DOT_DOT:                return 30;            case LEFT_SHIFT:            case RIGHT_SHIFT:            case RIGHT_SHIFT_UNSIGNED:                return 35;            case PLUS:            case MINUS:                return 40;            case MULTIPLY:            case DIVIDE:            case INTDIV:            case MOD:                return 45;            case NOT:            case REGEX_PATTERN:                return 50;            case SYNTH_CAST:                return 55;            case PLUS_PLUS:            case MINUS_MINUS:            case PREFIX_PLUS_PLUS:            case PREFIX_MINUS_MINUS:            case POSTFIX_PLUS_PLUS:            case POSTFIX_MINUS_MINUS:                return 65;            case PREFIX_PLUS:            case PREFIX_MINUS:                return 70;            case POWER:                return 72;            case SYNTH_METHOD:            case LEFT_SQUARE_BRACKET:                return 75;            case DOT:            case NAVIGATE:                return 80;            case KEYWORD_NEW:

⌨️ 快捷键说明

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