Exemplo n.º 1
0
        //----< setup and execute the parser >-----------------
        static void parse(string file)
        {
            CSsemi.CSemiExp semi = new CSsemi.CSemiExp();
            semi.displayNewLines = false;
            if (!semi.open(file as string))
            {
                Console.WriteLine("  Can't open {0}", file);
                return;
            }

            BuildCodeAnalyzer builder = new BuildCodeAnalyzer(semi);
            Parser            parser  = builder.build(true);

            try
            {
                while (semi.getSemi())
                {
                    parser.parse(semi);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("  {0}", ex.Message);
            }

            semi.close();
        }
Exemplo n.º 2
0
        //------< to find types defiend, functions and Complexity and size of functions >-----
        public static void doAnalysis(string[] files)
        {
            string filename = null;
            foreach (object file in files)
            {
                CSsemi.CSemiExp semi = new CSsemi.CSemiExp();
                semi.displayNewLines = false;
                if (!semi.open(file as string))
                {
                    Console.Write("\n  Can't open {0}\n\n", file);
                    return;
                }

                BuildCodeAnalyzer builder = new BuildCodeAnalyzer(semi);
                Parser parser = builder.build();

                try
                {
                    filename = file.ToString();
                    while (semi.getSemi())
                        parser.parse(semi, filename);
                    // filename store with types and function to identify which types belongs to which file.

                }
                catch (Exception ex)
                {
                    Console.Write("\n\n  {0}\n", ex.Message);
                }
                semi.close();
               typetable= RepositoryForOutput.storageForOutput_;
                                    
            }
        }
Exemplo n.º 3
0
        //------< to find types defiend, functions and Complexity and size of functions >-----
        public static void doAnalysis(string[] files)
        {
            string filename = null;

            foreach (object file in files)
            {
                CSsemi.CSemiExp semi = new CSsemi.CSemiExp();
                semi.displayNewLines = false;
                if (!semi.open(file as string))
                {
                    Console.Write("\n  Can't open {0}\n\n", file);
                    return;
                }

                BuildCodeAnalyzer builder = new BuildCodeAnalyzer(semi);
                Parser            parser  = builder.build();

                try
                {
                    filename = file.ToString();
                    while (semi.getSemi())
                    {
                        parser.parse(semi, filename);
                    }
                    // filename store with types and function to identify which types belongs to which file.
                }
                catch (Exception ex)
                {
                    Console.Write("\n\n  {0}\n", ex.Message);
                }
                semi.close();
                typetable = RepositoryForOutput.storageForOutput_;
            }
        }
Exemplo n.º 4
0
        //----------<parse1 starts here, it identifies all the types>-----------------
        public void doAnalysis(string[] files)
        {

            foreach (object file in files)
            {
                string filename = Convert.ToString(file);

                CSsemi.CSemiExp semi = new CSsemi.CSemiExp();
                semi.displayNewLines = false;
                if (!semi.open(file as string))
                {
                    Console.Write("\n  Can't open {0}\n\n", file);
                    return;
                }


                BuildCodeAnalyzer builder = new BuildCodeAnalyzer(semi);
                Parser parser = builder.build();

                try
                {
                    while (semi.getSemi())
                        parser.parse(semi, filename);
                }
                catch (Exception ex)
                {
                    Console.Write("\n\n  {0}\n", ex.Message);
                }
                Repository rep = Repository.getInstance();
                List<Elem> table = rep.locations;           //storing the repository data into a List

                semi.close();
            }
        }
Exemplo n.º 5
0
        // ------------< to find Relationship between types defiend >--------------
        public static void doRelationAnalysis(string[] files)
        {
            string filename = null;
            foreach (object file in files)
            {
                CSsemi.CSemiExp semi = new CSsemi.CSemiExp();
                semi.displayNewLines = false;
                if (!semi.open(file as string))
                {
                    Console.Write("\n  Can't open {0}\n\n", file);
                    return;
                }

                BuildCodeAnalyzerRelation builder = new BuildCodeAnalyzerRelation(semi);
                Parser parser = builder.build();

                try
                {
                    filename = file.ToString();
                    while (semi.getSemi())
                        parser.parse(semi, filename);
                }
                catch (Exception ex)
                {
                    Console.Write("\n\n  {0}\n", ex.Message);
                }
                semi.close();
            }
        }
Exemplo n.º 6
0
    static public void doAnalysis(string[] files)
    {

      int skipCount = 0;

      CSsemi.CSemiExp semi = new CSsemi.CSemiExp();
      semi.displayNewLines = false;

      BuildCodeAnalyzer builder = new BuildCodeAnalyzer(semi);
      Parser parser = builder.build();
      Repository rep = Repository.getInstance();
      List<Elem> fileSetInfo = new List<Elem>();      // store type and name of file set, use for relationship analysis

      foreach (string file in files)
      {
        if(Display.showFiles)
          Display.displayString("");
        Display.displayFiles(act, "Processing file: " + file);

        if (!semi.open(file as string))
        {
          Console.Write("\n  Can't open {0}\n\n", file);
          return;
        }

        try
        {
          while (semi.getSemi())
          {
            parser.parse(semi);
          }
        }
        catch (Exception ex)
        {
          Console.Write("\n\n  {0}\n", ex.Message);
        }
        foreach (Elem e in rep.locations)
        {
            e.filename = file;
        }
        List<Elem> table = rep.locations;
        
        if (table.Count == 0)
        {
          ++skipCount;
          continue;
        }
       
        fileSetInfo.AddRange(rep.locations);        // push all elements in current file into inquiry table
        semi.close();

        rep.LocationsTable[file] = table;   // Obtained all the types and names of the file set, locationTable is actually a inquiry table
        rep.locations = new List<Elem>();
      }

      doAnalysis_Again(fileSetInfo, files);
      displaySkipped(skipCount);
      //displayAnalysis(rep);
      //analysisSummary(rep);
    }
Exemplo n.º 7
0
        // ------------< to find Relationship between types defiend >--------------
        public static void doRelationAnalysis(string[] files)
        {
            string filename = null;

            foreach (object file in files)
            {
                CSsemi.CSemiExp semi = new CSsemi.CSemiExp();
                semi.displayNewLines = false;
                if (!semi.open(file as string))
                {
                    Console.Write("\n  Can't open {0}\n\n", file);
                    return;
                }

                BuildCodeAnalyzerRelation builder = new BuildCodeAnalyzerRelation(semi);
                Parser parser = builder.build();

                try
                {
                    filename = file.ToString();
                    while (semi.getSemi())
                    {
                        parser.parse(semi, filename);
                    }
                }
                catch (Exception ex)
                {
                    Console.Write("\n\n  {0}\n", ex.Message);
                }
                semi.close();
            }
        }
Exemplo n.º 8
0
        //----------<parse1 starts here, it identifies all the types>-----------------
        public void doAnalysis(string[] files)
        {
            foreach (object file in files)
            {
                string filename = Convert.ToString(file);

                CSsemi.CSemiExp semi = new CSsemi.CSemiExp();
                semi.displayNewLines = false;
                if (!semi.open(file as string))
                {
                    Console.Write("\n  Can't open {0}\n\n", file);
                    return;
                }


                BuildCodeAnalyzer builder = new BuildCodeAnalyzer(semi);
                Parser            parser  = builder.build();

                try
                {
                    while (semi.getSemi())
                    {
                        parser.parse(semi, filename);
                    }
                }
                catch (Exception ex)
                {
                    Console.Write("\n\n  {0}\n", ex.Message);
                }
                Repository  rep   = Repository.getInstance();
                List <Elem> table = rep.locations;           //storing the repository data into a List

                semi.close();
            }
        }
        // function that parse all the files and build a inquiry table
        static void doAnalysis(string[] files, bool relation, bool xml)
        {
            List<Elem> fileSetInfo = new List<Elem>();      // store type and name of file set, use for relationship analysis
            List<Elem> summaryTAB = new List<Elem>();          // store size and complexity, use for display summary of the whole file set
            
            foreach (object file in files)
            {
                CSsemi.CSemiExp semi = new CSsemi.CSemiExp();
                semi.displayNewLines = false;
                if (!semi.open(file as string))
                {
                    Console.Write("\n  Can't open {0}\n\n", file);
                    return;
                }
                BuildCodeAnalyzer builder = new BuildCodeAnalyzer(semi);    // creat a repository
                Parser parser = builder.build();        // creat a parser object and five rule object, attach the rules to parser
                try
                {
                    while (semi.getSemi())
                        parser.parse(semi);
                }
                catch (Exception ex)
                {
                    Console.Write("\n\n  {0}\n", ex.Message);
                }
                Repository rep = Repository.getInstance();
                fileSetInfo.AddRange(rep.locations);        // push all elements in current file into inquiry table
                semi.close();
            }

            secondAnalysis(files, fileSetInfo, summaryTAB, relation, xml);
        }
Exemplo n.º 10
0
        //----< Test Stub >--------------------------------------------------

#if (TEST_PARSER)
        static void Main(string[] args)
        {
            Console.Write("\n  Demonstrating Parser");
            Console.Write("\n ======================\n");

            ShowCommandLine(args);

            /* If the package is run as stand alone application
             * then add the default values for the member variables
             */
            try
            {
                List <string> files = TestParser.ProcessCommandline(args);
                foreach (object file in files)
                {
                    Console.Write("\n  Processing file {0}\n", file as string);

                    CSsemi.CSemiExp semi = new CSsemi.CSemiExp();
                    semi.displayNewLines = false;
                    if (!semi.open(file as string))
                    {
                        Console.Write("\n  Can't open {0}\n\n", args[0]);
                        return;
                    }

                    Console.Write("\n  Type and Function Analysis");
                    Console.Write("\n ----------------------------\n");

                    BuildCodeAnalyzer builder = new BuildCodeAnalyzer(semi);
                    Parser            parser  = builder.build();

                    try
                    {
                        while (semi.getSemi())
                        {
                            parser.parse(semi);
                        }
                        Console.Write("\n\n  locations table contains:");
                    }
                    catch (Exception ex)
                    {
                        Console.Write("\n\n  {0}\n", ex.Message);
                    }
                    Repository  rep   = Repository.getInstance();
                    List <Elem> table = rep.locations;
                    foreach (Elem e in table)
                    {
                        Console.Write("\n  {0,10}, {1,25}, {2,5}, {3,5}", e.type, e.name, e.begin, e.end);
                    }
                    Console.WriteLine();
                    semi.close();
                    Console.ReadLine();
                }
            }
            catch
            {
                Console.WriteLine("Error in parsing");
            }
        }
Exemplo n.º 11
0
        protected CSsemi.CSemiExp GetSemiExpressionFromFile(object file)
        {
            CSsemi.CSemiExp semi = new CSsemi.CSemiExp();
            semi.displayNewLines = false;
            if (!semi.open(file as string))
            {
                Console.Write("\n  Can't open {0}\n\n", file);
                return(null);
            }

            return(semi);
        }
Exemplo n.º 12
0
        static public void doAnalysis(string[] files)
        {
            int skipCount = 0;

            CSsemi.CSemiExp semi = new CSsemi.CSemiExp();
            semi.displayNewLines = false;

            BuildCodeAnalyzer builder = new BuildCodeAnalyzer(semi);
            Parser            parser  = builder.build();
            Repository        rep     = Repository.getInstance();

            foreach (string file in files)
            {
                if (Display.showFiles)
                {
                    Display.displayString("");
                }
                Display.displayFiles(act, "Processing file: " + file);

                if (!semi.open(file as string))
                {
                    Console.Write("\n  Can't open {0}\n\n", file);
                    return;
                }

                try
                {
                    while (semi.getSemi())
                    {
                        parser.parse(semi);
                    }
                }
                catch (Exception ex)
                {
                    Console.Write("\n\n  {0}\n", ex.Message);
                }
                List <Elem> table = rep.locations;
                if (table.Count == 0)
                {
                    ++skipCount;
                    continue;
                }

                semi.close();
                rep.LocationsTable[file] = table;
                rep.locations            = new List <Elem>();
            }

            displaySkipped(skipCount);
            displayAnalysis(rep);
            analysisSummary(rep);
        }
Exemplo n.º 13
0
        //----< Test Stub for Parser >--------------------------------------------------

#if (TEST_PARSER)
        static void Main(string[] args)
        {
            Console.Write("\n  Demonstrating Parser");
            Console.Write("\n ======================\n");
            ShowCommandLine(args);
            List <string> files = TestParser.ProcessCommandline(args);

            foreach (object file in files)
            {
                string filename = Convert.ToString(file);
                Console.Write("\n  Processing file {0}\n", file as string);

                CSsemi.CSemiExp semi = new CSsemi.CSemiExp();
                semi.displayNewLines = false;
                if (!semi.open(file as string))
                {
                    Console.Write("\n  Can't open {0}\n\n", args[0]);
                    return;
                }
                Console.Write("\n  Type and Function Analysis");
                Console.Write("\n ----------------------------\n");

                BuildCodeAnalyzer builder = new BuildCodeAnalyzer(semi);
                Parser            parser  = builder.build();
                try
                {
                    while (semi.getSemi())
                    {
                        parser.parse(semi, filename);
                    }
                    Console.Write("\n\n  locations table contains:");
                }
                catch (Exception ex)
                {
                    Console.Write("\n\n  {0}\n", ex.Message);
                }
                Repository  rep   = Repository.getInstance();
                List <Elem> table = rep.locations;

                foreach (Elem e in table)
                {
                    if (e.type == "function")
                    {
                        Console.Write("\n  {0,10}, {1,25}, {2,5}, {3,5}, {4,5}", e.type, e.name, e.begin, e.end, e.functionComplexity);
                    }
                }
                Console.WriteLine();
                Console.Write("\n\n  That's all folks!\n\n");
                semi.close();
            }
        }
Exemplo n.º 14
0
 static public void doAnalysis(string[] files,bool relationship) { 
   BuildCodeAnalyzer builder;
   BuildCodeAnalyzer_relation builder_relation;
   Parser parser;
   Parser parser_;
   for(int i=0;i<2;i++) {  
       foreach (object file in files) {
           CSsemi.CSemiExp semi = new CSsemi.CSemiExp();
           CSsemi.CSemiExp semi_relation = new CSsemi.CSemiExp();
           semi.displayNewLines = false;
           if (!semi.open(file as string)) {
               Console.Write("\n  Can't open {0}\n\n", file);
               return;
           }
           if (!semi_relation.open(file as string)) {
               Console.Write("\n  Can't open {0}\n\n", file);
               return;
           }
           if (i == 0)  {
               builder = new BuildCodeAnalyzer(semi);
               parser = builder.build();
               Repository rep1 = Repository.getInstance();
               rep1.setfilename(Path.GetFileName(file.ToString()));
               try {
                  while (semi.getSemi())
                      parser.parse(semi);
               }
               catch (Exception ex)
               {
                   Console.Write("\n\n  {0}\n", ex.Message);
               }
           }
           else  {
               builder_relation = new BuildCodeAnalyzer_relation(semi_relation);
               parser_ = builder_relation.build_relation();
               Repository rep1 = Repository.getInstance();
               rep1.setfilename(Path.GetFileName(file.ToString()));
               try {
                   while (semi_relation.getSemi())
                       parser_.parse(semi_relation);
               }
               catch (Exception ex) {
                   Console.Write("\n\n  {0}\n", ex.Message);
               }
           }
           semi.close(); }
       if (!relationship)
           return;
     }
 }
Exemplo n.º 15
0
        /// <summary>
        /// This is the method where we create the code anlayser object.
        /// There will be only one code analyser object for all the files.
        /// It uses the parser module to find the relationship analysis.
        /// Once the results are generated, it will be stored in the centralised
        /// repo. We use this centralised repo from other module to know
        /// the type and dependency analysis.
        /// </summary>
        /// <param name="serverName"></param>
        public void analyze(string serverName)
        {
            Console.Write("\n  CODE ANALYZER");
            Console.Write("\n ======================\n");

            CSsemi.CSemiExp semi = new CSsemi.CSemiExp();
            semi.displayNewLines = false;

            try
            {
                foreach (object file in files)
                {
                    Console.Write("\n\n  Processing file {0}\n", file as string);

                    if (!semi.open(file as string))
                    {
                        Console.Write("\n  Can't open {0}\n\n", file);
                        return;
                    }

                    Console.Write("\n  Type and Function Analysis");
                    Console.Write("\n ----------------------------\n");

                    BuildCodeAnalyzer   builder = new BuildCodeAnalyzer(semi);
                    CodeAnalysis.Parser parser  = builder.build();

                    Repository repo = Repository.getInstance();
                    repo.CurrentFileName = file.ToString();
                    Elem elem = getDefaultElemData(file.ToString(), serverName);
                    repo.locations.Add(elem);

                    try
                    {
                        while (semi.getSemi())
                        {
                            parser.parse(semi);
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.Write("\n\n  {0}\n", ex.Message);
                    }
                    semi.close();
                }
            }
            catch (Exception)
            {
                Console.WriteLine("Error in the data. Exception thrown, pls check the input");
            }
        }
Exemplo n.º 16
0
        public List <Elem> typesBetweenFiles        = new List <Elem>();         //list to store info between files
        public void doAnalysis(string[] files)
        {
            Console.Write("\n  Demonstrating Parser");
            Console.Write("\n ======================\n");

            //**processes it for every file one after another*********

            foreach (object file in files)
            {
                Console.Write("\n  Processing file {0}\n", file as string);

                CSsemi.CSemiExp semi = new CSsemi.CSemiExp();
                semi.displayNewLines = false;
                if (!semi.open(file as string))
                {
                    Console.Write("\n  Can't open {0}\n\n", file);
                    return;
                }

                Console.Write("\n  Type and Function Analysis");
                Console.Write("\n ----------------------------\n");

                CodeAnalysis.BuildCodeAnalyzer builder = new BuildCodeAnalyzer(semi);
                Parser parser = builder.build();

                try
                {
                    while (semi.getSemi())
                    {
                        parser.parse(semi); //parses every semi expression
                    }
                }
                catch (Exception ex)
                {
                    Console.Write("\n\n  {0}\n", ex.Message);
                }
                Repository  rep   = Repository.getInstance();
                List <Elem> table = rep.locations;
                typesBetweenFiles = rep.locations;
                foreach (Elem e in table)
                {
                    Console.Write("\n  {0,10}, {1,25}, {2,5}, {3,5}", e.type, e.name, e.begin, e.end);
                }
                Console.WriteLine();
                Console.Write("\n\n  That's all folks!\n\n");
                semi.close();
            }
        }
Exemplo n.º 17
0
        //----< Test Stub >--------------------------------------------------

#if (TEST_PARSER)
        static void Main(string[] args)
        {
            Console.Write("\n  Demonstrating Parser");
            Console.Write("\n ======================\n");

            ShowCommandLine(args);

            List <string> files = TestParser.ProcessCommandline(args);

            foreach (object file in files)
            {
                Console.Write("\n  Processing file {0}\n", file as string);

                CSsemi.CSemiExp semi = new CSsemi.CSemiExp();
                semi.displayNewLines = false;
                if (!semi.open(file as string))
                {
                    Console.Write("\n  Can't open {0}\n\n", args[0]);
                    return;
                }

                Console.Write("\n  Type and Function Analysis");
                Console.Write("\n ----------------------------\n");

                BuildCodeAnalyzer builder = new BuildCodeAnalyzer(semi);
                Parser            parser  = builder.build();

                try
                {
                    while (semi.getSemi())
                    {
                        parser.parse(semi);
                    }
                    Console.Write("\n\n  locations table contains:");
                }
                catch (Exception ex)
                {
                    Console.Write("\n\n  {0}\n", ex.Message);
                }
                Repository rep = Repository.getInstance();

                Console.Write("\n\n  That's all folks!\n\n");
                semi.close();
            }
        }
Exemplo n.º 18
0
        /*
         * Method to parse through list of user input files and parse
         * for all user defined types
         */
        public static void parseUserDefinedTypes(List <string> files)
        {
            if (files.Count == 0)
            {
                return;
            }

            foreach (String file in files)
            {
                Console.Write("Parsing for all user defined types");
                CSsemi.CSemiExp semi = new CSsemi.CSemiExp();
                semi.displayNewLines = false;

                if (!semi.open(file as string))
                {
                    Console.Write("\n Can't open {0}\n\n", file.ToString());
                }

                BuildCodeAnalyzer   builder = new BuildCodeAnalyzer(semi);
                CodeAnalysis.Parser parser  = builder.build();

                //test against the detect class rule
                try
                {
                    //use the existing parser to test rule
                    while (semi.getSemi())
                    {
                        int index = isClassExpression(semi);
                        if (index != -1)
                        {
                            CSsemi.CSemiExp local = new CSsemi.CSemiExp();
                            // local semiExp with tokens for type and name
                            local.displayNewLines = false;
                            local.Add(semi[index]).Add(semi[index + 1]);
                            userDefinedSet.Add(semi[index + 1]);
                        }
                    }
                }
                catch (Exception ex) {
                    Console.Write("\n\n {0}", ex.Message);
                }
            }

            // return userDefinedSet;
        }
Exemplo n.º 19
0
        static void doAnalysis(string[] files)
        {
            Console.Write("\n  Demonstrating Parser");
            Console.Write("\n ======================\n");

            foreach (object file in files)
            {
                Console.Write("\n  Processing file {0}\n", file as string);

                CSsemi.CSemiExp semi = new CSsemi.CSemiExp();
                semi.displayNewLines = false;
                if (!semi.open(file as string))
                {
                    Console.Write("\n  Can't open {0}\n\n", file);
                    return;
                }

                Console.Write("\n  Type and Function Analysis");
                Console.Write("\n ----------------------------\n");

                BuildCodeAnalyzer builder = new BuildCodeAnalyzer(semi);
                Parser parser = builder.build();

                try
                {
                    while (semi.getSemi())
                        parser.parse(semi);
                    Console.Write("\n\n  locations table contains:");
                }
                catch (Exception ex)
                {
                    Console.Write("\n\n  {0}\n", ex.Message);
                }
                Repository rep = Repository.getInstance();
                List<Elem> table = rep.locations;
                foreach (Elem e in table)
                {
                    Console.Write("\n  {0,10}, {1,25}, {2,5}, {3,5} , {4,5}", e.type, e.name, e.begin, e.end, e.end - e.begin + 1);
                }
                Console.WriteLine();
                Console.Write("\n\n  That's all folks!\n\n");
                semi.close();
            }
        }
Exemplo n.º 20
0
        //read the list of files, one by one and calls BuildCodeAnalyzer and parser functions
        public void analyze(string serverName)
        {
            Console.Write("\n  CODE ANALYZER");
            Console.Write("\n ======================\n");

            CSsemi.CSemiExp semi = new CSsemi.CSemiExp();
            semi.displayNewLines = false;

            foreach (object file in files)
            {
                Console.Write("\n\n  Processing file {0}\n", file as string);

                if (!semi.open(file as string))
                {
                    Console.Write("\n  Can't open {0}\n\n", file);
                    return;
                }

                Console.Write("\n  Type and Function Analysis");
                Console.Write("\n ----------------------------\n");

                BuildCodeAnalyzer builder = new BuildCodeAnalyzer(semi);
                CodeAnalysis.Parser parser = builder.build();

                Repository repo = Repository.getInstance();
                Elem elem = getDefaultElemData(file.ToString(), serverName);
                repo.analyzedata.Add(elem);

                try
                {
                    while (semi.getSemi())
                        parser.parse(semi);
                }
                catch (Exception ex)
                {
                    Console.Write("\n\n  {0}\n", ex.Message);
                }
                semi.close();
            }
        }
Exemplo n.º 21
0
        //*****second parse************//
        public void reldoAnalysis(string[] files)
        {
            foreach (object file in files)
            {
                Console.Write("\n  Processing file {0}\n", file as string);

                CSsemi.CSemiExp semi = new CSsemi.CSemiExp();
                semi.displayNewLines = false;
                if (!semi.open(file as string))
                {
                    Console.Write("\n  Can't open {0}\n\n", file);
                    return;
                }


                Repository rep_inst = Repository.getInstance();
                Repository.Copy_buffer = typesBetweenFiles;

                BuildCodeAnalyzer_types builder_ty = new BuildCodeAnalyzer_types(semi);
                Parser parser = builder_ty.build();
                // sends every semi again for relationship analysis
                try
                {
                    while (semi.getSemi())
                    {
                        parser.parse(semi);
                    }
                }
                catch (Exception ex)
                {
                    Console.Write("\n\n  {0}\n", ex.Message);
                }

                //stores all the updation to the type and relationship list back to the repository
                Repository_types    rep   = Repository_types.getInstance();
                List <relationelem> table = rep.classrelations;
                rel_BetweenFiles = (rep.classrelations);
            }
        }
Exemplo n.º 22
0
        /// <summary>
        /// This method is used for the second round of analysis.
        /// Since there are multiple servers, we need to merge the partial type
        /// table of each of the server to find the depenendency across various
        /// servers. Once the first parse is done, the client sends the type table
        /// of all other servers. At this point, we will merge the existing type
        /// table with other server type table and then use this updated table
        /// to find the final dependeny results.
        /// </summary>
        public void analyzeSecondParse()
        {
            CSsemi.CSemiExp semi = new CSsemi.CSemiExp();
            semi.displayNewLines = false;

            try
            {
                foreach (object file in files)
                {
                    if (!semi.open(file as string))
                    {
                        Console.Write("\n  Can't open {0}\n\n", file);
                        return;
                    }

                    BuildCodeAnalyzerForRelationshipTypes builderreln = new BuildCodeAnalyzerForRelationshipTypes(semi);
                    CodeAnalysis.Parser parser = builderreln.build();

                    try
                    {
                        while (semi.getSemi())
                        {
                            parser.parse(semi);
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.Write("\n\n  {0}\n", ex.Message);
                    }
                    semi.close();
                }
            }
            catch (Exception ex)
            {
                Console.Write("\n\n Error in the input data. Exception {0}. Please check the input data\n", ex.Message);
            }
        }
Exemplo n.º 23
0
        static void doAnalysis(string[] files, bool relation_flag, bool xml_flag)
        {
            List<Elem> TABLE = new List<Elem>();
            foreach (object file in files)
            {
                CSsemi.CSemiExp semi = new CSsemi.CSemiExp();
                semi.displayNewLines = false;
                if (!semi.open(file as string))
                {
                    Console.Write("\n  Can't open {0}\n\n", file);
                    return;
                }
                BuildCodeAnalyzer builder = new BuildCodeAnalyzer(semi);
                Parser parser = builder.build();
                try
                {
                    while (semi.getSemi())
                        parser.parse(semi);
                }
                catch (Exception ex)
                {
                    Console.Write("\n\n  {0}\n", ex.Message);
                }
                Repository rep = Repository.getInstance();
                TABLE.AddRange(rep.locations);          // Build a TABLE to store all the elements, provided to be searched for relationshipAnalysis class
                semi.close();
            }

            Console.Write("\n  Demonstrating Parser");
            Console.Write("\n ======================\n");

            // parse all files and store the elements into table for each file
            foreach (object file in files)
            {
                Console.Write("\n Processing file {0}\n", file as string);

                CSsemi.CSemiExp semi = new CSsemi.CSemiExp();
                semi.displayNewLines = false;
                if (!semi.open(file as string))
                {
                    Console.Write("\n  Can't open {0}\n\n", file);
                    return;
                }

                BuildCodeAnalyzer builder = new BuildCodeAnalyzer(semi);
                Parser parser = builder.build();

                try
                {
                    while (semi.getSemi())
                        parser.parse(semi);
                    Console.Write("\n\n locations table contains:");
                }
                catch (Exception ex)
                {
                    Console.Write("\n\n  {0}\n", ex.Message);
                }
                Repository rep = Repository.getInstance();
                List<Elem> table = rep.locations;

                // display basic information for elements including size and complexity
                Console.Write("\n    type                 name          begin      end       size     complexity");
                foreach (Elem e in table)
                {
                    if (e.type == "function")
                    {
                        ComplexityAnalysis ca = new ComplexityAnalysis();
                        e.complexity = ca.ComplexityAnalyze(e, file);
                    }
                        Console.Write("\n  {0,9}, {1,20}, {2,8}, {3,8}, {4,8}, {5,8}", e.type, e.name, e.begin, e.end, e.end - e.begin + 1, e.complexity);

                }
                //display the relationships between classes
                if (relation_flag == true)
                {
                    foreach (Elem e in table)
                    {
                        e.AggregationFlag = false;
                        e.CompositionFlag = false;
                        e.UsingFlag = false;
                        if (e.type == "class" || e.type == "struct" || e.type == "interface")
                        {
                            Console.Write("\n\n {0} {1}", e.type, e.name);
                            Console.Write("------------------------------------------------------\n");
                            RelationshipAnalysis ra = new RelationshipAnalysis();
                            ra.RelationshipAnalyzer(e, file, TABLE);
                            foreach (Elem ele in TABLE)
                            {
                                ele.AggregationFlag = false;
                                ele.CompositionFlag = false;
                                ele.UsingFlag = false;
                            }
                        }
                    }
                }
                Console.WriteLine();

                //display xml files for each file
                if (xml_flag == true)
                {
                    XML x = new XML();
                    x.XmlBuilder(table, (string)file);
                }
            }
            Console.Write("\n");
            DisplaySummary(TABLE);
        }
Exemplo n.º 24
0
        /// <summary>
        /// Starts the part 2 of analysis to find out the package and relationship dependency
        /// </summary>
        public void analyzePartII()
        {
            CSsemi.CSemiExp semi = new CSsemi.CSemiExp();
            semi.displayNewLines = false;

            foreach (object file in files)
            {
                if (!semi.open(file as string))
                {
                    Console.Write("\n  Can't open {0}\n\n", file);
                    return;
                }

                BuildCodeAnalyzerRelationships builderreln = new BuildCodeAnalyzerRelationships(semi);
                CodeAnalysis.Parser parser = builderreln.build();

                try
                {
                    while (semi.getSemi())
                        parser.parse(semi);
                }
                catch (Exception ex)
                {
                    Console.Write("\n\n  {0}\n", ex.Message);
                }
                semi.close();
            }
        }
Exemplo n.º 25
0
    static public void doAnalysis_Again(List<Elem> fileSetInfo, string[] files)
    {
        CSsemi.CSemiExp semi = new CSsemi.CSemiExp();
        semi.displayNewLines = false;

        BuildCodeAnalyzer builder = new BuildCodeAnalyzer(semi);
        Parser parser = builder.build();
        Repository rep = Repository.getInstance();

        foreach (string file in files)
        {
            if (Display.showFiles)
                Display.displayString("");
            Display.displayFiles(act, "Processing file: " + file);

            if (!semi.open(file as string))
            {
                Console.Write("\n  Can't open {0}\n\n", file);
                return;
            }

            try
            {
                while (semi.getSemi())
                {
                    parser.parse(semi);
                }
            }
            catch (Exception ex)
            {
                Console.Write("\n\n  {0}\n", ex.Message);
            }
            foreach (Elem e in rep.locations)
            {
                e.filename = file;
            }
            List<Elem> table = rep.locations;

            if (table.Count == 0)
            {
                continue;
            }
            List<string> filename = new List<string>();
            filename.Add("");
            fileDependencyTable.Add(file, filename);
            foreach (Elem e in table)      // analysis each element's dependency if it is a class or struct or interface
            {
                if (e.type == "class" || e.type == "struct" || e.type == "interface")
                    dependencyAnalyzer.dependencyAnalysis(e, file, fileSetInfo);

                foreach (Elem ee in fileSetInfo)
                {
                    if (e.dependency.Contains(ee.name) && !fileDependencyTable[file].Contains(ee.filename) && ee.filename != file)
                    {
                        fileDependencyTable[file].Add(ee.filename);
                    }
                }
            }

            semi.close();
            rep.LocationsTable[file] = table;   // obtained all the types and names of the file set, locationTable is actually a inquiry table
            rep.locations = new List<Elem>();
        }

        displayAnalysis(rep);
        analysisSummary(rep);
    }
Exemplo n.º 26
0
        //read the list of files, one by one and calls BuildCodeAnalyzer and parser functions
        public void analyze()
        {
            Console.Write("\n  CODE ANALYZER");
            Console.Write("\n ======================\n");

            CSsemi.CSemiExp semi = new CSsemi.CSemiExp();
            semi.displayNewLines = false;

            foreach (object file in files)
            {
                Console.Write("\n\n  Processing file {0}\n", file as string);

                if (!semi.open(file as string))
                {
                    Console.Write("\n  Can't open {0}\n\n", file);
                    return;
                }

                Console.Write("\n  Type and Function Analysis");
                Console.Write("\n ----------------------------\n");

                BuildCodeAnalyzer   builder = new BuildCodeAnalyzer(semi);
                CodeAnalysis.Parser parser  = builder.build();

                try
                {
                    while (semi.getSemi())
                    {
                        parser.parse(semi);
                    }
                }
                catch (Exception ex)
                {
                    Console.Write("\n\n  {0}\n", ex.Message);
                }
                semi.close();

                if (relationshipflag)
                {
                    semi = new CSsemi.CSemiExp();
                    semi.displayNewLines = false;
                    if (!semi.open(file as string))
                    {
                        Console.Write("\n  Can't open {0}\n\n", file);
                        return;
                    }

                    BuildCodeAnalyzerRelationships builderreln = new BuildCodeAnalyzerRelationships(semi);
                    parser = builderreln.build();

                    try
                    {
                        while (semi.getSemi())
                        {
                            parser.parse(semi);
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.Write("\n\n  {0}\n", ex.Message);
                    }
                }
                semi.close();
            }
        }
Exemplo n.º 27
0
        public void doAnalysis(string[] files)
        {
            // Parser p = new Parser();
            //p.parseFiles(files);

            //NEW DESIGN

            CSsemi.CSemiExp   semi    = new CSsemi.CSemiExp();
            CSsemi.CSemiExp   semi2   = new CSsemi.CSemiExp();
            BuildCodeAnalyzer builder = new BuildCodeAnalyzer(semi);
            Parser            parser  = builder.build();

            foreach (object file in files)
            {
                semi.displayNewLines = false;
                if (!semi.open(file as string))
                {
                    Console.Write("\n  Can't open {0}\n\n", file);
                    return;
                }

                // Console.Write("\n  Type and Function Analysis");
                // Console.Write("\n ----------------------------\n");

                //  Console.WriteLine("processing file{0}", file as string);



                try
                {
                    if (semi.getSemi())
                    {
                        semi2 = semi;
                        parser.parse(semi);
                    }
                    while (semi.getSemi())
                    {
                        parser.parse(semi);
                    }
                    //Console.Write("\n\n  locations table contains:");
                }
                catch (Exception ex)
                {
                    Console.Write("\n\n  {0}\n", ex.Message);
                }

                semi.close();
            }

            Repository  rep   = Repository.getInstance();
            List <Elem> table = rep.locations;


            Parser parser2 = builder.build2(rep, semi2);

            foreach (object file in files)
            {
                // CSsemi.CSemiExp semi = new CSsemi.CSemiExp();
                semi2.displayNewLines = false;

                if (!semi2.open(file as string))
                {
                    Console.Write("\n  Can't open {0}\n\n", file);
                    return;
                }

                try
                {
                    do
                    {
                        parser2.parse(semi2);
                    } while (semi2.getSemi());
                }
                catch (Exception ex)
                {
                    Console.Write("\n\n  {0}\n", ex.Message);
                }
                //Repository rep = Repository.getInstance();

                semi2.close();
            }
        }
Exemplo n.º 28
0
    //----< Test Stub >--------------------------------------------------

#if(TEST_PARSER)

    static void Main(string[] args)
    {
      Console.Write("\n  Demonstrating Parser");
      Console.Write("\n ======================\n");

      List<string> files = TestParser.ProcessCommandline(args);
      foreach (object file in files)
      {
        Console.Write("\n  Processing file {0}\n", file as string);

        CSsemi.CSemiExp semi = new CSsemi.CSemiExp();
        semi.displayNewLines = false;
        if (!semi.open(file as string))
        {
          Console.Write("\n  Can't open {0}\n\n", args[0]);
          return;
        }

        Console.Write("\n  Type and Function Analysis");
        Console.Write("\n ----------------------------\n");

        BuildCodeAnalyzer builder = new BuildCodeAnalyzer(semi);
        Parser parser = builder.build();

        while (semi.getSemi())
          parser.parse(semi);
        //Console.Write("\n\n  locations table contains:");

        Repository rep = Repository.getInstance();
        List<Elem> table = rep.locations;
          
        foreach (Elem e in table)
        {
         // Console.Write("\n  {0,10}, {1,25}, {2,5}, {3,5}", e.type, e.name, e.begin, e.end);
        }
        //Console.WriteLine();
       // Console.Write("\n\n  That's all folks!\n\n");
        semi.close();
      }
    }
Exemplo n.º 29
0
        // function that parse each file, detect class relationship, function size and complexity
        static void secondAnalysis(string[] files, List<Elem> fileSetInfo, List<Elem> summaryTAB, bool relation, bool xml)
        {
            foreach (object file in files)
            {
                CSsemi.CSemiExp semi = new CSsemi.CSemiExp();
                semi.displayNewLines = false;
                if (!semi.open(file as string))
                {
                    Console.Write("\n  Can't open {0}\n\n", file);
                    return;
                }
                BuildCodeAnalyzer builder = new BuildCodeAnalyzer(semi);
                Parser parser = builder.build();
                try
                {
                    while (semi.getSemi())
                        parser.parse(semi);                    
                }
                catch (Exception ex)
                {
                    Console.Write("\n\n  {0}\n", ex.Message);
                }
                Repository rep = Repository.getInstance();
                List<Elem> table = rep.locations;
                ComplexityAnalyzer comxAna = new ComplexityAnalyzer();
                foreach (Elem e in table)                                   // analysis each element's complexity if it is a function
                {
                    if (e.type == "function")
                        e.complexity = comxAna.complexityAnalysis(e, file, fileSetInfo);
                }

                summaryTAB.AddRange(table);

                RelationshipAnalyzer relshAna = new RelationshipAnalyzer();
                foreach (Elem e in table)                                   // analysis each element's relationship if it is a class or struct or interface
                {
                    if (e.type == "class" || e.type == "struct" || e.type == "interface")
                        relshAna.relationshipanalysis(e, file, fileSetInfo);
                }
                display(table, file, relation, xml);              
                semi.close();
            }// all the files in file set had been parsed

            summary(summaryTAB, relation);           
        }
Exemplo n.º 30
0
 public int ComplexityAnalyze(Elem e, Object file)
 {
     CSsemi.CSemiExp local = new CSsemi.CSemiExp();
       local.open(file as string);
       int complexity = 1;
       while(local.lineCount<e.begin)
       {
       local.getSemi();
       }
       while(local.lineCount <= e.end)
       {
       local.getSemi();
       if (local.Contains("if") != -1)
           complexity++;
       if (local.Contains("else") != -1)
           complexity++;
       if (local.Contains("for") != -1)
           complexity++;
       if (local.Contains("foreach") != -1)
           complexity++;
       if (local.Contains("while") != -1)
           complexity++;
       if (local.Contains("try") != -1)
           complexity++;
       if (local.Contains("catch") != -1)
           complexity++;
       if (local.Contains("case") != -1)
           complexity++;
       }
       return complexity;
 }
        static void Main(string[] args)
        {
            List <string> CSharpFiles = Ingest.GenerateFileStructure(args);
            List <string> contentList = new List <string>();

            foreach (string file in CSharpFiles)
            {
                Console.Write("\n  Processing file {0}\n", System.IO.Path.GetFileName(file));

                CSsemi.CSemiExp semi = new CSsemi.CSemiExp();
                semi.displayNewLines = false;
                if (!semi.open(file))
                {
                    Console.Write("\n  Can't open {0}\n\n", args[0]);
                    return;
                }

                Console.Write("\n  Type and Function Analysis");
                Console.Write("\n ----------------------------");
                BuildCodeAnalyzer builder = new BuildCodeAnalyzer(semi);
                Parser            parser  = builder.build();

                try
                {
                    while (semi.getSemi())
                    {
                        parser.parse(semi);
                    }
                    Console.Write("\n  locations table contains:");
                }
                catch (Exception ex)
                {
                    Console.Write("\n\n  {0}\n", ex.Message);
                }

                Repository  rep   = Repository.getInstance();
                List <Elem> table = rep.locations;

                Console.Write(
                    "\n  {0,10}, {1,25}, {2,5}, {3,5}, {4,5}, {5,5}, {6,5}, {7,5}",
                    "category", "name", "bLine", "eLine", "bScop", "eScop", "size", "cmplx"
                    );
                Console.Write(
                    "\n  {0,10}, {1,25}, {2,5}, {3,5}, {4,5}, {5,5}, {6,5}, {7,5}",
                    "--------", "----", "-----", "-----", "-----", "-----", "----", "-----"
                    );

                List <string> functionList = new List <string>();
                foreach (Elem e in table)
                {
                    if (e.type == "class" || e.type == "struct" || e.type == "Comment")
                    {
                        Console.Write("\n");
                    }
                    Console.Write("\n  {0,10}, {1,25}, {2,5}, {3,5}, {4,5}, {5,5}, {6,5}, {7,5}",
                                  e.type, e.name, e.beginLine, e.endLine, e.beginScopeCount, e.endScopeCount + 1,
                                  e.endLine - e.beginLine + 1, e.endScopeCount - e.beginScopeCount + 1
                                  );

                    if (e.type == "function")
                    {
                        contentList = PostProcessor.getContentBetweenLines(file, e.beginLine, e.endLine);
                        functionList.Add(e.name);
                    }

                    if (e.type == "class" || e.type == "namespace")
                    {
                        PostProcessor.addObjectToFile(e.name, file);
                    }

                    HTML_Builder.buildFileStructure(file, e.type, e.name, e.beginLine, e.endLine, contentList);
                }

                PostProcessor.addFileToFileList(functionList, file);
                Console.Write("\n");
                semi.close();
            }
            PostProcessor.buildDependencies(CSharpFiles);

            HTML_Builder.generateFileList(CSharpFiles);
            foreach (string file in CSharpFiles)
            {
                HTML_Builder.buildPageContent(file.Substring(file.LastIndexOf("\\") + 1), CSharpFiles);
            }
            Console.Write("\n\n");
        }
Exemplo n.º 32
0
        //read the list of files, one by one and calls BuildCodeAnalyzer and parser functions
        public void analyze()
        {
            Console.Write("\n  CODE ANALYZER");
            Console.Write("\n ======================\n");

            CSsemi.CSemiExp semi = new CSsemi.CSemiExp();
            semi.displayNewLines = false;

            foreach (object file in files)
            {
                Console.Write("\n\n  Processing file {0}\n", file as string);

                if (!semi.open(file as string))
                {
                    Console.Write("\n  Can't open {0}\n\n", file);
                    return;
                }

                Console.Write("\n  Type and Function Analysis");
                Console.Write("\n ----------------------------\n");

                BuildCodeAnalyzer builder = new BuildCodeAnalyzer(semi);
                CodeAnalysis.Parser parser = builder.build();

                try
                {
                    while (semi.getSemi())
                        parser.parse(semi);
                }
                catch (Exception ex)
                {
                    Console.Write("\n\n  {0}\n", ex.Message);
                }
                semi.close();

                if (relationshipflag)
                {
                    semi = new CSsemi.CSemiExp();
                    semi.displayNewLines = false;
                    if (!semi.open(file as string))
                    {
                        Console.Write("\n  Can't open {0}\n\n", file);
                        return;
                    }

                    BuildCodeAnalyzerRelationships builderreln = new BuildCodeAnalyzerRelationships(semi);
                    parser = builderreln.build();

                    try
                    {
                        while (semi.getSemi())
                            parser.parse(semi);
                    }
                    catch (Exception ex)
                    {
                        Console.Write("\n\n  {0}\n", ex.Message);
                    }
                }
                semi.close();
            }
        }
Exemplo n.º 33
0
    //----< Test Stub >--------------------------------------------------

#if(TEST_PARSER)

    static void Main(string[] args)
    {
      Console.Write("\n  Demonstrating Parser");
      Console.Write("\n ======================\n");

      //Repository rep_global;
      //List<Elem> table_global;

      ShowCommandLine(args);

      List<string> files = TestParser.ProcessCommandline(args);
      foreach (object file in files)
      {
        Console.Write("\n  Processing file {0}\n", file as string);

        CSsemi.CSemiExp semi = new CSsemi.CSemiExp();
        semi.displayNewLines = false;
        if (!semi.open(file as string))
        {
          Console.Write("\n  Can't open {0}\n\n", args[0]);
          return;
        }

        Console.Write("\n  Type and Function Analysis");
        Console.Write("\n ----------------------------\n");

        BuildCodeAnalyzer builder = new BuildCodeAnalyzer(semi);
        Parser parser = builder.build();

        try
        {
          while (semi.getSemi())
            parser.parse(semi);
          Console.Write("\n\n  locations table contains:");
        }
        catch (Exception ex)
        {
          Console.Write("\n\n  {0}\n", ex.Message);
        }
        Repository rep = Repository.getInstance();
        List<Elem> table = rep.locations;
////////
        ComplexityAnalyzer comxAna = new ComplexityAnalyzer();
        foreach (Elem e in table)
        {
            if (e.type == "function")
                e.complexity = comxAna.complexityAnalysis(e, file);
        }

        RelationshipAnalyzer relshAna = new RelationshipAnalyzer();
        foreach (Elem e in table)
        {
            if (e.type == "class" || e.type == "struct" || e.type == "interface")
                relshAna.relationshipanalysis(e, file);

        }
/////////
        foreach (Elem e in table)
        {
          Console.Write("\n  {0,10}, {1,25}, {2,5}, {3,5}, {4,50}", e.type, e.name, e.end-e.begin+1, e.complexity, e.relationship);
        }
        Console.WriteLine();
        Console.Write("\n\n  That's all folks!\n\n");
        semi.close();
      }
    }
Exemplo n.º 34
0
        /* This method is used to call the relationship and complexity analysis
         * for each file in the input set
         */
        public void analyze()
        {
            CSsemi.CSemiExp semi = new CSsemi.CSemiExp();
            semi.displayNewLines = false;

            /* These are the supported file formats in this tool. If input file is not in this format,
             * then analysis will not be done*/
            string[] supportedFileFormatList = { ".cs", ".c", ".cpp", ".java", ".txt", ".bat" };

            foreach (object file in files)
            {
                string fileExtension       = Path.GetExtension(file.ToString());
                bool   supportedFileFormat = false;

                foreach (string currentFileExtension in supportedFileFormatList)
                {
                    if (fileExtension == currentFileExtension)
                    {
                        supportedFileFormat = true;
                    }
                }

                if (!supportedFileFormat)
                {
                    Console.WriteLine("\nThe file {0} is of unsupported format", file.ToString());
                    continue;
                }
                if (!semi.open(file as string))
                {
                    Console.Write("\n  Can't open {0}\n\n", file);
                    return;
                }

                BuildCodeAnalyzer   builder = new BuildCodeAnalyzer(semi);
                CodeAnalysis.Parser parser  = builder.build();

                Repository repo = Repository.getInstance();
                Elem       elem = getDefaultElemData(file.ToString());
                repo.locations.Add(elem);

                try
                {
                    while (semi.getSemi())
                    {
                        parser.parse(semi);
                    }
                }
                catch (Exception ex)
                {
                    Console.Write("\n\n  {0}\n", ex.Message);
                }
                semi.close();

                //Only when the user specifies the /R option, we do relationship analysis
                if (findRelationship)
                {
                    semi = new CSsemi.CSemiExp();
                    semi.displayNewLines = false;
                    if (!semi.open(file as string))
                    {
                        Console.Write("\n  Can't open {0}\n\n", file);
                        return;
                    }

                    BuildCodeAnalyzerForRelationshipTypes builderreln = new BuildCodeAnalyzerForRelationshipTypes(semi);
                    parser = builderreln.build();

                    try
                    {
                        while (semi.getSemi())
                        {
                            parser.parse(semi);
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.Write("\n\n  {0}\n", ex.Message);
                    }
                }
                semi.close();
            }
        }
Exemplo n.º 35
0
        //----< Test Stub >--------------------------------------------------

#if (TEST_PARSER)
        static void Main(string[] args)
        {
            Console.Write("\n  Demonstrating Parser");
            Console.Write("\n ======================\n");

            ShowCommandLine(args);

            //THIS RETURNS A LIST OF FILES THAT THE USER PASSED IN
            List <string> files = TestParser.ProcessCommandline(args);

            for (int i = 0; i < files.Count; i++)
            {
                Console.Write(files[i] + "\n");
            }

            //sh - preprocess all user input files to get all user defined types
            UserType.parseUserDefinedTypes(files);
            HashSet <string> definedSet = UserType.getUserDefinedSet();

            Console.Write("Parser size of definedset" + definedSet.Count.ToString());

            foreach (string file in files)
            {
                Console.Write("\n  Processing file {0}\n", System.IO.Path.GetFileName(file));

                CSsemi.CSemiExp semi = new CSsemi.CSemiExp();
                semi.displayNewLines = false;
                if (!semi.open(file as string))
                {
                    Console.Write("\n  Can't open {0}\n\n", args[0]);
                    return;
                }

                Console.Write("\n  Type and Function Analysis");
                Console.Write("\n ----------------------------");

                BuildCodeAnalyzer builder = new BuildCodeAnalyzer(semi);
                Parser            parser  = builder.build();

                try
                {
                    while (semi.getSemi())
                    {
                        parser.parse(semi);
                    }
                    Console.Write("\n  locations table contains:");
                }
                catch (Exception ex)
                {
                    Console.Write("\n\n  {0}\n", ex.Message);
                }

                //all data is stored in table object
                Repository  rep   = Repository.getInstance();
                List <Elem> table = rep.locations;
                Console.Write(
                    "\n  {0,10}, {1,25}, {2,5}, {3,5}, {4,5}, {5,5}, {6,5}, {7,5}, {8,10}, {9, 10}, {10,6}",
                    "category", "name", "bLine", "eLine", "bScop", "eScop", "size", "cmplx", "coupling", "cohesion", "M-Index"
                    );
                Console.Write(
                    "\n  {0,10}, {1,25}, {2,5}, {3,5}, {4,5}, {5,5}, {6,5}, {7,5}, {8,10}, {9,10}, {10,6}",
                    "--------", "----", "-----", "-----", "-----", "-----", "----", "-----", "--------", "--------", "-------"
                    );
                foreach (Elem e in table)
                {
                    if (e.type == "class" || e.type == "struct")
                    {
                        Console.Write("\n");

                        //get the maintainibility index
                        e.mIndex = getMaintainibilityIndex(e);

                        Console.Write(
                            "\n  {0,10}, {1,25}, {2,5}, {3,5}, {4,5}, {5,5}, {6,5}, {7,5}, {8,10}, {9,10}, {10,6}",
                            e.type, e.name, e.beginLine, e.endLine, e.beginScopeCount, e.endScopeCount + 1,
                            e.endLine - e.beginLine + 1, e.endScopeCount - e.beginScopeCount + 1, e.coupling, e.cohesion, e.mIndex
                            );
                    }
                    else
                    {
                        Console.Write(
                            "\n  {0,10}, {1,25}, {2,5}, {3,5}, {4,5}, {5,5}, {6,5}, {7,5}, {8,10}, {9,10}",
                            e.type, e.name, e.beginLine, e.endLine, e.beginScopeCount, e.endScopeCount + 1,
                            e.endLine - e.beginLine + 1, e.endScopeCount - e.beginScopeCount + 1, e.coupling, e.cohesion
                            );
                    }
                }

                Console.Write("\n\n");

                semi.close();
            }
            Console.Write("\n\n");
        }
Exemplo n.º 36
0
 public void RelationshipAnalyzer(Elem e, Object file, List<Elem> TABLE)
 {
     CSsemi.CSemiExp local = new CSsemi.CSemiExp();
       local.open(file as string);
       while (local.lineCount < e.begin)
       {
       local.getSemi();
       }
       while (local.lineCount < e.end)
       {
       InheritanceAnalyze(local, TABLE);
       AggregationAnalyze(local, TABLE);
       CompositionAnalyze(local, TABLE);
       UsingAnalyze(local, TABLE, e);
       local.getSemi();
       }
 }
Exemplo n.º 37
0
    //----< Test Stub >--------------------------------------------------

#if(TEST_PARSER)

    static void Main(string[] args)
    {
      Console.Write("\n  Demonstrating Parser");
      Console.Write("\n ======================\n");

      ShowCommandLine(args);

      List<string> files = TestParser.ProcessCommandline(args);
      foreach (string file in files)
      {
        Console.Write("\n  Processing file {0}\n", System.IO.Path.GetFileName(file));

        CSsemi.CSemiExp semi = new CSsemi.CSemiExp();
        semi.displayNewLines = false;
        if (!semi.open(file as string))
        {
          Console.Write("\n  Can't open {0}\n\n", args[0]);
          return;
        }

        Console.Write("\n  Type and Function Analysis");
        Console.Write("\n ----------------------------");

        BuildCodeAnalyzer builder = new BuildCodeAnalyzer(semi);
        Parser parser = builder.build();

        try
        {
          while (semi.getSemi())
            parser.parse(semi);
          Console.Write("\n  locations table contains:");
        }
        catch (Exception ex)
        {
          Console.Write("\n\n  {0}\n", ex.Message);
        }
        Repository rep = Repository.getInstance();
        List<Elem> table = rep.locations;
        Console.Write(
            "\n  {0,10}, {1,25}, {2,5}, {3,5}, {4,5}, {5,5}, {6,5}, {7,5}",
            "category", "name", "bLine", "eLine", "bScop", "eScop", "size", "cmplx"
        );
        Console.Write(
            "\n  {0,10}, {1,25}, {2,5}, {3,5}, {4,5}, {5,5}, {6,5}, {7,5}",
            "--------", "----", "-----", "-----", "-----", "-----", "----", "-----"
        );
        foreach (Elem e in table)
        {
          if (e.type == "class" || e.type == "struct")
            Console.Write("\n");
          Console.Write(
            "\n  {0,10}, {1,25}, {2,5}, {3,5}, {4,5}, {5,5}, {6,5}, {7,5}", 
            e.type, e.name, e.beginLine, e.endLine, e.beginScopeCount, e.endScopeCount+1,
            e.endLine-e.beginLine+1, e.endScopeCount-e.beginScopeCount+1
          );
        }

        Console.Write("\n");
        semi.close();
      }
      Console.Write("\n\n");
    }
 public int complexityAnalysis(Elem e, object file, List<Elem> fileSetInfo)
 {
     int count = 0;
       CSsemi.CSemiExp semi = new CSsemi.CSemiExp();
       semi.open(file as string);
       do
       {
       semi.getSemi();
       } while (semi.lineCount < e.begin);       // ignore all the semi before function begin
       while (semi.lineCount <= e.end)
       {
       if (semi.Contains("if") != -1)
           count++;
       if (semi.Contains("else") != -1)
           count++;
       if (semi.Contains("for") != -1)
           count++;
       if (semi.Contains("foreach") != -1)
           count++;
       if (semi.Contains("while") != -1 && semi[semi.count - 1] != ";")
           count++;
       if (semi.Contains("do") != -1)
           count++;
       if (semi.Contains("case") != -1)
           count++;
       if (semi.Contains("try") != -1)
           count++;
       if (semi.Contains("catch") != -1)
           count++;
       if (specialCB(semi))      // special curly brace
           count++;
       semi.getSemi();
       }
       return count;
 }
Exemplo n.º 39
0
        //----< analyzer execution start here! >-----------------
        static int Main(string[] args)
        {
            List <string> files            = processCommandline(args);
            FileStream    outputFileStream = null;
            StreamWriter  streamWriter     = null;

            if (files == null)
            {
                return(0);
            }

            if (optOutputToFile)
            {
                try
                {
                    outputFileStream = new FileStream(optOutputToFileFilepath, FileMode.Create);
                }
                catch
                {
                    Console.WriteLine("error: can create output file {0}.", optOutputToFileFilepath);
                }

                streamWriter = new StreamWriter(outputFileStream);
                Console.SetOut(streamWriter);
            }

            Console.WriteLine();
            Console.WriteLine("===============================================================================");
            Console.WriteLine("  Code Maintainability Analyzer");
            Console.WriteLine("===============================================================================");

            Parser            parser;
            BuildCodeAnalyzer builder = null;

            foreach (string file in files)
            {
                CSsemi.CSemiExp semi = new CSsemi.CSemiExp();
                semi.displayNewLines = false;
                if (!semi.open(file as string))
                {
                    Console.WriteLine("  Can't open {0}", args[0]);
                    return(-1);
                }

                builder = new BuildCodeAnalyzer(semi);
                parser  = builder.build(true);

                try
                {
                    while (semi.getSemi())
                    {
                        parser.parse(semi);
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine("  {0}", ex.Message);
                }
                semi.close();
            }



            foreach (string file in files)
            {
                CSsemi.CSemiExp semi = new CSsemi.CSemiExp();
                semi.displayNewLines = false;
                if (!semi.open(file as string))
                {
                    Console.Write("  Can't open {0}", args[0]);
                    return(-1);
                }

                Console.WriteLine();
                Console.WriteLine("-------------------------------------------------------------------------------");
                Console.WriteLine("  Type and Function Analysis for {0}", System.IO.Path.GetFileName(file));
                Console.WriteLine("-------------------------------------------------------------------------------");

                builder = new BuildCodeAnalyzer(semi);
                parser  = builder.build(false);

                try
                {
                    while (semi.getSemi())
                    {
                        parser.parse(semi);
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine("  {0}", ex.Message);
                }

                semi.close();

                showOutput();
            }

            showSummary(files.Count);

            showRelationships();


            if (optOutputToFile)
            {
                streamWriter.Close();
            }

            return(0);
        }
 public void relationshipanalysis(Elem e, object file, List<Elem> fileSetInfo)
 {
     CSsemi.CSemiExp semi = new CSsemi.CSemiExp();
       semi.open(file as string);
       do
       {
       semi.getSemi();
       } while (semi.lineCount < (e.begin-1)); // ignore semi before type define
       while (semi.lineCount <= e.end)
       {     // detect four kinds of relationship
       inheritance(semi, e);
       aggregation(semi, e, fileSetInfo);
       composition(semi, e, fileSetInfo);
       usingRelationship(semi, e, fileSetInfo);
       semi.getSemi();
       }
       return;
 }
Exemplo n.º 41
0
 public void findDefinedTypes(string file)
 {
   CodeAnalysis.Parser p = new CodeAnalysis.Parser();
   enterScopeRule esr = new enterScopeRule();
   displayEnterScope des = new displayEnterScope();
   esr.add(des);
   p.add(esr);
   CSsemi.CSemiExp semi = new CSsemi.CSemiExp();
   
   if (!semi.open(file))
   {
     Console.Write("\n\n  can't open file {0} for analysis\n", file);
   }
   while (semi.getSemi())
     p.parse(semi);
 }
Exemplo n.º 42
0
        //----< Test Stub >--------------------------------------------------

#if (TEST_PARSER)
        static void Main(string[] args)
        {
            Console.Write("\n  Demonstrating Parser");
            Console.Write("\n ======================\n");

            ShowCommandLine(args);

            Parser            parser;
            List <string>     files   = TestParser.ProcessCommandline(args);
            BuildCodeAnalyzer builder = null;

            foreach (string file in files)
            {
                Console.Write("\n  Processing file {0}\n", System.IO.Path.GetFileName(file));

                CSsemi.CSemiExp semi = new CSsemi.CSemiExp();
                semi.displayNewLines = false;
                if (!semi.open(file as string))
                {
                    Console.Write("\n  Can't open {0}\n\n", args[0]);
                    return;
                }

                Console.Write("\n  Type and Function Analysis");
                Console.Write("\n ----------------------------");

                builder = new BuildCodeAnalyzer(semi);
                parser  = builder.build(true);

                try
                {
                    while (semi.getSemi())
                    {
                        parser.parse(semi);
                    }
                    Console.Write("\n  locations table contains:");
                }
                catch (Exception ex)
                {
                    Console.Write("\n\n  {0}\n", ex.Message);
                }

                Repository  rep   = Repository.getInstance();
                List <Elem> table = rep.locations;
                Console.Write(
                    "\n  {0,10}, {1,25}, {2,5}, {3,5}, {4,5}, {5,5}, {6,5}, {7,5}",
                    "category", "name", "bLine", "eLine", "bScop", "eScop", "size", "cmplx"
                    );
                Console.Write(
                    "\n  {0,10}, {1,25}, {2,5}, {3,5}, {4,5}, {5,5}, {6,5}, {7,5}",
                    "--------", "----", "-----", "-----", "-----", "-----", "----", "-----"
                    );
                foreach (Elem e in table)
                {
                    if (e.type == "class" || e.type == "struct")
                    {
                        Console.Write("\n");
                    }
                    Console.Write(
                        "\n  {0,10}, {1,25}, {2,5}, {3,5}, {4,5}, {5,5}, {6,5}, {7,5}",
                        e.type, e.name, e.beginLine, e.endLine, e.beginScopeCount, e.endScopeCount + 1,
                        e.endLine - e.beginLine + 1, e.endScopeCount - e.beginScopeCount + 1
                        );
                }

                Console.Write("\n");
                semi.close();
            }



            foreach (string file in files)
            {
                Console.Write("\n  Processing file {0}\n", System.IO.Path.GetFileName(file));

                CSsemi.CSemiExp semi = new CSsemi.CSemiExp();
                semi.displayNewLines = false;
                if (!semi.open(file as string))
                {
                    Console.Write("\n  Can't open {0}\n\n", args[0]);
                    return;
                }

                Console.Write("\n  Type and Function Analysis");
                Console.Write("\n ----------------------------");

                builder = new BuildCodeAnalyzer(semi);
                parser  = builder.build(false);

                try
                {
                    while (semi.getSemi())
                    {
                        parser.parse(semi);
                    }
                    Console.Write("\n  locations table contains:");
                }
                catch (Exception ex)
                {
                    Console.Write("\n\n  {0}\n", ex.Message);
                }

                Repository  rep   = Repository.getInstance();
                List <Elem> table = rep.locations;
                Console.Write(
                    "\n  {0,10}, {1,25}, {2,5}, {3,5}, {4,5}, {5,5}, {6,5}, {7,5}",
                    "category", "name", "bLine", "eLine", "bScop", "eScop", "size", "cmplx"
                    );
                Console.Write(
                    "\n  {0,10}, {1,25}, {2,5}, {3,5}, {4,5}, {5,5}, {6,5}, {7,5}",
                    "--------", "----", "-----", "-----", "-----", "-----", "----", "-----"
                    );
                foreach (Elem e in table)
                {
                    if (e.type == "class" || e.type == "struct")
                    {
                        Console.Write("\n");
                    }

                    Console.Write(
                        "\n  {0,10}, {1,25}, {2,5}, {3,5}, {4,5}, {5,5}, {6,5}, {7,5}",
                        e.type, e.name, e.beginLine, e.endLine, e.beginScopeCount, e.endScopeCount + 1,
                        e.endLine - e.beginLine + 1, e.endScopeCount - e.beginScopeCount + 1
                        );

                    if (e.type == "class" || e.type == "struct")
                    {
                        CClassInfo classInfo = rep.parsedData.getClassInfo(e.name);
                        Console.WriteLine("Coupling: {0}", CCalculateMetrics.calculateCoupling(classInfo));
                        Console.WriteLine("Cohesion: {0}", CCalculateMetrics.calculateCohesion(classInfo));
                    }
                }

                Console.Write("\n");
                semi.close();
            }
            Console.Write("\n\n");
        }
Exemplo n.º 43
0
    static void Main(string[] args)
    {
      Console.Write("\n  Demonstrating Parser");
      Console.Write("\n ======================\n");

      ArrayList files = TestParser.ProcessCommandline(args);

      if (files.Count == 0)
      {
        Console.Write("\n  couldn't retrieve any files to process\n\n");
        return;
      }
      foreach (object file in files)
      {
        Console.Write("\n  Processing file {0}\n", file as string);

        CSsemi.CSemiExp semi = new CSsemi.CSemiExp();
        semi.displayNewLines = false;
        if (!semi.open(file as string))
        {
          Console.Write("\n  Can't open {0}\n\n", args[0]);
          return;
        }

        Console.Write("\n  First - Type Analysis");
        Console.Write("\n -----------------------\n");

        BuildTypeAnal TAbuilder = new BuildTypeAnal();
        Parser parser = TAbuilder.build();

        while (semi.getSemi())
          parser.parse(semi);
        Console.Write("\n\n  That's all the types folks!\n\n");
        semi.close();

        Console.Write("\n  Now - Scope Analysis");
        Console.Write("\n ----------------------");

        BuildScopeAnal SAbuilder = new BuildScopeAnal();
        parser = SAbuilder.build();

        if (!semi.open(file as string))
        {
          Console.Write("\n  Can't open {0}\n\n", file as string);
          return;
        }
        while (semi.getSemi())
          parser.parse(semi);

        Console.Write("\n\n  That's all the scopes folks!\n\n");
      }
    }
Exemplo n.º 44
0
       ///////////////////////////////////////////////////////////////////////////////
      //Locate does the job of locating the namespaces,functions and Class ranges.  //
    //It returns Table containing inforamtion about the Type,Name Begin Line and    //
     //Ending Lines of the above mentioned ranges.                                // 
     /////////////////////////////////////////////////////////////////////////////

        public List<CodeAnalysis.Elem> Locate(FileInfo file)
        {
            CSsemi.CSemiExp semi = new CSsemi.CSemiExp();
            semi.displayNewLines = false;
            
            if (!semi.open(file.FullName as string))
             {
               return null;
             }
                CodeAnalysis.BuildCodeAnalyzer builder = new CodeAnalysis.BuildCodeAnalyzer(semi);
                CodeAnalysis.Parser par = builder.build();

                while (semi.getSemi())
                par.parse(semi);
                CodeAnalysis.Repository Rep = CodeAnalysis.Repository.getInstance();
            
                //Store the Begin,End locations alone with Name and Type Information
                List<CodeAnalysis.Elem> table = Rep.locations;
                semi.close();
                return Rep.locations;
        }