public static int getCountAccessFuncToGlobalVars(string codeString, structForGlobalArrayAndCount globalArray) { int additionalCounter = 0; int countOfCurvedBrackets = 0; int index; int indexOfGlobalVariable = 0; int CountAccessFuncToGlobalVars = 0; string additionalString; bool isGlobal = true; String signatureFunction; StringBuilder additionalCodeString = new StringBuilder(emptyString, codeString.Length); Regex regularExpressionSignature = new Regex(signatureFunctionRegEx); Match matchSignature = regularExpressionSignature.Match(codeString); while (matchSignature.Success) // find function { signatureFunction = matchSignature.Groups[0].Value; index = codeString.IndexOf(signatureFunction); while (codeString[index] != openCurvedBracket) index++; additionalCounter = index; while (countOfCurvedBrackets >= 0) { if (codeString[index] == openCurvedBracket) countOfCurvedBrackets++; else if (codeString[index] == closeCurvedBracket) countOfCurvedBrackets--; if (countOfCurvedBrackets == 0) countOfCurvedBrackets = -1; index++; } additionalCodeString.Append(codeString.Substring(additionalCounter, index - additionalCounter)); additionalString = additionalCodeString.ToString(); for (int i = 0; i < globalArray.countOfGlobalVars; i++ ) { if (additionalString.IndexOf(globalArray.arrayOfGlobalVars[i].nameOfVariable) != -1) { int indexOfEndType = 0; indexOfGlobalVariable = additionalString.IndexOf(globalArray.arrayOfGlobalVars[i].nameOfVariable); indexOfGlobalVariable--; while ((additionalString[indexOfGlobalVariable] == '\n') || (additionalString[indexOfGlobalVariable] == '\t') || (additionalString[indexOfGlobalVariable] == '\r') || (additionalString[indexOfGlobalVariable] == ' ') && (indexOfGlobalVariable != 0)) { indexOfGlobalVariable--; } indexOfEndType = indexOfGlobalVariable; while ((additionalString[indexOfGlobalVariable] != '\n') && (additionalString[indexOfGlobalVariable] != '\t') && (additionalString[indexOfGlobalVariable] != '\r') && (additionalString[indexOfGlobalVariable] != ' ') && (indexOfGlobalVariable != 0 )) { indexOfGlobalVariable--; } if (isStandartType(additionalString.Substring(indexOfGlobalVariable + 1, indexOfEndType - indexOfGlobalVariable )) && (indexOfGlobalVariable != 0)) isGlobal = false; if ((isGlobal) || (indexOfGlobalVariable ==0)) CountAccessFuncToGlobalVars++; isGlobal = true; } } countOfCurvedBrackets = 0; matchSignature = matchSignature.NextMatch(); additionalCodeString.Replace(additionalCodeString.ToString(), ""); } codeString = additionalCodeString.ToString(); return CountAccessFuncToGlobalVars; }
public static int getCountOfFuncFieldView(String codeString, structForGlobalArrayAndCount globalArray ) { StringBuilder typeAndNameVar = new StringBuilder("",30); string additionalString; StringBuilder additionalStringCode = new StringBuilder("", codeString.Length); int indexOfVar; int countOfFuncFieldView = 0; Regex regularExpression = new Regex(signatureFunctionRegEx); Match match ; for (int i = 0; i < globalArray.countOfGlobalVars; i++) { typeAndNameVar.Append(globalArray.arrayOfGlobalVars[i].typeOfVariable); typeAndNameVar.Append(" "); typeAndNameVar.Append(globalArray.arrayOfGlobalVars[i].nameOfVariable); additionalString = typeAndNameVar.ToString(); indexOfVar = codeString.IndexOf(additionalString); additionalStringCode.Append(codeString.Substring(indexOfVar, codeString.Length - indexOfVar)); additionalString = additionalStringCode.ToString(); match = regularExpression.Match(additionalString); while (match.Success) { countOfFuncFieldView++; match = match.NextMatch(); } typeAndNameVar.Replace(typeAndNameVar.ToString(), ""); additionalStringCode.Replace(additionalStringCode.ToString(), ""); } return countOfFuncFieldView; }
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; }