/// <summary> /// Инициализирует правые части правил грамматики. /// </summary> /// <param name="rules">Полный список возможных правил.</param> internal void BuildRightPart(List <GrammarRule> rules, ActionsContainer actions) { foreach (var part in tmpRight) { Right.Add(new GrammarRulePart(part, specialSymbols, rules, actions)); } }
/// <summary> /// Создать новый экземпляр грамматики. /// </summary> /// <param name="grammar">Строка с описанием грамматики.</param> /// <param name="specialSymbols">Специальные символы грамматики.</param> public Grammar(string grammar, SpecialSymbols specialSymbols, ActionsContainer actions) { this.specialSymbols = specialSymbols; foreach (var line in grammar.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)) { Rules.Add(new GrammarRule(line, this.specialSymbols)); } foreach (var rule in Rules) { rule.BuildRightPart(Rules, actions); } StartedElement = new GrammarElement(Rules.FirstOrDefault()); }
/// <summary> /// Создать новый экземпляр подправила грамматики. /// </summary> /// <param name="part">Часть правила.</param> /// <param name="specialSymbols">Специальные символы.</param> /// <param name="rules">Список правил, необходим для поиска нетерминалов.</param> internal GrammarRulePart(string part, SpecialSymbols specialSymbols, List <GrammarRule> rules, ActionsContainer actions) { Elements = new Tokenizator(part, rules, specialSymbols, actions).GetTokens(); }