public virtual Parser build() { Parser parser = new Parser(); // decide what to show AAction.displaySemi = false; AAction.displayStack = false; // this is default so redundant // action used for namespaces, classes, and functions, complexity PushStack push = new PushStack(repo); // capture namespace info DetectNamespace detectNS = new DetectNamespace(); detectNS.add(push); parser.add(detectNS); // capture delegate DetectDelegate detectDG = new DetectDelegate(); detectDG.add(push); parser.add(detectDG); // capture class info DetectClass detectCl = new DetectClass(); detectCl.add(push); parser.add(detectCl); // capture function info DetectFunction detectFN = new DetectFunction(); detectFN.add(push); parser.add(detectFN); // capture complexity info of function DetectComplexity com = new DetectComplexity(); com.add(push); parser.add(com); // handle entering anonymous scopes, e.g., if, while, etc. DetectAnonymousScope anon = new DetectAnonymousScope(); anon.add(push); parser.add(anon); // handle leaving scopes DetectLeavingScope leave = new DetectLeavingScope(); PopStack pop = new PopStack(repo); leave.add(pop); parser.add(leave); // parser configured return parser; }