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

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

?? parser.cs

?? Grammatica is a C# and Java parser generator (compiler compiler). It improves upon simlar tools (lik
?? CS
?? 第 1 頁 / 共 2 頁
字號:
            }        }            /**         * Returns the production pattern with the specified id.         *           * @param id             the production pattern id         *          * @return the production pattern found, or         *         null if non-existent         */        internal ProductionPattern GetPattern(int id) {            return (ProductionPattern) patternIds[id];        }        /**         * Returns the production pattern for the starting production.         *           * @return the start production pattern, or         *         null if no patterns have been added         */        internal ProductionPattern GetStartPattern() {            if (patterns.Count <= 0) {                return null;            } else {                return (ProductionPattern) patterns[0];            }        }            /**         * Returns the ordered set of production patterns.         *          * @return the ordered set of production patterns         */        internal ICollection 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         */        internal 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         */        internal 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         */        internal 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         */        internal Token NextToken() {            Token  token = PeekToken(0);                    if (token != null) {                tokens.RemoveAt(0);                return token;            } else {                throw new ParseException(                    ParseException.ErrorType.UNEXPECTED_EOF,                    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         */        internal Token NextToken(int id) {            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.ErrorType.UNEXPECTED_TOKEN,                    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         */        internal Token PeekToken(int steps) {            Token  token;                while (steps >= tokens.Count) {                try {                    token = tokenizer.Next();                    if (token == null) {                        return null;                    } else {                        tokens.Add(token);                    }                } catch (ParseException e) {                    AddError(e, true);                }            }            return (Token) tokens[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 override string ToString() {            StringBuilder  buffer = new StringBuilder();                        for (int i = 0; i < patterns.Count; i++) {                buffer.Append(ToString((ProductionPattern) patterns[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) {            StringBuilder  buffer = new StringBuilder();            StringBuilder  indent = new StringBuilder();            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) {            StringBuilder  buffer = new StringBuilder();                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) {            StringBuilder  buffer = new StringBuilder();            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 == Int32.MaxValue) {                buffer.Append("*");            } else if (min == 1 && max == Int32.MaxValue) {                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         */        internal string GetTokenDescription(int token) {            if (tokenizer == null) {                return "";            } else {                return tokenizer.GetPatternDescription(token);            }        }    }}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美亚洲综合另类| 欧美久久久久久久久| 香蕉久久一区二区不卡无毒影院| 欧美va亚洲va在线观看蝴蝶网| 成人理论电影网| 免费人成黄页网站在线一区二区| 中文字幕中文字幕中文字幕亚洲无线| 欧美一区二区观看视频| 色系网站成人免费| 成人高清视频免费观看| 另类调教123区| 亚洲va韩国va欧美va| 亚洲日本成人在线观看| 国产欧美日韩三级| 精品美女被调教视频大全网站| 欧美网站一区二区| 91麻豆高清视频| 成人性视频网站| 国内精品久久久久影院薰衣草| 丝袜亚洲另类欧美| 夜色激情一区二区| 亚洲日韩欧美一区二区在线| 久久你懂得1024| 精品国产91洋老外米糕| 欧美一区二视频| 欧美精品在线观看一区二区| 欧亚一区二区三区| 在线视频综合导航| 色伊人久久综合中文字幕| av一区二区三区黑人| 成人高清免费观看| 成人伦理片在线| av中文一区二区三区| 国产99久久久国产精品潘金网站| 国产一区二区三区日韩| 国产中文字幕精品| 国产麻豆成人精品| 国产精品1区2区| 丁香激情综合五月| 欧美精品少妇一区二区三区 | av综合在线播放| youjizz国产精品| 成人精品国产福利| 99久久国产免费看| 色妞www精品视频| 色天使色偷偷av一区二区| 欧美性高清videossexo| 欧美色老头old∨ideo| 欧美精品在线观看播放| 欧美r级电影在线观看| 久久夜色精品一区| 国产精品伦理在线| 一区二区三区四区不卡在线 | 亚洲国产成人91porn| 丝袜美腿亚洲综合| 精品一区中文字幕| 风间由美性色一区二区三区| av成人老司机| 欧美日韩色综合| 日韩欧美国产三级电影视频| 2017欧美狠狠色| 国产精品卡一卡二卡三| 亚洲国产裸拍裸体视频在线观看乱了| 亚洲高清免费观看 | 成人免费视频免费观看| 色婷婷一区二区三区四区| 欧美肥妇free| 国产清纯白嫩初高生在线观看91 | 亚洲成人免费av| 精品一区二区三区免费视频| 成人性生交大片免费看中文| 欧美视频精品在线| 亚洲精品一区二区三区在线观看| 国产精品久久看| 亚洲第一成人在线| 国产精品综合视频| 欧美中文字幕一二三区视频| 欧美精品一区二区三区在线播放 | 欧美肥妇bbw| 欧美国产日本韩| 五月天中文字幕一区二区| 国产在线视频一区二区| 一本色道久久综合亚洲91| 日韩色视频在线观看| 中文字幕欧美一| 激情综合网最新| 欧亚洲嫩模精品一区三区| 久久婷婷久久一区二区三区| 夜夜操天天操亚洲| 国产不卡在线播放| 日韩欧美在线网站| 一区二区三区久久久| 国产精品一级二级三级| 欧美肥大bbwbbw高潮| 亚洲视频1区2区| 国产精品小仙女| 91精品婷婷国产综合久久竹菊| 国产精品成人一区二区三区夜夜夜| 美国十次综合导航| 欧美三级日韩三级国产三级| 国产精品日日摸夜夜摸av| 蜜桃视频一区二区| 精品污污网站免费看| ...xxx性欧美| 国产一二三精品| 日韩欧美一区电影| 午夜影院在线观看欧美| 91麻豆国产福利精品| 国产精品天美传媒沈樵| 韩国成人在线视频| 欧美一区二区啪啪| 三级欧美在线一区| 欧美午夜片在线看| 亚洲欧美日韩在线| 成人国产精品免费网站| 国产欧美日韩亚州综合| 国产在线一区二区| 亚洲精品一区二区三区影院| 麻豆精品视频在线观看| 欧美剧在线免费观看网站| 亚洲综合色区另类av| 99精品黄色片免费大全| 欧美国产丝袜视频| 国产suv精品一区二区三区| 2023国产一二三区日本精品2022| 婷婷国产v国产偷v亚洲高清| 欧美中文一区二区三区| 一区二区欧美国产| 在线免费av一区| 国产一区二区三区综合| 精品免费一区二区三区| 毛片av一区二区三区| 欧美一级二级三级蜜桃| 麻豆成人91精品二区三区| 欧美一卡二卡三卡| 久久成人18免费观看| 欧美成人一区二区三区| 国产一区二区不卡在线| 国产婷婷色一区二区三区在线| 国产成人精品网址| 中文字幕国产精品一区二区| av网站免费线看精品| **性色生活片久久毛片| 91福利在线看| 日韩av一区二| 26uuu精品一区二区| 国产成人丝袜美腿| 国产精品毛片大码女人| 91视视频在线观看入口直接观看www | 国产乱人伦精品一区二区在线观看| 久久精品视频免费观看| 懂色av一区二区在线播放| 国产精品国产精品国产专区不蜜| 99re亚洲国产精品| 亚洲高清视频在线| 日韩一区二区三区电影| 国产一区二区毛片| 欧美国产激情二区三区| 色香蕉久久蜜桃| 美女mm1313爽爽久久久蜜臀| 国产欧美1区2区3区| 色女孩综合影院| 美女视频黄免费的久久 | 99久久久久久99| 亚洲一卡二卡三卡四卡| 日韩一区二区三区视频在线| 国产精一品亚洲二区在线视频| 亚洲视频综合在线| 7777精品久久久大香线蕉| 国产精品羞羞答答xxdd | 盗摄精品av一区二区三区| 一区二区三区四区在线| 欧美一区二区三区成人| 成人综合激情网| 亚洲va韩国va欧美va精品| 久久美女高清视频| 91激情五月电影| 久久国产三级精品| 亚洲免费在线看| 欧美成人激情免费网| 99国产麻豆精品| 韩国精品一区二区| 亚洲福利视频一区二区| 国产日韩欧美精品电影三级在线| 欧美在线观看一二区| 久久97超碰色| 亚洲国产一区二区在线播放| 久久久久久99精品| 7777精品伊人久久久大香线蕉超级流畅 | 成人黄色av网站在线| 日韩电影在线一区二区| 国产精品天干天干在线综合| 欧美一区二区三区视频在线| jizz一区二区| 狠狠色伊人亚洲综合成人| 亚洲一区二区三区国产| 国产精品福利在线播放| 欧美成人官网二区| 911精品国产一区二区在线| av中文字幕在线不卡|