static void Main(string[] args) { string codeString; structForGlobalArrayAndCount structArrayOfGlobalVars = new structForGlobalArrayAndCount(); variableOfGlobalNames[] arrayOfGlobalVars = new variableOfGlobalNames[MAX_COUNT_GLOBAL_VARS]; codeString = readCodeFromFile(); codeString = deleteStringLiterals(codeString); codeString = deleteComments(codeString, multiLineCommentRegEx); codeString = deleteComments(codeString, singleLineCommentRegEx); codeString = deleteCompilerInstructions(codeString, compilierInstructions); structArrayOfGlobalVars = getCountAndArrayOfGlobalVars(codeString, arrayOfGlobalVars, signatureFunctionRegEx); Console.WriteLine(getCountOfFuncFieldView(codeString, structArrayOfGlobalVars)); Console.WriteLine(getCountAccessFuncToGlobalVars(codeString, structArrayOfGlobalVars)); Console.WriteLine((float)getCountAccessFuncToGlobalVars(codeString, structArrayOfGlobalVars) / (float)getCountOfFuncFieldView(codeString, structArrayOfGlobalVars)); Console.ReadLine(); }
// get number of global params public static structForGlobalArrayAndCount getCountAndArrayOfGlobalVars(String codeString, variableOfGlobalNames[] arrayOfGlobalVars, String pattern) { int countOfGlobalVars = 0; int additionalCounter = 0; int countOfCurvedBrackets = 0; int index; String signatureFunction; structForGlobalArrayAndCount structForReturning = new structForGlobalArrayAndCount(); StringBuilder additionalCodeString = new StringBuilder(emptyString,codeString.Length); Regex regularExpression = new Regex(pattern); Match match = regularExpression.Match(codeString); while (match.Success) // delete all functions in our code { signatureFunction = match.Groups[0].Value; index = codeString.IndexOf(signatureFunction); additionalCodeString.Append(codeString.Substring(additionalCounter, index - additionalCounter)); while (codeString[index] != openCurvedBracket) index++; while (countOfCurvedBrackets >= 0) { if (codeString[index] == openCurvedBracket) countOfCurvedBrackets++; else if (codeString[index] == closeCurvedBracket) countOfCurvedBrackets--; if (countOfCurvedBrackets == 0) countOfCurvedBrackets = -1; index++; } additionalCounter = index; countOfCurvedBrackets = 0; match = match.NextMatch(); } additionalCodeString.Append(codeString.Substring(additionalCounter, codeString.Length - additionalCounter)); codeString = additionalCodeString.ToString(); // create new RegEx fo finding all variables in codeString(all code after deliting comments, strings, functions) pattern = identifierRegEx + pointerRegEx + identifierRegEx; regularExpression = new Regex(pattern); match = regularExpression.Match(codeString); index = 0; while (match.Success) { if (isStandartType(match.Groups[1].Value)) { arrayOfGlobalVars[index].typeOfVariable = match.Groups[1].Value; arrayOfGlobalVars[index].nameOfVariable = match.Groups[2].Value; index++; countOfGlobalVars++; } match = match.NextMatch(); } structForReturning.countOfGlobalVars = countOfGlobalVars; structForReturning.arrayOfGlobalVars = arrayOfGlobalVars; return structForReturning; }