예제 #1
0
 public void walk(ParseTreeListener listener, ParseTree t) {
   if (t instanceof ErrorNode) {
     listener.visitErrorNode((ErrorNode) t);
     return;
   } else if (t instanceof TerminalNode) {
     listener.visitTerminal((TerminalNode) t);
     return;
   }
   GlobalInfo info = GlobalInfo.getInstance();
   info.setNotVisitNodes(new ArrayList<Integer>());
   RuleNode r = (RuleNode) t;
   enterRule(listener, r);
   int n = r.getChildCount();
   for (int i = 0; i < n; i++) {
     Boolean found = false;
     for (int j = 0; j < info.getNotVisitNodes().size(); ++j) {
       if (info.getNotVisitNodes().get(j).equals(i)) {
         found = true;
         break;
       }
     }
     if (!found) {
       List<Integer> aux = info.getNotVisitNodes();
       info.setNotVisitNodes(new ArrayList<Integer>());
       walk(listener, r.getChild(i));
       info.setNotVisitNodes(aux);
     }
   }
   exitRule(listener, r);
   info.setNotVisitNodes(new ArrayList<Integer>());
 }