Antlr4.AntlrTool.CheckForRuleIssues C# (CSharp) Method

CheckForRuleIssues() public method

public CheckForRuleIssues ( Grammar g ) : bool
g Antlr4.Tool.Grammar
return bool
        public virtual bool CheckForRuleIssues(Grammar g)
        {
            // check for redefined rules
            GrammarAST RULES = (GrammarAST)g.ast.GetFirstChildWithType(ANTLRParser.RULES);
            IList<GrammarAST> rules = new List<GrammarAST>(RULES.GetAllChildrenWithType(ANTLRParser.RULE));
            foreach (GrammarAST mode in g.ast.GetAllChildrenWithType(ANTLRParser.MODE))
            {
                foreach (GrammarAST child in mode.GetAllChildrenWithType(ANTLRParser.RULE))
                    rules.Add(child);
            }

            bool redefinition = false;
            IDictionary<string, RuleAST> ruleToAST = new Dictionary<string, RuleAST>();
            foreach (GrammarAST r in rules)
            {
                RuleAST ruleAST = (RuleAST)r;
                GrammarAST ID = (GrammarAST)ruleAST.GetChild(0);
                string ruleName = ID.Text;
                RuleAST prev;
                if (ruleToAST.TryGetValue(ruleName, out prev) && prev != null)
                {
                    GrammarAST prevChild = (GrammarAST)prev.GetChild(0);
                    g.tool.errMgr.GrammarError(ErrorType.RULE_REDEFINITION,
                                               g.fileName,
                                               ID.Token,
                                               ruleName,
                                               prevChild.Token.Line);
                    redefinition = true;
                    continue;
                }
                ruleToAST[ruleName] = ruleAST;
            }

            // check for undefined rules
            UndefChecker chk = new UndefChecker(this, g, ruleToAST);
            chk.VisitGrammar(g.ast);

            return redefinition || chk.badref;
        }