Ejemplo n.º 1
0
        static IRule CompileNodeForRule(string ruletext, Dictionary <int, RuleCacheItem> ruleSet)
        {
            Function Head, BuildingRule;

            Head = BuildingRule = new AndRule();

            foreach (var item in ruletext.Split(' '))
            {
                if (item.Contains("\""))
                {
                    var nodeToAdd = new StringRule {
                        toMatch = item[1]
                    };;

                    //Comment this line for multi string rule support
                    return(nodeToAdd);

                    BuildingRule.AddNode(nodeToAdd);
                }
                else if (item.Contains("|"))
                {
                    //Split on left and right
                    Head = new OrRule();
                    Head.AddNode(BuildingRule);
                    BuildingRule = new AndRule();
                    Head.AddNode(BuildingRule);
                }
                else
                {
                    var childToExplore = int.Parse(item);
                    //Check if the cached copy hasn't compiled yet and compile it
                    if (ruleSet[childToExplore].CachedRule == null)
                    {
                        ruleSet[childToExplore].CachedRule = CompileNodeForRule(ruleSet[childToExplore].Text, ruleSet);
                    }

                    BuildingRule.AddNode(ruleSet[childToExplore].CachedRule);
                }
            }
            return(Head);
        }