Example #1
0
 private bool HandleParenthese(string[] ss, HashSet <int> used, IList <StartEnd> startEnd, Dictionary <StartEnd, IClausable> map, IExpParser <T> parser, IExpClause clause)
 {
     for (int i = 0; i < ss.Length; i++)
     {
         if (Right.Equals(ss[i]) && !used.Contains(i))
         {
             for (int j = i - 1; j >= 0; j--)
             {
                 if (Right.Equals(ss[j]) && !used.Contains(j))
                 {
                     break;
                 }
                 if (Left.Equals(ss[j]) && !used.Contains(j))
                 {
                     used.Add(i);
                     used.Add(j);
                     StartEnd   se  = new StartEnd(j, i);
                     IClausable con = ParseNoParenthese(se.GetStrings(ss, Sharpen.Collections.ToArray(startEnd, new StartEnd[] {  })), map, parser, clause);
                     map[se] = con;
                     startEnd.Add(se);
                     foreach (StartEnd sub in se.GetChildren(Sharpen.Collections.ToArray(startEnd, new StartEnd[] {  })))
                     {
                         startEnd.Remove(sub);
                         map.Remove(sub);
                     }
                     return(true);
                 }
             }
         }
     }
     return(false);
 }
Example #2
0
        public virtual IClausable Parse(string exp, IExpParser <T> subParser, IExpClause clause)
        {
            string[]         ss                   = StringUtil.SplitRemainRex(exp, Sharpen.Collections.ToArray(spliter, new string[] {  }));
            HashSet <int>    used                 = new HashSet <int>();
            IList <StartEnd> startEnd             = new List <StartEnd>();
            Dictionary <StartEnd, IClausable> map = new MyDictionary <StartEnd, IClausable>();

            while (true)
            {
                bool success = HandleParenthese(ss, used, startEnd, map, subParser, clause);
                if (!success)
                {
                    break;
                }
            }
            string[] total = new StartEnd(-1, ss.Length).GetStrings(ss, Sharpen.Collections.ToArray(map.Keys, new StartEnd[] {  }));
            return(ParseNoParenthese(total, map, subParser, clause));
        }