/// <summary> /// Создать экземпляр элемента правила, который является ссылкой на другое правило-нетерминал. /// </summary> internal GrammarElement(GrammarRule rule, List <Action <object> > actions = null) { foreach (var part in rule.Right) { if (part.Elements.First().Rule == rule) { throw new Exception($"В правиле {rule} онаружена левая рекурсия."); } } Type = ElementType.NonTerminal; Rule = rule; CheckAndReadActions(actions); }
public override bool Equals(object obj) { GrammarRule rule = (GrammarRule)obj; return(Left == rule.Left); }