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

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

?? parser.java

?? Grammatica is a C# and Java parser generator (compiler compiler). It improves upon simlar tools (lik
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
        }        if (recovery) {            errorRecovery = 3;        }    }    /**     * Returns the production pattern with the specified id.     *       * @param id             the production pattern id     *      * @return the production pattern found, or     *         null if non-existent     */    ProductionPattern getPattern(int id) {        Integer  value = new Integer(id);                return (ProductionPattern) patternIds.get(value);    }    /**     * Returns the production pattern for the starting production.     *       * @return the start production pattern, or     *         null if no patterns have been added     */    ProductionPattern getStartPattern() {        if (patterns.size() <= 0) {            return null;        } else {            return (ProductionPattern) patterns.get(0);        }    }    /**     * Returns the ordered set of production patterns.     *      * @return the ordered set of production patterns     */    Collection getPatterns() {        return patterns;    }    /**     * Handles the parser entering a production. This method calls the     * appropriate analyzer callback if the node is not hidden. Note     * that this method will not call any callback if an error      * requiring recovery has ocurred.     *      * @param node           the parse tree node     */    void enterNode(Node node) {        if (!node.isHidden() && errorRecovery < 0) {            try {                analyzer.enter(node);            } catch (ParseException e) {                addError(e, false);            }        }    }        /**     * Handles the parser leaving a production. This method calls the     * appropriate analyzer callback if the node is not hidden, and      * returns the result. Note that this method will not call any      * callback if an error requiring recovery has ocurred.     *      * @param node           the parse tree node     *      * @return the parse tree node, or     *         null if no parse tree should be created     */    Node exitNode(Node node) {        if (!node.isHidden() && errorRecovery < 0) {            try {                return analyzer.exit(node);            } catch (ParseException e) {                addError(e, false);            }        }        return node;    }    /**     * Handles the parser adding a child node to a production. This      * method calls the appropriate analyzer callback. Note that this      * method will not call any callback if an error requiring      * recovery has ocurred.     *      * @param node           the parent parse tree node     * @param child          the child parse tree node, or null     */    void addNode(Production node, Node child) {        if (errorRecovery >= 0) {            // Do nothing        } else if (node.isHidden()) {            node.addChild(child);        } else if (child != null && child.isHidden()) {            for (int i = 0; i < child.getChildCount(); i++) {                addNode(node, child.getChildAt(i));            }        } else {            try {                analyzer.child(node, child);            } catch (ParseException e) {                addError(e, false);            }        }    }    /**     * Reads and consumes the next token in the queue. If no token was     * available for consumation, a parse error will be thrown.     *      * @return the token consumed     *      * @throws ParseException if the input stream couldn't be read or     *             parsed correctly     */    Token nextToken() throws ParseException {        Token  token = peekToken(0);                if (token != null) {            tokens.remove(0);            return token;        } else {            throw new ParseException(                ParseException.UNEXPECTED_EOF_ERROR,                null,                tokenizer.getCurrentLine(),                tokenizer.getCurrentColumn());        }    }        /**     * Reads and consumes the next token in the queue. If no token was     * available for consumation, a parse error will be thrown. A      * parse error will also be thrown if the token id didn't match      * the specified one.      *     * @param id             the expected token id     *       * @return the token consumed     *      * @throws ParseException if the input stream couldn't be parsed     *             correctly, or if the token wasn't expected     */    Token nextToken(int id) throws ParseException {        Token      token = nextToken();        ArrayList  list;                if (token.getId() == id) {            if (errorRecovery > 0) {                errorRecovery--;            }            return token;        } else {            list = new ArrayList(1);            list.add(tokenizer.getPatternDescription(id));            throw new ParseException(                ParseException.UNEXPECTED_TOKEN_ERROR,                token.toShortString(),                list,                token.getStartLine(),                token.getStartColumn());        }    }    /**     * Returns a token from the queue. This method is used to check      * coming tokens before they have been consumed. Any number of      * tokens forward can be checked.      *      * @param steps          the token queue number, zero (0) for first     *      * @return the token in the queue, or     *         null if no more tokens in the queue     */    Token peekToken(int steps) {        Token  token;        while (steps >= tokens.size()) {            try {                token = tokenizer.next();                if (token == null) {                    return null;                } else {                    tokens.add(token);                }            } catch (ParseException e) {                addError(e, true);            }        }        return (Token) tokens.get(steps);    }    /**     * Returns a string representation of this parser. The string will     * contain all the production definitions and various additional      * information.     *      * @return a detailed string representation of this parser     */    public String toString() {        StringBuffer  buffer = new StringBuffer();                for (int i = 0; i < patterns.size(); i++) {            buffer.append(toString((ProductionPattern) patterns.get(i)));             buffer.append("\n");        }        return buffer.toString();    }    /**     * Returns a string representation of a production pattern.     *      * @param prod           the production pattern     *      * @return a detailed string representation of the pattern     */    private String toString(ProductionPattern prod) {        StringBuffer  buffer = new StringBuffer();        StringBuffer  indent = new StringBuffer();        LookAheadSet  set;        int           i;        buffer.append(prod.getName());        buffer.append(" (");        buffer.append(prod.getId());        buffer.append(") ");        for (i = 0; i < buffer.length(); i++) {            indent.append(" ");        }        buffer.append("= ");        indent.append("| ");        for (i = 0; i < prod.getAlternativeCount(); i++) {            if (i > 0) {                buffer.append(indent);            }            buffer.append(toString(prod.getAlternative(i)));            buffer.append("\n");        }        for (i = 0; i < prod.getAlternativeCount(); i++) {            set = prod.getAlternative(i).getLookAhead();            if (set.getMaxLength() > 1) {                buffer.append("Using ");                buffer.append(set.getMaxLength());                buffer.append(" token look-ahead for alternative ");                 buffer.append(i + 1);                buffer.append(": ");                buffer.append(set.toString(tokenizer));                buffer.append("\n");            }        }        return buffer.toString();    }        /**     * Returns a string representation of a production pattern      * alternative.     *      * @param alt            the production pattern alternative     *      * @return a detailed string representation of the alternative     */    private String toString(ProductionPatternAlternative alt) {        StringBuffer  buffer = new StringBuffer();        for (int i = 0; i < alt.getElementCount(); i++) {            if (i > 0) {                buffer.append(" ");            }            buffer.append(toString(alt.getElement(i)));        }        return buffer.toString();    }    /**     * Returns a string representation of a production pattern      * element.     *      * @param elem           the production pattern element     *      * @return a detailed string representation of the element     */    private String toString(ProductionPatternElement elem) {        StringBuffer  buffer = new StringBuffer();        int           min = elem.getMinCount();        int           max = elem.getMaxCount();        if (min == 0 && max == 1) {            buffer.append("[");        }        if (elem.isToken()) {            buffer.append(getTokenDescription(elem.getId()));        } else {            buffer.append(getPattern(elem.getId()).getName());        }        if (min == 0 && max == 1) {            buffer.append("]");        } else if (min == 0 && max == Integer.MAX_VALUE) {            buffer.append("*");        } else if (min == 1 && max == Integer.MAX_VALUE) {            buffer.append("+");        } else if (min != 1 || max != 1) {            buffer.append("{");            buffer.append(min);            buffer.append(",");            buffer.append(max);            buffer.append("}");        }        return buffer.toString();    }    /**     * Returns a token description for a specified token.     *      * @param token          the token to describe     *      * @return the token description     */    String getTokenDescription(int token) {        if (tokenizer == null) {            return "";        } else {            return tokenizer.getPatternDescription(token);        }    }}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91免费视频大全| 国产自产视频一区二区三区| 99国产精品国产精品久久| 国产精品美日韩| 色香蕉成人二区免费| 一区二区三区影院| 欧美年轻男男videosbes| 日韩国产精品久久久久久亚洲| 日韩一区二区精品葵司在线| 国产高清一区日本| 亚洲女同女同女同女同女同69| 欧美日韩一区小说| 久久精品国产一区二区三区免费看| xnxx国产精品| 一本色道久久加勒比精品| 亚洲图片欧美综合| 精品国产一区二区三区久久久蜜月| 国产乱子轮精品视频| 亚洲欧洲国产专区| 欧美精品xxxxbbbb| 国产一区二区电影| 亚洲一二三四区| 精品国产精品网麻豆系列| 99久久婷婷国产| 青青青伊人色综合久久| 国产女主播在线一区二区| 在线观看91视频| 国产最新精品精品你懂的| 亚洲一区在线观看免费| 久久婷婷国产综合国色天香| 色嗨嗨av一区二区三区| 激情丁香综合五月| 亚洲一二三四在线| 国产精品污污网站在线观看| 欧美久久久久久久久| 成人免费看片app下载| 偷窥国产亚洲免费视频| 中文字幕一区二区三区蜜月| 欧美一区三区二区| 在线免费亚洲电影| 成人免费看的视频| 狠狠色丁香久久婷婷综| 亚洲一二三区视频在线观看| 国产精品网站在线| 日韩精品一区在线| 欧美自拍偷拍一区| 成人av网站在线观看| 国内精品在线播放| 日本不卡1234视频| 亚洲自拍偷拍欧美| 国产精品成人免费在线| 久久众筹精品私拍模特| 91精品国产综合久久福利软件 | 国产成人鲁色资源国产91色综| 一区二区三区在线视频免费 | 最新久久zyz资源站| 精品国产91洋老外米糕| 911精品产国品一二三产区| 一本色道综合亚洲| 99久久综合国产精品| 国产成人精品免费网站| 国内精品嫩模私拍在线| 麻豆freexxxx性91精品| 日本午夜精品一区二区三区电影 | 国产精品乱码妇女bbbb| 久久夜色精品国产噜噜av| 欧美一级二级在线观看| 91精品国产综合久久久久| 精品视频免费在线| 欧美性生活影院| 欧美三级三级三级爽爽爽| 在线观看91精品国产入口| 色琪琪一区二区三区亚洲区| 91香蕉视频污在线| 成人污污视频在线观看| 不卡的av电影| 色偷偷久久人人79超碰人人澡| 成人激情校园春色| 成人国产在线观看| av中文字幕一区| 91美女片黄在线| 色拍拍在线精品视频8848| 91福利精品视频| 欧美性猛交xxxxxx富婆| 欧美喷水一区二区| 日韩一区二区免费视频| 精品粉嫩超白一线天av| 国产无一区二区| 亚洲欧美在线视频观看| 亚洲国产一区二区三区青草影视| 亚洲一区精品在线| 美女网站视频久久| 国产剧情一区在线| av电影在线观看一区| 精品1区2区3区| 91精品国产aⅴ一区二区| 精品久久久久一区二区国产| 久久久国产午夜精品| 国产精品美女久久久久久| 亚洲色欲色欲www| 日韩精品久久久久久| 久久99精品久久久久久国产越南| 成人三级在线视频| 欧美乱熟臀69xxxxxx| 26uuu精品一区二区在线观看| 日韩理论电影院| 免费观看在线综合| a亚洲天堂av| 91精品国产乱码久久蜜臀| 欧美激情在线一区二区三区| 亚洲精品水蜜桃| 韩国精品免费视频| 91免费版pro下载短视频| 91精品婷婷国产综合久久| 中文字幕精品综合| 婷婷六月综合亚洲| 国产成人av影院| 欧美日韩国产成人在线免费| 久久先锋影音av| 亚洲大片免费看| 成人高清av在线| 欧美一区二区精品久久911| 欧美国产日本韩| 日韩极品在线观看| 91网址在线看| 国产性色一区二区| 日韩激情一二三区| 97精品久久久午夜一区二区三区| 日韩欧美高清一区| 亚洲福利一二三区| av电影在线不卡| 久久久另类综合| 日本不卡一二三| 在线观看亚洲a| 国产精品福利电影一区二区三区四区| 视频一区欧美精品| 色一区在线观看| 中文字幕免费观看一区| 精品一区二区三区久久| 欧美日韩国产精选| 亚洲人成亚洲人成在线观看图片| 久久国产乱子精品免费女| 欧美三级日韩三级| 亚洲色图欧洲色图婷婷| 国产剧情一区在线| 日韩精品一区二区三区在线观看 | 91丝袜美腿高跟国产极品老师| 精品国产露脸精彩对白 | 国产揄拍国内精品对白| 欧美男生操女生| 午夜欧美大尺度福利影院在线看| 一本色道久久综合亚洲精品按摩| 中文字幕在线观看一区二区| 国产精品伊人色| 国产视频一区二区在线| 免费在线一区观看| 91精品久久久久久蜜臀| 婷婷开心久久网| 91精品婷婷国产综合久久| 天天影视网天天综合色在线播放| 欧美中文字幕亚洲一区二区va在线 | 欧美影院一区二区| 一区二区三区四区在线| 91在线无精精品入口| 中文字幕一区二区不卡| 99热国产精品| 亚洲综合图片区| 欧美日韩一本到| 天堂资源在线中文精品| 欧美高清精品3d| 日韩1区2区日韩1区2区| 欧美成人精精品一区二区频| 久久国产精品72免费观看| xnxx国产精品| 色婷婷av一区| 亚洲成a人v欧美综合天堂 | 99在线精品一区二区三区| 国产精品乱码人人做人人爱| 99精品1区2区| 一区二区三区久久久| 91精品婷婷国产综合久久性色 | 国产精品77777| 欧美激情一区二区三区蜜桃视频| 成人毛片在线观看| 一区二区三区四区亚洲| 欧美一区二区三区日韩| 久久狠狠亚洲综合| 国产精品毛片大码女人| 色域天天综合网| 美腿丝袜亚洲色图| 国产午夜精品理论片a级大结局| 97久久超碰国产精品| 天天影视色香欲综合网老头| 精品福利在线导航| 色综合久久中文字幕| 男男视频亚洲欧美| 国产精品久久久久影院亚瑟| 色综合久久66| 捆绑变态av一区二区三区| 亚洲国产精品精华液ab|