Beispiel #1
0
        public virtual RulesBasedParser build()
        {
            RulesBasedParser rulesBasedParser = new RulesBasedParser();

            // decide what to show
            AAction.displaySemi  = false;
            AAction.displayStack = false;              // false is default

            // action used for namespaces, classes, and functions
            PushStack push = new PushStack(Repo);

            // capture namespace info
            DetectNamespace detectNS = new DetectNamespace();

            detectNS.add(push);
            rulesBasedParser.add(detectNS);

            // capture class info
            DetectClass detectCl = new DetectClass();

            detectCl.add(push);
            rulesBasedParser.add(detectCl);

            // capture function info
            DetectFunction detectFN = new DetectFunction(Repo);

            detectFN.add(push);
            rulesBasedParser.add(detectFN);

            // handle entering anonymous scopes, e.g., if, while, etc.
            DetectAnonymousScope anon = new DetectAnonymousScope();

            anon.add(push);
            rulesBasedParser.add(anon);

            // handle leaving scopes
            DetectLeavingScope leave = new DetectLeavingScope();
            PopStack           pop   = new PopStack(Repo);

            leave.add(pop);
            rulesBasedParser.add(leave);

            // save class member variables
            var detectMembers  = new DetectMemberVariable(Repo);
            var addClassMember = new AddClassMember(Repo);

            detectMembers.add(addClassMember);
            rulesBasedParser.add(detectMembers);

            // rulesBasedParser configured
            return(rulesBasedParser);
        }
        public virtual RulesBasedParser build()
        {
            RulesBasedParser rulesBasedParser = new RulesBasedParser();

            // decide what to show
            AAction.displaySemi  = false;
            AAction.displayStack = false;              // false is default

            // action used for namespaces, locations, and functions
            PushStack push = new PushStack(Repo);

            // capture class dependencies
            var detectDeps  = new DetectClassDependency(Repo, _locations);
            var addClassDep = new AddClassDependency(Repo);

            detectDeps.add(addClassDep);
            rulesBasedParser.add(detectDeps);

            var detectMemberUsage = new DetectMemberUsage(Repo, _classMembers);
            var addMemberUsage    = new AddMemberUsage(Repo);

            detectMemberUsage.add(addMemberUsage);
            rulesBasedParser.add(detectMemberUsage);

            // capture namespace info
            DetectNamespace detectNS = new DetectNamespace();

            detectNS.add(push);
            rulesBasedParser.add(detectNS);

            // capture class info
            DetectClass detectCl = new DetectClass();

            detectCl.add(push);
            rulesBasedParser.add(detectCl);

            // capture function info
            DetectFunction detectFN = new DetectFunction(Repo);

            detectFN.add(push);
            rulesBasedParser.add(detectFN);

            // handle leaving scopes
            DetectLeavingScope leave = new DetectLeavingScope();
            PopStack           pop   = new PopStack(Repo);

            leave.add(pop);
            rulesBasedParser.add(leave);

            // rulesBasedParser configured
            return(rulesBasedParser);
        }