Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
        public override bool Equals(object obj)
        {
            GrammarRule rule = (GrammarRule)obj;

            return(Left == rule.Left);
        }