Exemplo n.º 1
0
 /// <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));
     }
 }
Exemplo n.º 2
0
        /// <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());
        }
Exemplo n.º 3
0
 /// <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();
 }