亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? parser.java

?? javac是sun公司開發人員使用java語言編寫的優秀的工業級java編譯器
?? JAVA
?? 第 1 頁 / 共 5 頁
字號:
/** * @(#)Parser.java	1.39 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.tree.*;import com.sun.tools.javac.v8.code.*;import com.sun.tools.javac.v8.util.*;import com.sun.tools.javac.v8.tree.Tree.*;/** * The parser maps a token sequence into an abstract syntax *  tree. It operates by recursive descent, with code derived *  systematically from an LL(1) grammar. For efficiency reasons, an *  operator precedence scheme is used for parsing binary operation *  expressions. */public class Parser implements Tokens {    /**     * The number of precedence levels of infix operators.     */    private static final int infixPrecedenceLevels = 10;    /**     * The scanner used for lexical analysis.     */    private Scanner S;    /**     * The factory to be used for abstract syntax tree construction.     */    private TreeMaker F;    /**     * The log to be used for error diagnostics.     */    private Log log;    /**     * The keyword table.     */    private Keywords keywords;    /**     * The Source language setting.     */    private Source source;    /**     * The name table.     */    private Name.Table names;    /**     * Construct a parser from a given scanner, tree factory and log.     *  @param genEndPos Should endPositions be generated?     */    public Parser(Context context, Scanner S, boolean keepDocComments,            boolean genEndPos) {        super();        this.S = S;        this.F = TreeMaker.instance(context);        this.log = Log.instance(context);        this.names = Name.Table.instance(context);        this.keywords = Keywords.instance(context);        this.keepDocComments = keepDocComments;        this.source = Source.instance(context);        this.allowAsserts = source.ordinal >= Source.JDK1_4.ordinal;        this.genEndPos = genEndPos;        if (keepDocComments)            docComments = new Hashtable();        if (genEndPos)            endPositions = new Hashtable();    }    /**      * Switch: should we keep docComments?      */    boolean keepDocComments;    /**     * Switch: should we recognize assert statements, or just give a warning?     */    boolean allowAsserts;    /**     * Switch: should we store the ending positions?     */    boolean genEndPos;    /**     * When terms are parsed, the mode determines which is expected:     *     mode = EXPR        : an expression     *     mode = TYPE        : a type     *     mode = NOPARAMS    : no parameters allowed for type     */    static final int EXPR = 1;    static final int TYPE = 2;    static final int NOPARAMS = 4;    /**     * The current mode.     */    private int mode = 0;    /**     * The mode of the term that was parsed last.     */    private int lastmode = 0;    static Tree errorTree = new Tree.Erroneous();    /**     * Skip forward until a suitable stop token is found.     */    private void skip() {        int nbraces = 0;        int nparens = 0;        while (true) {            switch (S.token) {            case EOF:            case CLASS:            case INTERFACE:                return;            case SEMI:                if (nbraces == 0 && nparens == 0)                    return;                break;            case RBRACE:                if (nbraces == 0)                    return;                nbraces--;                break;            case RPAREN:                if (nparens > 0)                    nparens--;                break;            case LBRACE:                nbraces++;                break;            case LPAREN:                nparens++;                break;            default:            }            S.nextToken();        }    }    /**      * Generate a syntax error at given position using the given argument      *  unless one was already reported at the same position, then skip.      */    private Tree syntaxError(int pos, String key, String arg) {        if (pos != S.errPos)            log.error(pos, key, arg);        skip();        S.errPos = pos;        return errorTree;    }    /**      * Generate a syntax error at given position unless one was already      *  reported at the same position, then skip.      */    private Tree syntaxError(int pos, String key) {        return syntaxError(pos, key, null);    }    /**      * Generate a syntax error at current position unless one was already reported      *  at the same position, then skip.      */    private Tree syntaxError(String key) {        return syntaxError(S.pos, key, null);    }    /**      * Generate a syntax error at current position unless one was already reported      *  at the same position, then skip.      */    private Tree syntaxError(String key, String arg) {        return syntaxError(S.pos, key, arg);    }    /**      * If next input token matches given token, skip it, otherwise report an error.      */    private void accept(int token) {        if (S.token == token) {            S.nextToken();        } else {            int pos = Position.line(S.pos) > Position.line(S.prevEndPos + 1) ?                    S.prevEndPos + 1 : S.pos;            syntaxError(pos, "expected", keywords.token2string(token));            if (S.token == token)                S.nextToken();        }    }    /**      * Report an illegal start of expression/type error at given position.      */    Tree illegal(int pos) {        if ((mode & EXPR) != 0)            return syntaxError(pos, "illegal.start.of.expr");        else            return syntaxError(pos, "illegal.start.of.type");    }    /**      * Report an illegal start of expression/type error at current position.      */    Tree illegal() {        return illegal(S.pos);    }    /**      * A hashtable to store all documentation comments      *  indexed by the tree nodes they refer to.      *  defined only if option flag keepDocComment is set.      */    Hashtable docComments;    /**     * Make an entry into docComments hashtable,     *  provided flag keepDocComments is set and given doc comment is non-null.     *  @param tree   The tree to be used as index in the hashtable     *  @param dc     The doc comment to associate with the tree, or null.     */    void attach(Tree tree, String dc) {        if (keepDocComments && dc != null) {            docComments.put(tree, dc);        }    }    /**      * A hashtable to store ending positions      *  of source ranges indexed by the tree nodes.      *  Defined only if option flag genEndPos is set.      */    Hashtable endPositions;    /**     * Make an entry into endPositions hashtable, provided flag     *  genEndPos is set. Note that this method is usually hand-inlined.     *  @param tree   The tree to be used as index in the hashtable     *  @param endPos The ending position to associate with the tree.     */    void storeEnd(Tree tree, int endpos) {        if (genEndPos)            endPositions.put(tree, new Integer(endpos));    }    /**      * Ident = IDENTIFIER      */    Name ident() {        if (S.token == IDENTIFIER) {            Name name = S.name;            S.nextToken();            return name;        }        if (S.token == ASSERT) {            if (allowAsserts) {                log.error(S.pos, "assert.as.identifier");                S.nextToken();                return names.error;            } else {                log.warning(S.pos, "assert.as.identifier");                Name name = S.name;                S.nextToken();                return name;            }        } else {            accept(IDENTIFIER);            return names.error;        }    }    /**      * Qualident = Ident { DOT Ident }      */    Tree qualident() {        Tree t = F.at(S.pos).Ident(ident());        while (S.token == DOT) {            int pos = S.pos;            S.nextToken();            t = F.at(pos).Select(t, ident());        }        return t;    }    /**      * Literal =      *	   INTLITERAL      *	 | LONGLITERAL      *	 | FLOATLITERAL      *	 | DOUBLELITERAL      *	 | CHARLITERAL      *	 | STRINGLITERAL      *       | TRUE      *       | FALSE      *       | NULL      */    Tree literal(Name prefix) {        int pos = S.pos;        Tree t = errorTree;        switch (S.token) {        case INTLITERAL:            try {                t = F.at(pos).Literal(Type.INT,                        new Integer(Convert.string2int(strval(prefix), S.radix)));            } catch (NumberFormatException ex) {                log.error(S.pos, "int.number.too.large", strval(prefix));            }            break;        case LONGLITERAL:            try {                t = F.at(pos).Literal(Type.LONG,                        new Long(Convert.string2long(strval(prefix), S.radix)));            } catch (NumberFormatException ex) {                log.error(S.pos, "int.number.too.large", strval(prefix));            }            break;        case FLOATLITERAL:            {                Float n = Float.valueOf(S.stringVal());                if (n.floatValue() == 0.0F && !isZero(S.stringVal()))                    log.error(S.pos, "fp.number.too.small");                else if (n.floatValue() == Float.POSITIVE_INFINITY)                    log.error(S.pos, "fp.number.too.large");                else                    t = F.at(pos).Literal(Type.FLOAT, n);                break;            }        case DOUBLELITERAL:            {                Double n = Double.valueOf(S.stringVal());                if (n.doubleValue() == 0.0 && !isZero(S.stringVal()))                    log.error(S.pos, "fp.number.too.small");                else if (n.doubleValue() == Double.POSITIVE_INFINITY)                    log.error(S.pos, "fp.number.too.large");                else                    t = F.at(pos).Literal(Type.DOUBLE, n);                break;            }        case CHARLITERAL:            t = F.at(pos).Literal(Type.CHAR, new Integer(S.stringVal().charAt(0)));            break;        case STRINGLITERAL:            t = F.at(pos).Literal(Type.CLASS, S.stringVal());            break;        case TRUE:        case FALSE:        case NULL:            t = F.at(pos).Ident(S.name);            break;        default:            assert false;        }        S.nextToken();        return t;    }    boolean isZero(String s) {        char[] cs = s.toCharArray();        int i = 0;        while (i < cs.length && (cs[i] == '0' || cs[i] == '.'))            i++;        return !(i < cs.length && ('1' <= cs[i] && cs[i] <= '9'));    }    String strval(Name prefix) {        String s = S.stringVal();        return (prefix.len == 0) ? s : prefix + s;    }    /**      * terms can be either expressions or types.      */    Tree expression() {        return term(EXPR);    }    Tree type() {        return term(TYPE);    }    Tree term(int newmode) {        int prevmode = mode;        mode = newmode;        Tree t = term();        lastmode = mode;        mode = prevmode;        return t;    }    /**      *  Expression = Expression1 [ExpressionRest]      *  ExpressionRest = [AssignmentOperator Expression1]      *  AssignmentOperator = "=" | "+=" | "-=" | "*=" | "/=" |  "&=" | "|=" | "^=" |      *                       "%=" | "<<=" | ">>=" | ">>>="      *  Type = Type1      *  TypeNoParams = TypeNoParams1      *  StatementExpression = Expression      *  ConstantExpression = Expression      */    Tree term() {        Tree t = term1();        if ((mode & EXPR) != 0 && S.token == EQ || PLUSEQ <= S.token &&                S.token <= GTGTGTEQ)            return termRest(t);        else            return t;    }    Tree termRest(Tree t) {        switch (S.token) {        case EQ:            {                int pos = S.pos;                S.nextToken();                mode = EXPR;                Tree t1 = term();                return F.at(pos).Assign(t, t1);            }        case PLUSEQ:        case SUBEQ:        case STAREQ:        case SLASHEQ:        case PERCENTEQ:

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
天天av天天翘天天综合网色鬼国产 | 亚洲一卡二卡三卡四卡| 五月综合激情婷婷六月色窝| 经典三级视频一区| 欧美性欧美巨大黑白大战| 日韩免费视频一区二区| 亚洲综合一区二区精品导航| 国产精品888| 日韩一区二区三区在线视频| 一级中文字幕一区二区| 懂色av一区二区三区免费观看| 欧美人与z0zoxxxx视频| 国产精品久久99| 精品一区二区久久| 欧美一级高清大全免费观看| 亚洲视频一二三区| 成人免费视频一区二区| 精品国产3级a| 麻豆成人av在线| 欧美日韩国产经典色站一区二区三区 | 亚洲精品视频自拍| 成人午夜视频福利| 久久综合狠狠综合久久激情| 麻豆freexxxx性91精品| 中文一区一区三区高中清不卡| 亚洲不卡一区二区三区| 欧美三级三级三级爽爽爽| 亚洲视频免费在线| 99在线精品观看| 中文字幕日本乱码精品影院| 国产一区久久久| 久久久99精品久久| 国产传媒一区在线| 欧美极品xxx| 福利一区福利二区| 国产精品高清亚洲| 99久久国产综合色|国产精品| 中文字幕+乱码+中文字幕一区| 国产精品综合二区| 国产精品午夜免费| 成人高清视频免费观看| 国产精品成人免费精品自在线观看| 成人亚洲精品久久久久软件| 亚洲视频一区二区免费在线观看| 91丨国产丨九色丨pron| 亚洲欧美激情视频在线观看一区二区三区 | 欧美在线一二三四区| 一区二区三区在线播放| 欧美久久久一区| 麻豆国产欧美一区二区三区| 欧美精品一区在线观看| 丰满亚洲少妇av| 亚洲美女精品一区| 678五月天丁香亚洲综合网| 日本不卡视频一二三区| 精品国产乱码久久久久久闺蜜| 国产老妇另类xxxxx| 亚洲日本免费电影| 亚洲国产精品激情在线观看| 色欧美88888久久久久久影院| 亚洲一区二区三区四区五区中文| 欧美精品黑人性xxxx| 久久精品久久99精品久久| 亚洲国产成人在线| 在线观看亚洲一区| 激情深爱一区二区| 亚洲欧美电影一区二区| 日韩一区国产二区欧美三区| 国产乱人伦偷精品视频免下载 | 天堂va蜜桃一区二区三区漫画版| 欧美一区二区美女| 不卡一区二区三区四区| 日韩专区欧美专区| 国产日韩av一区二区| 欧美性大战久久| 国产乱理伦片在线观看夜一区| 亚洲男女一区二区三区| 精品电影一区二区三区| 色激情天天射综合网| 国产在线精品一区在线观看麻豆| 日韩美女视频19| 久久婷婷国产综合精品青草| 91精品福利在线| 丰满白嫩尤物一区二区| 日本欧美在线观看| 一区二区三区在线高清| 久久精品一区二区三区四区| 欧美另类变人与禽xxxxx| 99久久综合精品| 国产在线不卡视频| 日本中文字幕一区| 亚洲美女在线一区| 国产精品女主播av| 2021中文字幕一区亚洲| 91精品国产色综合久久不卡电影 | 国产成人aaa| 美女在线视频一区| 午夜久久电影网| 亚洲日本在线天堂| 国产精品免费久久久久| 久久女同精品一区二区| 欧美一区二区网站| 欧美日韩国产另类不卡| 在线影院国内精品| 99国内精品久久| 福利电影一区二区| 国产精品一区免费在线观看| 久久激情五月婷婷| 玖玖九九国产精品| 视频精品一区二区| 日韩不卡免费视频| 日韩高清国产一区在线| 天天爽夜夜爽夜夜爽精品视频| 伊人色综合久久天天人手人婷| 亚洲美女区一区| 一级特黄大欧美久久久| 亚洲国产成人av| 午夜精品123| 日本一区中文字幕| 美国十次综合导航| 色婷婷综合久久久中文一区二区 | 日本一区二区三区视频视频| 久久亚洲一区二区三区明星换脸| 精品国产免费人成电影在线观看四季| 日韩精品一区二区三区四区视频| 日韩欧美一区二区不卡| 2020国产精品| 国产日本亚洲高清| 1区2区3区精品视频| 亚洲欧洲av另类| 亚洲一区在线免费观看| 五月综合激情日本mⅴ| 日本欧美久久久久免费播放网| 美腿丝袜亚洲色图| 国产91精品免费| 色综合久久久久| 欧美高清一级片在线| 精品粉嫩aⅴ一区二区三区四区| 久久久久国产精品麻豆ai换脸 | 亚洲成人在线观看视频| 日韩精品成人一区二区在线| 激情综合网天天干| 91啪亚洲精品| 欧美伦理影视网| 久久久久国产精品麻豆| 亚洲欧美激情插| 奇米影视一区二区三区| 国产成人精品免费在线| 欧美性大战久久久| 亚洲精品一区在线观看| ...中文天堂在线一区| 日韩福利视频导航| 国产 欧美在线| 欧美精品v国产精品v日韩精品 | 国产99一区视频免费| 在线一区二区三区做爰视频网站| 91精品国产全国免费观看| 国产欧美一区二区精品性色超碰| 一二三区精品视频| 久久精品国产成人一区二区三区| 99精品视频在线观看免费| 7777女厕盗摄久久久| 国产欧美一区二区精品久导航 | 欧美久久免费观看| 国产精品国产三级国产普通话蜜臀| 午夜精品久久久久久久蜜桃app| 久久99精品国产.久久久久| 色视频一区二区| 久久久久久久久一| 婷婷亚洲久悠悠色悠在线播放| 成人中文字幕合集| 精品少妇一区二区三区| 亚洲一区二区三区视频在线播放 | 亚洲欧美偷拍另类a∨色屁股| 亚洲va国产天堂va久久en| 国产99久久久国产精品潘金| 欧美日本高清视频在线观看| 中文字幕中文字幕在线一区| 久久国产精品色| 4438x成人网最大色成网站| 综合久久久久综合| 国产激情一区二区三区桃花岛亚洲| 欧美日韩一区视频| 亚洲蜜臀av乱码久久精品| 丁香婷婷综合色啪| 日韩三区在线观看| 石原莉奈在线亚洲三区| 91高清视频免费看| 亚洲色图制服丝袜| 99视频一区二区三区| 久久精品一二三| 精品夜夜嗨av一区二区三区| 欧美一区二区三区视频| 视频一区视频二区中文| 欧美这里有精品| 亚洲一区二区三区免费视频| 日本道精品一区二区三区| 亚洲精品写真福利| 色综合中文字幕国产 | 亚洲午夜日本在线观看|