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; }
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); }