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

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

?? recompiler.java

?? jakarta-regexp-1.5 正則表達式的源代碼
?? JAVA
?? 第 1 頁 / 共 4 頁
字號:
        int node;        int ret = -1;        int chain = -1;        int[] closureFlags = new int[1];        boolean nullable = true;        while (idx < len && pattern.charAt(idx) != '|' && pattern.charAt(idx) != ')')        {            // Get new node            closureFlags[0] = NODE_NORMAL;            node = closure(closureFlags);            if (closureFlags[0] == NODE_NORMAL)            {                nullable = false;            }            // If there's a chain, append to the end            if (chain != -1)            {                setNextOfEnd(chain, node);            }            // Chain starts at current            chain = node;            if (ret == -1) {                ret = node;            }        }        // If we don't run loop, make a nothing node        if (ret == -1)        {            ret = node(RE.OP_NOTHING, 0);        }        // Set nullable flag for this branch        if (nullable)        {            flags[0] |= NODE_NULLABLE;        }        return ret;    }    /**     * Compile an expression with possible parens around it.  Paren matching     * is done at this level so we can tie the branch tails together.     *     * @param flags Flag value passed by reference     * @return Node index of expression in instruction array     * @exception RESyntaxException Thrown if the regular expression has invalid syntax.     */    int expr(int[] flags) throws RESyntaxException    {        // Create open paren node unless we were called from the top level (which has no parens)        int paren = -1;        int ret = -1;        int closeParens = parens;        if ((flags[0] & NODE_TOPLEVEL) == 0 && pattern.charAt(idx) == '(')        {            // if its a cluster ( rather than a proper subexpression ie with backrefs )            if (idx + 2 < len && pattern.charAt(idx + 1) == '?' && pattern.charAt(idx + 2) == ':')            {                paren = 2;                idx += 3;                ret = node(RE.OP_OPEN_CLUSTER, 0);            }            else            {                paren = 1;                idx++;                ret = node(RE.OP_OPEN, parens++);            }        }        flags[0] &= ~NODE_TOPLEVEL;        // Process contents of first branch node        boolean open = false;        int branch = branch(flags);        if (ret == -1)        {            ret = branch;        }        else        {            setNextOfEnd(ret, branch);        }        // Loop through branches        while (idx < len && pattern.charAt(idx) == '|')        {            // Now open the first branch since there are more than one            if (!open) {                nodeInsert(RE.OP_BRANCH, 0, branch);                open = true;            }            idx++;            setNextOfEnd(branch, branch = node(RE.OP_BRANCH, 0));            branch(flags);        }        // Create an ending node (either a close paren or an OP_END)        int end;        if (paren > 0)        {            if (idx < len && pattern.charAt(idx) == ')')            {                idx++;            }            else            {                syntaxError("Missing close paren");            }            if (paren == 1)            {                end = node(RE.OP_CLOSE, closeParens);            }            else            {                end = node(RE.OP_CLOSE_CLUSTER, 0);            }        }        else        {            end = node(RE.OP_END, 0);        }        // Append the ending node to the ret nodelist        setNextOfEnd(ret, end);        // Hook the ends of each branch to the end node        int currentNode = ret;        int nextNodeOffset = instruction[currentNode + RE.offsetNext];        // while the next node o        while (nextNodeOffset != 0 && currentNode < lenInstruction)        {            // If branch, make the end of the branch's operand chain point to the end node.            if (instruction[currentNode /* + RE.offsetOpcode */] == RE.OP_BRANCH)            {                setNextOfEnd(currentNode + RE.nodeSize, end);            }            nextNodeOffset = instruction[currentNode + RE.offsetNext];            currentNode += nextNodeOffset;        }        // Return the node list        return ret;    }    /**     * Compiles a regular expression pattern into a program runnable by the pattern     * matcher class 'RE'.     * @param pattern Regular expression pattern to compile (see RECompiler class     * for details).     * @return A compiled regular expression program.     * @exception RESyntaxException Thrown if the regular expression has invalid syntax.     * @see RECompiler     * @see RE     */    public REProgram compile(String pattern) throws RESyntaxException    {        // Initialize variables for compilation        this.pattern = pattern;                         // Save pattern in instance variable        len = pattern.length();                         // Precompute pattern length for speed        idx = 0;                                        // Set parsing index to the first character        lenInstruction = 0;                             // Set emitted instruction count to zero        parens = 1;                                     // Set paren level to 1 (the implicit outer parens)        // Initialize pass by reference flags value        int[] flags = { NODE_TOPLEVEL };        // Parse expression        expr(flags);        // Should be at end of input        if (idx != len)        {            if (pattern.charAt(idx) == ')')            {                syntaxError("Unmatched close paren");            }            syntaxError("Unexpected input remains");        }        // Return the result        char[] ins = new char[lenInstruction];        System.arraycopy(instruction, 0, ins, 0, lenInstruction);        return new REProgram(parens, ins);    }    /**     * Local, nested class for maintaining character ranges for character classes.     */    class RERange    {        int size = 16;                      // Capacity of current range arrays        int[] minRange = new int[size];     // Range minima        int[] maxRange = new int[size];     // Range maxima        int num = 0;                        // Number of range array elements in use        /**         * Deletes the range at a given index from the range lists         * @param index Index of range to delete from minRange and maxRange arrays.         */        void delete(int index)        {            // Return if no elements left or index is out of range            if (num == 0 || index >= num)            {                return;            }            // Move elements down            while (++index < num)            {                if (index - 1 >= 0)                {                    minRange[index-1] = minRange[index];                    maxRange[index-1] = maxRange[index];                }            }            // One less element now            num--;        }        /**         * Merges a range into the range list, coalescing ranges if possible.         * @param min Minimum end of range         * @param max Maximum end of range         */        void merge(int min, int max)        {            // Loop through ranges            for (int i = 0; i < num; i++)            {                // Min-max is subsumed by minRange[i]-maxRange[i]                if (min >= minRange[i] && max <= maxRange[i])                {                    return;                }                // Min-max subsumes minRange[i]-maxRange[i]                else if (min <= minRange[i] && max >= maxRange[i])                {                    delete(i);                    merge(min, max);                    return;                }                // Min is in the range, but max is outside                else if (min >= minRange[i] && min <= maxRange[i])                {                    min = minRange[i];                    delete(i);                    merge(min, max);                    return;                }                // Max is in the range, but min is outside                else if (max >= minRange[i] && max <= maxRange[i])                {                    max = maxRange[i];                    delete(i);                    merge(min, max);                    return;                }            }            // Must not overlap any other ranges            if (num >= size)            {                size *= 2;                int[] newMin = new int[size];                int[] newMax = new int[size];                System.arraycopy(minRange, 0, newMin, 0, num);                System.arraycopy(maxRange, 0, newMax, 0, num);                minRange = newMin;                maxRange = newMax;            }            minRange[num] = min;            maxRange[num] = max;            num++;        }        /**         * Removes a range by deleting or shrinking all other ranges         * @param min Minimum end of range         * @param max Maximum end of range         */        void remove(int min, int max)        {            // Loop through ranges            for (int i = 0; i < num; i++)            {                // minRange[i]-maxRange[i] is subsumed by min-max                if (minRange[i] >= min && maxRange[i] <= max)                {                    delete(i);                    return;                }                // min-max is subsumed by minRange[i]-maxRange[i]                else if (min >= minRange[i] && max <= maxRange[i])                {                    int minr = minRange[i];                    int maxr = maxRange[i];                    delete(i);                    if (minr < min)                    {                        merge(minr, min - 1);                    }                    if (max < maxr)                    {                        merge(max + 1, maxr);                    }                    return;                }                // minRange is in the range, but maxRange is outside                else if (minRange[i] >= min && minRange[i] <= max)                {                    minRange[i] = max + 1;                    return;                }                // maxRange is in the range, but minRange is outside                else if (maxRange[i] >= min && maxRange[i] <= max)                {                    maxRange[i] = min - 1;                    return;                }            }        }        /**         * Includes (or excludes) the range from min to max, inclusive.         * @param min Minimum end of range         * @param max Maximum end of range         * @param include True if range should be included.  False otherwise.         */        void include(int min, int max, boolean include)        {            if (include)            {                merge(min, max);            }            else            {                remove(min, max);            }        }        /**         * Includes a range with the same min and max         * @param minmax Minimum and maximum end of range (inclusive)         * @param include True if range should be included.  False otherwise.         */        void include(char minmax, boolean include)        {            include(minmax, minmax, include);        }    }}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久久久久久久免费相片| 欧美国产一区在线| 国产精品女人毛片| 性做久久久久久| 99国产精品国产精品久久| 在线不卡一区二区| 亚洲免费观看在线视频| 国产精品1024| 日韩欧美第一区| 亚洲国产精品嫩草影院| 国产精品原创巨作av| 日韩免费一区二区三区在线播放| 亚洲男人的天堂在线观看| 国产精品99久久久久久似苏梦涵| 7777精品伊人久久久大香线蕉完整版| 亚洲免费资源在线播放| 国产a精品视频| 国产亚洲一区二区三区在线观看 | 欧美经典三级视频一区二区三区| 日韩专区一卡二卡| 91麻豆高清视频| 国产精品麻豆久久久| 粉嫩久久99精品久久久久久夜| 精品久久久久av影院| 裸体歌舞表演一区二区| 日韩欧美一区二区三区在线| 亚洲线精品一区二区三区八戒| 日本精品免费观看高清观看| 中文字幕一区二区三区精华液| 成人小视频在线观看| 久久亚洲一区二区三区四区| 国产在线播放一区二区三区| 久久久久久99精品| 成人动漫在线一区| 日韩码欧中文字| 欧美网站大全在线观看| 亚洲bt欧美bt精品| 日韩欧美国产综合一区| 国产综合久久久久久久久久久久| xnxx国产精品| 波多野结衣一区二区三区| 国产精品久久毛片| 不卡一区在线观看| 亚洲精品国产精华液| 欧美日韩高清一区二区不卡| 日本 国产 欧美色综合| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 制服丝袜国产精品| 麻豆91精品91久久久的内涵| 精品国产免费一区二区三区四区| 国产一区二区免费看| 国产无遮挡一区二区三区毛片日本| 风流少妇一区二区| 夜夜嗨av一区二区三区网页| 欧美电影在线免费观看| 精品一区二区成人精品| 中文字幕av不卡| 欧美亚洲日本一区| 精品亚洲成a人| 国产精品三级av| 欧美日韩激情在线| 九九九久久久精品| 综合自拍亚洲综合图不卡区| 777奇米四色成人影色区| 国产在线麻豆精品观看| 国产精品每日更新| 欧美一区二区私人影院日本| 国产麻豆精品在线观看| 亚洲精品老司机| 日韩美一区二区三区| 一本色道久久综合亚洲精品按摩| 美女一区二区视频| 亚洲欧美偷拍三级| 精品精品国产高清一毛片一天堂| 色域天天综合网| 韩国午夜理伦三级不卡影院| 夜夜操天天操亚洲| 国产欧美日韩中文久久| 欧美三级电影精品| 成人黄色片在线观看| 男人的天堂亚洲一区| 亚洲欧美福利一区二区| 精品人伦一区二区色婷婷| 欧美亚洲一区二区在线| jvid福利写真一区二区三区| 免费在线看成人av| 亚洲福利视频一区二区| 国产精品久久久久久户外露出| 日韩免费观看高清完整版 | 日韩午夜在线观看| 日本精品一级二级| 不卡的av在线| 极品少妇xxxx偷拍精品少妇| 日本伊人午夜精品| 亚洲国产精品久久艾草纯爱| 亚洲色图都市小说| 国产精品污www在线观看| 欧美sm美女调教| 欧美一区二区三区四区高清 | 日韩欧美你懂的| 3d成人h动漫网站入口| 欧洲一区二区av| 一本色道久久综合亚洲aⅴ蜜桃| 成人免费看的视频| 国产成人av一区二区| 黑人精品欧美一区二区蜜桃| 蜜臀av性久久久久av蜜臀妖精| 亚洲成人动漫在线观看| 亚洲资源中文字幕| 亚洲国产成人高清精品| 亚洲高清不卡在线观看| 亚洲国产欧美一区二区三区丁香婷| 一区二区三区在线免费| 亚洲乱码国产乱码精品精的特点| ㊣最新国产の精品bt伙计久久| 国产精品网站在线播放| 综合亚洲深深色噜噜狠狠网站| 日韩毛片视频在线看| 亚洲综合免费观看高清完整版| 一区二区免费在线播放| 亚洲一区二区三区自拍| 日韩国产在线一| 免费在线欧美视频| 国产真实乱子伦精品视频| 国产激情精品久久久第一区二区| 国产成人精品三级麻豆| 91在线视频官网| 欧美三级电影在线看| 日韩三级在线观看| 久久综合色鬼综合色| 日本一区二区视频在线| 亚洲精品免费电影| 五月婷婷色综合| 国内精品自线一区二区三区视频| 国产一区二区调教| 91丨九色丨蝌蚪丨老版| 欧美日韩在线不卡| 日韩欧美一区电影| 国产精品人妖ts系列视频| 亚洲高清三级视频| 国产精品一区二区你懂的| 一本大道久久a久久精二百| 制服丝袜中文字幕亚洲| 国产亚洲综合在线| 亚洲成人午夜影院| 极品少妇一区二区| 色综合久久九月婷婷色综合| 欧美一级一区二区| 中文字幕一区二区三区蜜月| 秋霞av亚洲一区二区三| 99re6这里只有精品视频在线观看| 欧美少妇一区二区| 国产亚洲欧美一级| 亚洲国产三级在线| 丁香六月综合激情| 欧美一区二区私人影院日本| 亚洲视频中文字幕| 国产综合久久久久久鬼色| 欧美在线观看视频在线| 久久免费美女视频| 日韩av成人高清| 色视频成人在线观看免| 国产婷婷精品av在线| 日本不卡一区二区三区高清视频| 99久久国产综合精品麻豆| xfplay精品久久| 免费高清成人在线| 欧美调教femdomvk| 亚洲婷婷综合久久一本伊一区| 精品一区二区三区在线播放 | 日本成人中文字幕在线视频 | 日韩网站在线看片你懂的| 亚洲丝袜美腿综合| 国产成人8x视频一区二区| 日韩欧美国产综合一区| 亚洲成人一区二区在线观看| 91视频在线看| 国产精品网站在线播放| 国产精品911| 日韩三级电影网址| 午夜精品福利一区二区三区av | 99re66热这里只有精品3直播 | 日韩精品免费视频人成| 99国产精品久| 国产精品你懂的在线| 国产91精品露脸国语对白| 亚洲精品在线免费播放| 美女视频一区在线观看| 欧美一区二区在线视频| 日韩av在线播放中文字幕| 欧美日韩精品系列| 亚洲大片在线观看| 欧美吻胸吃奶大尺度电影| 亚洲一区中文在线| 欧美日韩一级二级| 舔着乳尖日韩一区| 日韩色在线观看| 国产一区视频导航| 中文字幕高清一区| 91美女片黄在线观看91美女|