Example #1
0
 /*выводит переменные и их характеристики*/
 static void PrintVaribles(Vareble[] arr)
 {
     for (int i = 0; i < arr.Length; i++)
     {
         if  (arr[i].kind == VaribleKind.Испоьзуемая)
             arr[i].kind = arr[i].kind | VaribleKind.Модифицируемая;
         Console.WriteLine("{0} {1}", arr[i].name, arr[i].kind);
     }
     CalculateChepinValue(arr);
 }
Example #2
0
 /*добавляет новый элемент в массив строк*/
 static void AddToVarArray(ref Vareble[] arr, string str)
 {
     Array.Resize(ref arr, arr.Length + 1);
     arr[arr.Length - 1] = new Vareble(str, VaribleKind.Неиспользуемая);
 }
Example #3
0
 /*выписывает все переменные, стоящие после ближайшего слова var, в массив VariblesArr*/
 static void FindVaribles(ref string str, ref int pos, ref Vareble[] varArray)
 {
     string ident;
     do
     {
         do
         {
             ident = FindNextIdentifier(ref str, ref pos, false);
             AddToVarArray(ref varArray, ident);
         } while (FindNextSymbol(ref str, ref pos) != ':');
         while (FindNextSymbol(ref str, ref pos) != ';') ;   //пропускаем тип переменных
         ident = FindNextIdentifier(ref str, ref pos, true);
     } while (!FindWordInArray(ref ident, ref DescriptionWords)); //пока не найден новый раздел описания
 }
Example #4
0
 /*инициализирует вид переменной с именем name в массиве arr*/
 static bool DetermineVaribleInArr(ref Vareble[] arr, ref string name, VaribleKind kind)
 {
     int i = 0;
     bool result = false;
     while ((i < arr.Length) && !result)
     {
         result = String.Compare(arr[i].name, name, true) == 0;
         if (result)
             arr[i].kind = arr[i].kind | kind;
         i++;
     }
     return result;
 }
Example #5
0
 static void CalculateChepinValue(Vareble[] arr)
 {
     int P, M, C, T;
     P = M = C = T = 0;
     for (int i = 0; i < arr.Length; i++)
         if ((arr[i].kind & VaribleKind.Испоьзуемая) != 0)
         {
             if ((arr[i].kind & VaribleKind.Вводимая) != 0)
                 P++;
             if ((arr[i].kind & VaribleKind.Модифицируемая) != 0)
                 M++;
             if ((arr[i].kind & VaribleKind.Управляющая) != 0)
                 C++;
         }
         else
             T++;
     double result = P + 2 * M + 3 * C + 0.5 * T;
     PrintValues(P, M, C, T, result);
     totalP += P; totalM += M; totalC += C; totalT += T;
     ChepinValue += result;
 }
Example #6
0
 /*анализирует программный код находя в нём основные разделы описания*/
 static void AnalyzeProgram(ref string str, ref int pos)
 {
     bool global = true;
     string ident = FindNextIdentifier(ref str, ref pos, false);
     while (ident != null)
     {
         switch (ident.ToLower())
         {
             case "var":
                 if (global)  FindVaribles(ref str, ref pos, ref GlobalVaribles);
                 else         FindVaribles(ref str, ref pos, ref LocalVaribles);
                 break;
             case "function":
                 global = false;
                 LocalVaribles = new Vareble[0];
                 AnalayzeMethodHead(ref str, ref pos);
                 AddToVarArray(ref LocalVaribles, "Result");
                 DetermineVarible("Result", VaribleKind.Испоьзуемая);
                 break;
             case "procedure":
                 global = false;
                 LocalVaribles = new Vareble[0];
                 AnalayzeMethodHead(ref str, ref pos);
                 break;
             case "begin":
                 beginEndCounter++;
                 while (beginEndCounter != 0)
                     AnalyzeOperator(ref str, ref pos);
                 if (!global) PrintVaribles(LocalVaribles);
                 LocalVaribles = new Vareble[0];
                 global = true;
                 break;
             default:
                 break;
         }
         ident = FindNextIdentifier(ref str, ref pos, false);
     }
 }