DecFuncao.java

Go to the documentation of this file.
00001 package plp.functional2.declaration;
00002 
00003 import java.util.List;
00004 
00005 import plp.expressions1.util.Tipo;
00006 import plp.expressions2.expression.Expressao;
00007 import plp.expressions2.expression.Id;
00008 import plp.expressions2.memory.AmbienteCompilacao;
00009 import plp.expressions2.memory.VariavelJaDeclaradaException;
00010 import plp.expressions2.memory.VariavelNaoDeclaradaException;
00011 import plp.functional1.declaration.DeclaracaoFuncional;
00012 import plp.functional2.expression.ValorFuncao;
00013 
00022 public class DecFuncao implements DeclaracaoFuncional {
00023         private Id id;
00024         private ValorFuncao valorFuncao;
00025 
00026         public DecFuncao(Id idFun, ValorFuncao valorFuncao) {
00027                 this.id = idFun;
00028                 this.valorFuncao = valorFuncao;
00029         }
00030 
00036         public String toString() {
00037                 StringBuffer sb = new StringBuffer();
00038                 sb.append("fun ");
00039                 sb.append(id.toString());
00040                 sb.append(" (");
00041                 List<Id> listaId = valorFuncao.getListaId();
00042                 if (listaId != null) {
00043                         for(Id id:listaId){
00044                                 sb.append(id.toString());
00045                                         sb.append(", ");
00046                         }
00047                 }
00048                 sb.append(") = ");
00049                 sb.append(valorFuncao.getExp().toString());
00050                 return sb.toString();
00051         }
00052 
00053         public Id getID() {
00054                 return id;
00055         }
00056 
00057         public Expressao getExpressao() {
00058                 return valorFuncao.getExp();
00059         }
00060 
00061         public ValorFuncao getFuncao() {
00062                 return valorFuncao;
00063         }
00064 
00070         public int getAridade() {
00071                 return valorFuncao.getAridade();
00072         }
00073 
00085         public boolean checaTipo(AmbienteCompilacao ambiente)
00086                 throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException {
00087                 ambiente.incrementa();
00088                 Tipo tipo = new Tipo();
00089                 for (int i = getAridade() - 1; i >= 0; i--) {
00090                         tipo = new Tipo(tipo);
00091                 }
00092                 ambiente.map(id, tipo);
00093                 boolean result = valorFuncao.checaTipo(ambiente);
00094                 ambiente.restaura();
00095                 return result;
00096         }
00097 
00111         public Tipo getTipo(AmbienteCompilacao amb)
00112                 throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException {
00113                 amb.incrementa();
00114                 Tipo tipo = new Tipo();
00115                 for (int i = getAridade() - 1; i >= 0; i--) {
00116                         tipo = new Tipo(tipo);
00117                 }
00118                 amb.map(id, tipo);
00119                 Tipo result = valorFuncao.getTipo(amb);
00120                 amb.restaura();
00121                 return result;
00122         }
00123 }

Generated on Tue Jul 18 22:04:30 2006 for PLP by  doxygen 1.4.7