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

📄 keywords.java

📁 GJC编译器的源代码。是一个开放源代码的工业级编译器。
💻 JAVA
字号:
/**
 * @(#)Keywords.java	1.4 03/01/23
 *
 * Copyright 2003 Sun Microsystems, Inc. All rights reserved.
 * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 */
package com.sun.tools.javac.v8.parser;
import com.sun.tools.javac.v8.util.Context;

import com.sun.tools.javac.v8.util.Log;

import com.sun.tools.javac.v8.util.Name;


/**
 * 采用map方法实现一一对应
 */
public class Keywords implements Tokens {
    private static final Context.Key keywordsKey = new Context.Key();

    public static Keywords instance(Context context) {
        Keywords instance = (Keywords) context.get(keywordsKey);
        if (instance == null)
            instance = new Keywords(context);
        return instance;
    }
    private final Log log;
    private final Name.Table names;

    private Keywords(Context context) {
        super();
        context.put(keywordsKey, this);
        log = Log.instance(context);
        names = Name.Table.instance(context);
        for (int j = 0; j < Tokens.TokenCount; j++)
            tokenName[j] = null;
        enterKeyword("+", PLUS);
        enterKeyword("-", SUB);
        enterKeyword("!", BANG);
        enterKeyword("%", PERCENT);
        enterKeyword("^", CARET);
        enterKeyword("&", AMP);
        enterKeyword("*", STAR);
        enterKeyword("|", BAR);
        enterKeyword("~", TILDE);
        enterKeyword("/", SLASH);
        enterKeyword(">", GT);
        enterKeyword("<", LT);
        enterKeyword("?", QUES);
        enterKeyword(":", COLON);
        enterKeyword("=", EQ);
        enterKeyword("++", PLUSPLUS);
        enterKeyword("--", SUBSUB);
        enterKeyword("==", EQEQ);
        enterKeyword("<=", LTEQ);
        enterKeyword(">=", GTEQ);
        enterKeyword("!=", BANGEQ);
        enterKeyword("<<", LTLT);
        enterKeyword(">>", GTGT);
        enterKeyword(">>>", GTGTGT);
        enterKeyword("+=", PLUSEQ);
        enterKeyword("-=", SUBEQ);
        enterKeyword("*=", STAREQ);
        enterKeyword("/=", SLASHEQ);
        enterKeyword("&=", AMPEQ);
        enterKeyword("|=", BAREQ);
        enterKeyword("^=", CARETEQ);
        enterKeyword("%=", PERCENTEQ);
        enterKeyword("<<=", LTLTEQ);
        enterKeyword(">>=", GTGTEQ);
        enterKeyword(">>>=", GTGTGTEQ);
        enterKeyword("||", BARBAR);
        enterKeyword("&&", AMPAMP);
        enterKeyword("abstract", ABSTRACT);
        enterKeyword("assert", ASSERT);
        enterKeyword("boolean", BOOLEAN);
        enterKeyword("break", BREAK);
        enterKeyword("byte", BYTE);
        enterKeyword("case", CASE);
        enterKeyword("catch", CATCH);
        enterKeyword("char", CHAR);
        enterKeyword("class", CLASS);
        enterKeyword("const", CONST);
        enterKeyword("continue", CONTINUE);
        enterKeyword("default", DEFAULT);
        enterKeyword("do", DO);
        enterKeyword("double", DOUBLE);
        enterKeyword("else", ELSE);
        enterKeyword("extends", EXTENDS);
        enterKeyword("final", FINAL);
        enterKeyword("finally", FINALLY);
        enterKeyword("float", FLOAT);
        enterKeyword("for", FOR);
        enterKeyword("goto", GOTO);
        enterKeyword("if", IF);
        enterKeyword("implements", IMPLEMENTS);
        enterKeyword("import", IMPORT);
        enterKeyword("instanceof", INSTANCEOF);
        enterKeyword("int", INT);
        enterKeyword("interface", INTERFACE);
        enterKeyword("long", LONG);
        enterKeyword("native", NATIVE);
        enterKeyword("new", NEW);
        enterKeyword("package", PACKAGE);
        enterKeyword("private", PRIVATE);
        enterKeyword("protected", PROTECTED);
        enterKeyword("public", PUBLIC);
        enterKeyword("return", RETURN);
        enterKeyword("short", SHORT);
        enterKeyword("static", STATIC);
        enterKeyword("strictfp", STRICTFP);
        enterKeyword("super", SUPER);
        enterKeyword("switch", SWITCH);
        enterKeyword("synchronized", SYNCHRONIZED);
        enterKeyword("this", THIS);
        enterKeyword("throw", THROW);
        enterKeyword("throws", THROWS);
        enterKeyword("transient", TRANSIENT);
        enterKeyword("try", TRY);
        enterKeyword("void", VOID);
        enterKeyword("volatile", VOLATILE);
        enterKeyword("while", WHILE);
        enterKeyword("true", TRUE);
        enterKeyword("false", FALSE);
        enterKeyword("null", NULL);
        key = new byte[maxKey + 1];
        for (int i = 0; i <= maxKey; i++)
            key[i] = IDENTIFIER;
        for (byte j = 0; j < Tokens.TokenCount; j++)
            if (tokenName[j] != null)
                key[tokenName[j].index] = j;
    }

    public int key(Name name) {
        return (name.index > maxKey) ? IDENTIFIER : key[name.index];
    }

    /**
      * Keyword array. Maps name indices to Tokens.
      */
    private final byte[] key;

    /**
     * The number of the last entered keyword.
     */
    private int maxKey = 0;

    /**
     * The names of all tokens.
     */
    private Name[] tokenName = new Name[Tokens.TokenCount];

    public String token2string(int token) {
        switch (token) {
        case IDENTIFIER:
            return log.getLocalizedString("token.identifier");

        case CHARLITERAL:
            return log.getLocalizedString("token.character");

        case STRINGLITERAL:
            return log.getLocalizedString("token.string");

        case INTLITERAL:
            return log.getLocalizedString("token.integer");

        case LONGLITERAL:
            return log.getLocalizedString("token.long-integer");

        case FLOATLITERAL:
            return log.getLocalizedString("token.float");

        case DOUBLELITERAL:
            return log.getLocalizedString("token.double");

        case DOT:
            return "\'.\'";

        case COMMA:
            return "\',\'";

        case SEMI:
            return "\';\'";

        case LPAREN:
            return "\'(\'";

        case RPAREN:
            return "\')\'";

        case LBRACKET:
            return "\'[\'";

        case RBRACKET:
            return "\']\'";

        case LBRACE:
            return "\'{\'";

        case RBRACE:
            return "\'}\'";

        case ERROR:
            return log.getLocalizedString("token.bad-symbol");

        case EOF:
            return log.getLocalizedString("token.end-of-input");

        default:
            return tokenName[token].toJava();

        }
    }

    private void enterKeyword(String s, int token) {
        Name n = names.fromString(s);
        tokenName[token] = n;
        if (n.index > maxKey)
            maxKey = n.index;
    }
}

⌨️ 快捷键说明

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