Пример #1
0
        private void addrule(string key, PPRule rule)
        {
            PPRules list;

            if (_rules.ContainsKey(key))
            {
                list = _rules[key];
            }
            else
            {
                list = new PPRules(key);
                _rules.Add(key, list);
            }
            list.Insert(0, rule);
        }
Пример #2
0
 internal bool isDuplicate(PPRule rule, IList <XSharpToken> tokens)
 {
     if (_rule == rule && _tokens.Count == tokens.Count)
     {
         for (int i = 0; i < tokens.Count; i++)
         {
             var t1 = tokens[i];
             var t2 = _tokens[i];
             if (t1.Text != t2.Text)
             {
                 return(false);
             }
         }
         return(true);
     }
     return(false);
 }
Пример #3
0
 internal void Add(PPRule rule)
 {
     // find element that matches the first token and insert at the front of the list
     // so rules defined later override rules defined first
     if (rule.hasMultiKeys)
     {
         foreach (var key in rule.Keys)
         {
             addrule(key, rule);
         }
     }
     else
     {
         string key = rule.LookupKey;
         addrule(key, rule);
     }
 }
Пример #4
0
        internal void Add(PPRule rule)
        {
            // find element that matches the first token and insert at the front of the list
            // so rules defined later override rules defined first
            string  key = rule.LookupKey;
            PPRules list;

            if (_rules.ContainsKey(key))
            {
                list = _rules[key];
            }
            else
            {
                list = new PPRules(key);
                _rules.Add(key, list);
            }
            list.Insert(0, rule);
        }
Пример #5
0
 /// <summary>
 /// Check for recursion, and add the rule to the list of rules that have been used
 /// </summary>
 /// <param name="rule"></param>
 /// <param name="tokens"></param>
 /// <returns>True when the rule with the same tokens list is found in the list</returns>
 internal bool HasRecursion(PPRule rule, IList <XSharpToken> tokens)
 {
     // check to see if this is already there
     if (_list.Count == _maxDepth)
     {
         _pp.Error(tokens[0], ErrorCode.ERR_PreProcessorRecursiveRule, rule.Name);
         return(true);
     }
     foreach (var item in _list)
     {
         if (item.isDuplicate(rule, tokens))
         {
             _pp.Error(tokens[0], ErrorCode.ERR_PreProcessorRecursiveRule, rule.Name);
             return(true);
         }
     }
     _list.Add(new PPUsedRule(rule, tokens));
     return(false);
 }
Пример #6
0
 internal PPUsedRule(PPRule rule, IList <XSharpToken> tokens)
 {
     _rule   = rule;
     _tokens = tokens;
 }