public ParamsAn(string paramsString) { paramsAn = new List <ParamAn>(); string type; while (true) { type = Utils.GetWord(paramsString, 0); if (!TypesAn.IsType(type)) { break; } paramsString = paramsString.Remove(paramsString.IndexOf(type), type.Length); paramsString = Utils.TrimFirst(paramsString); string name = string.Empty; foreach (char symbol in paramsString) { if (symbol == ' ' || symbol == ',') { break; } name += symbol; } paramsString = paramsString.Remove(paramsString.IndexOf(name), name.Length); paramsString = Utils.TrimFirst(paramsString); if (paramsString.Length != 0 && paramsString[0] == ',') { paramsString = paramsString.Remove(0, 1); paramsString = Utils.TrimFirst(paramsString); } paramsAn.Add(new ParamAn { type = new TypeAn(type), name = name }); } }
public static Function TryParseFunctionHead(string str) { str = Utils.TrimFirst(str); string type = Utils.GetWord(str, 0); if (type == "") { return(new Function()); } // try to find return type if (!TypesAn.IsType(type)) { return(new Function()); } TypeAn _type = new TypeAn(type); int typeInd = str.IndexOf(type); str = str.Remove(typeInd, typeInd + type.Length); str = Utils.TrimFirst(str); // try to find name string functName = ""; bool isNameStarted = false; foreach (char el in str) { if (el != ' ' && el != '(') { isNameStarted = true; } if ((el == ' ' || el == '(') && isNameStarted) { break; } functName += el; } int nameInd = str.IndexOf(functName); str = str.Remove(nameInd, nameInd + functName.Length); str = Utils.TrimFirst(str); // try to find params string paramsString = ""; bool isParamsStarted = false; foreach (char symbol in str) { if (symbol == ')') { break; } if (symbol == '(') { isParamsStarted = true; continue; } if (isParamsStarted) { paramsString += symbol; } } if (!isParamsStarted) { return(new Function()); } int paramsInd = str.IndexOf(paramsString); str = str.Remove(paramsInd, paramsString.Length); str = Utils.TrimFirst(str); // try to find code string codeString = ""; bool isCodeStarted = false; foreach (char symbol in str) { if (symbol == '}') { break; } if (symbol == '{') { isCodeStarted = true; continue; } if (isCodeStarted) { codeString += symbol; } } if (!isCodeStarted) { return(new Function()); } codeString = Utils.TrimFirst(codeString); return(new Function(_type, functName, new ParamsAn(paramsString), codeString)); }