Пример #1
0
        public FunctionElement(string value, int flag) : base(value, flag)
        {
            FunctionStruct         fun      = splitFunction(value);
            List <List <Element> > elements = new List <List <Element> >();

            foreach (string s in fun.paras)
            {
                elements.Add(construct(s));
            }
            this.paras = elements;
            this.value = fun.funname;
        }
Пример #2
0
        private FunctionStruct splitFunction(string code)
        {
            int            splitpoint = code.IndexOf('(');
            FunctionStruct res        = new FunctionStruct();

            res.funname = code.Substring(0, splitpoint);
            res.paras   = new List <string>();
            string data = code.Substring(splitpoint + 1, code.Length - splitpoint - 2);
            int    parenthesis = 0, previndex = 0, i = 0;

            for (; i < data.Length; i++)
            {
                if (data[i] == '(')
                {
                    parenthesis++;
                }
                else if (data[i] == ')')
                {
                    parenthesis--;
                }
                if (data[i] == ',' && parenthesis == 0)
                {
                    res.paras.Add(data.Substring(previndex, i - previndex));
                    previndex = i + 1;
                }
                else if (data[i] == '"')
                {
                    int j = i + 1;
                    for (; j < data.Length && !(data[j] == '"' && data[j - 1] != '\\'); j++)
                    {
                    }
                    i = (j >= data.Length - 1) ? data.Length - 1: j + 1;
                }
                if (parenthesis < 0)
                {
                    throw new SyntaxErrorException("括号不匹配");
                }
            }
            res.paras.Add(data.Substring(previndex, i - previndex));
            return(res);
        }