@Override public void visit(Param visitor) { SymTab symtab = new SymTab(); Declaration dec = new Declaration(); dec.id = visitor.getIdent(); dec.type = visitor.getTipo(); dec.fila = visitor.fila; st.set(dec); for (int i = 0; i < st.scopes.size(); i++) { symtab.scopes.add(i, st.scopes.get(i)); } visitor.alcance = symtab.scopes; }
@Override public void visit(var_declaration visitor) { SymTab symtab = new SymTab(); Declaration dec = new Declaration(); dec.id = visitor.getIdent(); dec.type = visitor.getTipo(); dec.fila = visitor.fila; if (dec.type == "void") { System.out.println("Error Semantico, una variable no puede ser de tipo VOID"); } else { st.set(dec); for (int i = 0; i < st.scopes.size(); i++) { symtab.scopes.add(i, st.scopes.get(i)); } visitor.alcance = symtab.scopes; } }
@Override public void visit(fun_declaration visitor) { SymTab symtab = new SymTab(); FunctionDeclaration fd = new FunctionDeclaration(); fd.id = visitor.getIdent(); fd.params = visitor.getChilds(); while (st.scopes.size() > SymTab.FUNCTION_SCOPE) { st.closeScope(); } Declaration dec = new Declaration(); dec.id = visitor.getIdent(); dec.type = visitor.getTipo(); dec.fila = visitor.fila; dec.setKind(visitor.getKind()); dec.params = fd.params; st.newScope(); // Se aumenta al alcance referente a las funciones st.set(dec); st.FunctionList.add(fd); for (int i = 0; i < st.scopes.size(); i++) { symtab.scopes.add(i, st.scopes.get(i)); } visitor.alcance = symtab.scopes; }