types.java

来自「Groovy动态语言 运行在JVM中的动态语言 可以方便的处理业务逻辑变化大的业」· Java 代码 · 共 1,472 行 · 第 1/4 页

JAVA
1,472
字号
                return 85;
        }

        if( throwIfInvalid ) {
            throw new GroovyBugError( "precedence requested for non-operator" );
        }

        return -1;
    }




  //---------------------------------------------------------------------------
  // TEXTS

    private static final Map TEXTS  = new HashMap();  // symbol/keyword type -> text
    private static final Map LOOKUP = new HashMap();  // text -> symbol/keyword type


   /**
    *  Returns the type for the specified symbol/keyword text.  Returns UNKNOWN
    *  if the text isn't found.  You can filter finds on a type.
    */

    public static int lookup( String text, int filter ) {
        int type = UNKNOWN;

        if( LOOKUP.containsKey(text) ) {
            type = ((Integer)LOOKUP.get(text)).intValue();
            if( filter != UNKNOWN && !ofType(type, filter) ) {
                type = UNKNOWN;
            }
        }

        return type;
    }


   /**
    *  Returns the type for the specified keyword text.  Returns UNKNOWN
    *  if the text isn't found.
    */

    public static int lookupKeyword( String text ) {
        return lookup( text, KEYWORD );
    }


   /**
    *  Returns the type for the specified symbol text.  Returns UNKNOWN
    *  if the text isn't found.
    */

    public static int lookupSymbol( String text ) {
        return lookup( text, SYMBOL );
    }


   /**
    *  Returns the text for the specified type.  Returns "" if the
    *  text isn't found.
    */

    public static String getText( int type ) {
        Integer key = new Integer( type );
        String text = "";

        if( TEXTS.containsKey(key) ) {
            text = (String)TEXTS.get( key );
        }

        return text;
    }


   /**
    *  Adds a element to the TEXTS and LOOKUP.
    */

    private static void addTranslation( String text, int type ) {
        Integer key = new Integer( type );

        TEXTS.put( key, text );
        LOOKUP.put( text, key );
    }


    static {

        //
        // SYMBOLS

        addTranslation( "\n"          , NEWLINE                     );

        addTranslation( "{"           , LEFT_CURLY_BRACE            );
        addTranslation( "}"           , RIGHT_CURLY_BRACE           );
        addTranslation( "["           , LEFT_SQUARE_BRACKET         );
        addTranslation( "]"           , RIGHT_SQUARE_BRACKET        );
        addTranslation( "("           , LEFT_PARENTHESIS            );
        addTranslation( ")"           , RIGHT_PARENTHESIS           );

        addTranslation( "."           , DOT                         );
        addTranslation( ".."          , DOT_DOT                     );
        addTranslation( "..."         , DOT_DOT_DOT                 );

        addTranslation( "->"          , NAVIGATE                    );

        addTranslation( "=~"          , FIND_REGEX                  );
        addTranslation( "==~"         , MATCH_REGEX                 );
        addTranslation( "~"           , REGEX_PATTERN               );

        addTranslation( "="           , EQUAL                       );

        addTranslation( "!="          , COMPARE_NOT_EQUAL           );
        addTranslation( "==="         , COMPARE_IDENTICAL           );
        addTranslation( "!=="         , COMPARE_NOT_IDENTICAL       );
        addTranslation( "=="          , COMPARE_EQUAL               );
        addTranslation( "<"           , COMPARE_LESS_THAN           );
        addTranslation( "<="          , COMPARE_LESS_THAN_EQUAL     );
        addTranslation( ">"           , COMPARE_GREATER_THAN        );
        addTranslation( ">="          , COMPARE_GREATER_THAN_EQUAL  );
        addTranslation( "<=>"         , COMPARE_TO                  );

        addTranslation( "!"           , NOT                         );
        addTranslation( "||"          , LOGICAL_OR                  );
        addTranslation( "&&"          , LOGICAL_AND                 );

        addTranslation( "||="         , LOGICAL_OR_EQUAL            );
        addTranslation( "&&="         , LOGICAL_AND_EQUAL           );

        addTranslation( "+"           , PLUS                        );
        addTranslation( "-"           , MINUS                       );
        addTranslation( "*"           , MULTIPLY                    );
        addTranslation( "/"           , DIVIDE                      );
        addTranslation( "\\"          , INTDIV                      );
        addTranslation( "%"           , MOD                         );

	addTranslation( "**"          , POWER                       );

        addTranslation( "+="          , PLUS_EQUAL                  );
        addTranslation( "-="          , MINUS_EQUAL                 );
        addTranslation( "*="          , MULTIPLY_EQUAL              );
        addTranslation( "/="          , DIVIDE_EQUAL                );
        addTranslation( "\\="         , INTDIV_EQUAL                );
        addTranslation( "%="          , MOD_EQUAL                   );
        addTranslation( "**="         , POWER_EQUAL                 );

        addTranslation( "++"          , PLUS_PLUS                   );
        addTranslation( "--"          , MINUS_MINUS                 );

        addTranslation( "<<"          , LEFT_SHIFT                  );
        addTranslation( ">>"          , RIGHT_SHIFT                 );
        addTranslation( ">>>"         , RIGHT_SHIFT_UNSIGNED        );

        addTranslation( "<<="         , LEFT_SHIFT_EQUAL            );
        addTranslation( ">>="         , RIGHT_SHIFT_EQUAL           );
        addTranslation( ">>>="        , RIGHT_SHIFT_UNSIGNED_EQUAL  );

        addTranslation( "&"           , BITWISE_AND                 );
        addTranslation( "^"           , BITWISE_XOR                 );

        addTranslation( "|="          , BITWISE_OR_EQUAL           );
        addTranslation( "&="          , BITWISE_AND_EQUAL           );
        addTranslation( "^="          , BITWISE_XOR_EQUAL           );

        addTranslation( ","           , COMMA                       );
        addTranslation( ":"           , COLON                       );
        addTranslation( ";"           , SEMICOLON                   );
        addTranslation( "?"           , QUESTION                    );
        addTranslation( "|"           , PIPE                        );

        addTranslation( "${}"         , GSTRING_EXPRESSION_START    );


        //
        // Keywords

        addTranslation( "abstract"    , KEYWORD_ABSTRACT            );
        addTranslation( "as"          , KEYWORD_AS                  );
        addTranslation( "assert"      , KEYWORD_ASSERT              );
        addTranslation( "break"       , KEYWORD_BREAK               );
        addTranslation( "case"        , KEYWORD_CASE                );
        addTranslation( "catch"       , KEYWORD_CATCH               );
        addTranslation( "class"       , KEYWORD_CLASS               );
        addTranslation( "const"       , KEYWORD_CONST               );
        addTranslation( "continue"    , KEYWORD_CONTINUE            );
        addTranslation( "def"         , KEYWORD_DEF                 );
        addTranslation( "defmacro"    , KEYWORD_DEF                 ); // xxx br defmacro
        addTranslation( "default"     , KEYWORD_DEFAULT             );
        addTranslation( "do"          , KEYWORD_DO                  );
        addTranslation( "else"        , KEYWORD_ELSE                );
        addTranslation( "extends"     , KEYWORD_EXTENDS             );
        addTranslation( "final"       , KEYWORD_FINAL               );
        addTranslation( "finally"     , KEYWORD_FINALLY             );
        addTranslation( "for"         , KEYWORD_FOR                 );
        addTranslation( "goto"        , KEYWORD_GOTO                );
        addTranslation( "if"          , KEYWORD_IF                  );
        addTranslation( "in"          , KEYWORD_IN                  );
        addTranslation( "implements"  , KEYWORD_IMPLEMENTS          );
        addTranslation( "import"      , KEYWORD_IMPORT              );
        addTranslation( "instanceof"  , KEYWORD_INSTANCEOF          );
        addTranslation( "interface"   , KEYWORD_INTERFACE           );
        addTranslation( "mixin"       , KEYWORD_MIXIN               );
        addTranslation( "native"      , KEYWORD_NATIVE              );
        addTranslation( "new"         , KEYWORD_NEW                 );
        addTranslation( "package"     , KEYWORD_PACKAGE             );
        addTranslation( "private"     , KEYWORD_PRIVATE             );
        addTranslation( "property"    , KEYWORD_PROPERTY            );
        addTranslation( "protected"   , KEYWORD_PROTECTED           );
        addTranslation( "public"      , KEYWORD_PUBLIC              );
        addTranslation( "return"      , KEYWORD_RETURN              );
        addTranslation( "static"      , KEYWORD_STATIC              );
        addTranslation( "super"       , KEYWORD_SUPER               );
        addTranslation( "switch"      , KEYWORD_SWITCH              );
        addTranslation( "synchronized", KEYWORD_SYNCHRONIZED        );
        addTranslation( "this"        , KEYWORD_THIS                );
        addTranslation( "throw"       , KEYWORD_THROW               );
        addTranslation( "throws"      , KEYWORD_THROWS              );
        addTranslation( "transient"   , KEYWORD_TRANSIENT           );
        addTranslation( "try"         , KEYWORD_TRY                 );
        addTranslation( "volatile"    , KEYWORD_VOLATILE            );
        addTranslation( "while"       , KEYWORD_WHILE               );

        addTranslation( "true"        , KEYWORD_TRUE                );
        addTranslation( "false"       , KEYWORD_FALSE               );
        addTranslation( "null"        , KEYWORD_NULL                );

        addTranslation( "void"        , KEYWORD_VOID                );
        addTranslation( "boolean"     , KEYWORD_BOOLEAN             );
        addTranslation( "byte"        , KEYWORD_BYTE                );
        addTranslation( "int"         , KEYWORD_INT                 );
        addTranslation( "short"       , KEYWORD_SHORT               );
        addTranslation( "long"        , KEYWORD_LONG                );
        addTranslation( "float"       , KEYWORD_FLOAT               );
        addTranslation( "double"      , KEYWORD_DOUBLE              );
        addTranslation( "char"        , KEYWORD_CHAR                );
    }




  //---------------------------------------------------------------------------
  // DESCRIPTIONS


    private static final Map DESCRIPTIONS = new HashMap();


   /**
    *  Gets the description for the specified type.
    */

    public static String getDescription( int type ) {
        Integer typeKey = new Integer(type);

        if (DESCRIPTIONS.containsKey(typeKey)) {
            return (String)DESCRIPTIONS.get(typeKey);
        }

        return "<>";
    }


   /**
    *  Adds a description to the set.
    */

    private static void addDescription(int type, String description) {
        addDescription(new Integer(type), description);
    }


   /**
    *  Adds a description to the set.
    */

    private static void addDescription(Integer type, String description) {
        if (description.startsWith("<") && description.endsWith(">")) {
            DESCRIPTIONS.put(type, description);
        }
        else {
            DESCRIPTIONS.put(type, '"' + description + '"');
        }
    }


    static {

        Iterator iterator = LOOKUP.keySet().iterator();
        while( iterator.hasNext() )
        {
            String text = (String)iterator.next();
            Integer key = (Integer)LOOKUP.get(text);

            addDescription( key, text );
        }

        addDescription( NEWLINE                     , "<newline>"        );
        addDescription( PREFIX_PLUS_PLUS            , "<prefix ++>"      );
        addDescription( POSTFIX_PLUS_PLUS           , "<postfix ++>"     );
        addDescription( PREFIX_MINUS_MINUS          , "<prefix -->"      );
        addDescription( POSTFIX_MINUS_MINUS         , "<postfix -->"     );
        addDescription( PREFIX_PLUS                 , "<positive>"       );
        addDescription( PREFIX_MINUS                , "<negative>"       );

        addDescription( STRING                      , "<string literal>" );
        addDescription( IDENTIFIER                  , "<identifier>"     );
        addDescription( INTEGER_NUMBER              , "<integer>"        );
        addDescription( DECIMAL_NUMBER              , "<decimal>"        );

        addDescription( SYNTH_COMPILATION_UNIT      , "<compilation unit>" );
        addDescription( SYNTH_CLASS                 , "<class>"          );
        addDescription( SYNTH_INTERFACE             , "<interface>"      );
        addDescription( SYNTH_MIXIN                 , "<mixin>"          );
        addDescription( SYNTH_METHOD                , "<method>"         );
        addDescription( SYNTH_METHOD_CALL           , "<method call>"    );
        addDescription( SYNTH_PROPERTY              , "<property>"       );
        addDescription( SYNTH_PARAMETER_DECLARATION , "<parameter>"      );
        addDescription( SYNTH_LIST                  , "<list>"           );
        addDescription( SYNTH_MAP                   , "<map>"            );
        addDescription( SYNTH_TUPLE                 , "<tuple>"          );
        addDescription( SYNTH_GSTRING               , "<gstring>"        );
        addDescription( SYNTH_CAST                  , "<cast>"           );
        addDescription( SYNTH_BLOCK                 , "<block>"          );
        addDescription( SYNTH_CLOSURE               , "<closure>"        );
        addDescription( SYNTH_TERNARY               , "<ternary>"        );
        addDescription( SYNTH_LABEL                 , "<label>"          );
        addDescription( SYNTH_VARIABLE_DECLARATION  , "<variable declaration>"       );

        addDescription( GSTRING_START               , "<start of gstring tokens>"    );
        addDescription( GSTRING_END                 , "<end of gstring tokens>"      );
        addDescription( GSTRING_EXPRESSION_START    , "<start of gstring expression>");
        addDescription( GSTRING_EXPRESSION_END      , "<end of gstring expression>"  );

        addDescription( ASSIGNMENT_OPERATOR         , "<assignment operator>"        );
        addDescription( COMPARISON_OPERATOR         , "<comparison operator>"        );
        addDescription( MATH_OPERATOR               , "<math operator>"              );
        addDescription( LOGICAL_OPERATOR            , "<logical operator>"           );
        addDescription( BITWISE_OPERATOR            , "<bitwise operator>"           );
        addDescription( RANGE_OPERATOR              , "<range operator>"             );
        addDescription( REGEX_COMPARISON_OPERATOR   , "<regex comparison operator>"  );
        addDescription( DEREFERENCE_OPERATOR        , "<dereference operator>"       );
        addDescription( PREFIX_OPERATOR             , "<prefix operator>"            );
        addDescription( POSTFIX_OPERATOR            , "<postfix operator>"           );
        addDescription( INFIX_OPERATOR              , "<infix operator>"             );
        addDescription( KEYWORD                     , "<keyword>"                    );
        addDescription( LITERAL                     , "<literal>"                    );
        addDescription( NUMBER                      , "<number>"                     );
        addDescription( NAMED_VALUE                 , "<named value>"                );
        addDescription( TRUTH_VALUE                 , "<truth value>"                );
        addDescription( PRIMITIVE_TYPE              , "<primitive type>"             );
        addDescription( CREATABLE_PRIMITIVE_TYPE    , "<creatable primitive type>"   );
        addDescription( LOOP                        , "<loop>"                       );
        addDescription( RESERVED_KEYWORD            , "<reserved keyword>"           );
        addDescription( SYNTHETIC                   , "<synthetic>"                  );
        addDescription( TYPE_DECLARATION            , "<type declaration>"           );
        addDescription( DECLARATION_MODIFIER        , "<declaration modifier>"       );
        addDescription( TYPE_NAME                   , "<type name>"                  );
        addDescription( CREATABLE_TYPE_NAME         , "<creatable type name>"        );
        addDescription( MATCHED_CONTAINER           , "<matched container>"          );
        addDescription( LEFT_OF_MATCHED_CONTAINER   , "<left of matched container>"  );
        addDescription( RIGHT_OF_MATCHED_CONTAINER  , "<right of matched container>" );
        addDescription( SWITCH_ENTRIES              , "<valid in a switch body>"     );
    }

}

⌨️ 快捷键说明

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