//Функция возвращает истину, если в грамматике grammar есть правило, описывающее текущий узел AST public bool IsMatch(BNFGrammar grammar) { if (!grammar.Rules.ContainsKey(this.RuleName)) { return(false); } //Получаем из грамматики правило, указанное в узле BNFGrammar.BNFRule rule = grammar.Rules[RuleName]; return(IsMatch(rule)); }
//Функция возвращает истину, если 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)); }