Пример #1
0
 @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;
 }
Пример #2
0
 // TODO Revisar las variables solo dentro del alcance
 @Override
 public void visit(ExprVar visitor) {
   Declaration decl = new Declaration();
   decl.id = visitor.getIdent();
   decl.fila = visitor.fila;
   int scope = st.searchDeclaration(decl.id);
   if (scope == SymTab.INVALID_SCOPE) {
     System.out.println(
         "Error Semantico en fila "
             + decl.fila
             + ", la variable "
             + decl.id
             + " no ha sido declarada");
   }
 }
Пример #3
0
  @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;
    }
  }
Пример #4
0
 @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;
 }