@Override public void visit(Call callExp) { if (callExp.getCallee() != null) callExp.getCallee().accept(this); System.out.print("."); if (callExp.getMethodName() != null) callExp.getMethodName().accept(this); System.out.print("("); if (callExp.getArgs() != null) { for (int i = 0; i < callExp.getArgs().size(); i++) { if (callExp.getArgs().elementAt(i) == null) continue; callExp.getArgs().elementAt(i).accept(this); if (i < callExp.getArgs().size() - 1) System.out.print(", "); } } System.out.print(")"); }
@Override public void visitar(Call call) { // obtengo el codigo graph del nodo call. String ident = call.toExtendedGrapher(this.cantNodosVisitados); // uno al codigo general. this.codigoGraph += ident; String[] delimitador = ident.split("\\["); // enlazo el nodo con el padre. String enlace = this.auxPadres.peek() + "->" + delimitador[0] + "; \n"; // guardo el enlace en el codigo general. this.codigoGraph += enlace; // guardo el nuevo nodo en la pila this.auxPadres.push(delimitador[0]); // cuento como nodo visitado. this.cantNodosVisitados++; // visito los argumentos. for (Nodo argumento : call.getArgs()) { argumento.aceptar(this); } // ya visto el subarbol de call, elimino la raiz . this.auxPadres.pop(); }
// Exp e; // Identifier i; // ExpList el; public Object visit(Call n) { // Implenetada, mas gambiarral. Se der tempo eu ajeito. Object ep = n.e.accept(this); n.i.accept(this); List<String> pars = new ArrayList<String>(); // Lista de tipos de parâmetros. for (int i = 0; i < n.el.size(); i++) { Object ep1 = n.el.get(i).accept(this); if (ep1 instanceof String) { pars.add((String) ep1); } } if (ep instanceof String) { String clas = (String) ep; if (existeClass(clas)) { List<SymbolTuple> listscop = table.getTable().get("Global" + clas); for (SymbolTuple sym : listscop) { if (sym.getType().equalsIgnoreCase("Method") && sym.getValue().equalsIgnoreCase(n.i.s)) { if (sym.getPars() == null && pars.size() == 0) return sym.getArg(); else { if (sym.getPars() != null && sym.getPars().size() == pars.size()) { for (int i = 0; i < pars.size(); i++) { String sup2 = getSuperClass(pars.get(i)); boolean valida = !(sym.getPars().get(i).equalsIgnoreCase(pars.get(i)) || sym.getPars().get(i).equalsIgnoreCase(sup2)); // Tratar a heranca. if (valida) { error.add("Lista de parâmetros incompativeis! Linha: " + n.getLine_number()); return null; } } return sym.getArg(); } else error.add("Lista de parâmetros incompativeis-----! Linha: " + n.getLine_number()); } } } if (getSuperClass(clas) != null && existeClass(getSuperClass(clas))) { // Na superclasse List<SymbolTuple> listscop2 = table.getTable().get("Global" + getSuperClass(clas)); for (SymbolTuple sym : listscop2) { if (sym.getType().equalsIgnoreCase("Method") && sym.getValue().equalsIgnoreCase(n.i.s)) { if (sym.getPars() == null && pars.size() == 0) return sym.getArg(); else { if (sym.getPars() != null && sym.getPars().size() == pars.size()) { for (int i = 0; i < pars.size(); i++) { String sup2 = getSuperClass(pars.get(i)); boolean valida = !(sym.getPars().get(i).equalsIgnoreCase(pars.get(i)) || sym.getPars().get(i).equalsIgnoreCase(sup2)); // Tratar a heranca. if (valida) { error.add("Lista de parâmetros incompativeis! Linha: " + n.getLine_number()); return null; } } return sym.getArg(); } else error.add("Lista de parâmetros incompativeis-----! Linha: " + n.getLine_number()); } } } } error.add("Mehtodo nao existe! Linha: " + n.getLine_number()); } else error.add("Classe nao existe! Linha: " + n.getLine_number()); } return null; }