Esempio n. 1
0
 //Функция возвращает истину, если в грамматике grammar есть правило, описывающее текущий узел AST
 public bool IsMatch(BNFGrammar grammar)
 {
     if (!grammar.Rules.ContainsKey(this.RuleName))
     {
         return(false);
     }
     //Получаем из грамматики правило, указанное в узле
     BNFGrammar.BNFRule rule = grammar.Rules[RuleName];
     return(IsMatch(rule));
 }
Esempio n. 2
0
        //Функция возвращает истину, если rule является правилом грамматики, описывающим текущий узел AST
        public bool IsMatch(BNFGrammar.BNFRule rule)
        {
            if (rule.Name != this.RuleName)
            {
                return(false);
            }
            //Получаем из правила имя варианта
            string v = Childs.Aggregate <KeyValuePair <string, ASTNode>, string>("", (curr, next) => (curr == "") ? next.Value.RuleName : curr + " " + next.Value.RuleName);

            //Возвращаем истину, если такой вариант есть в правиле грамматики rule
            return(rule.Terms.ContainsKey(v));
        }