ValorFuncao.java

Go to the documentation of this file.
00001 package plp.functional2.expression;
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.expression.Valor;
00009 import plp.expressions2.memory.AmbienteCompilacao;
00010 import plp.expressions2.memory.AmbienteExecucao;
00011 import plp.expressions2.memory.VariavelJaDeclaradaException;
00012 import plp.expressions2.memory.VariavelNaoDeclaradaException;
00013 
00022 public class ValorFuncao implements ValorAbstrato {
00023 
00024         private List<Id> argsId;
00025 
00026         private Expressao exp;
00027 
00028         public ValorFuncao(List<Id> argsId, Expressao exp) {
00029                 this.argsId = argsId;
00030                 this.exp = exp;
00031         }
00032 
00033         public List<Id> getListaId() {
00034                 return argsId;
00035         }
00036 
00037         public Expressao getExp() {
00038                 return exp;
00039         }
00040 
00046         public int getAridade() {
00047                 return argsId.size();
00048         }
00049 
00061         public boolean checaTipo(AmbienteCompilacao ambiente)
00062                 throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException {
00063                 ambiente.incrementa();
00064                 Tipo t = getTipo(ambiente);
00065                 
00066                 for(Id id:this.argsId){
00067                         ambiente.map(id, new Tipo(t.get()));
00068                         t = t.getProx();                        
00069                 }
00070                 ambiente.restaura();
00071                 return true;
00072         }
00073 
00087         public Tipo getTipo(AmbienteCompilacao ambiente)
00088                 throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException {
00089                         
00090                         throw new UnsupportedOperationException("As expressoes da Linguagem " +
00091                                         "funcional 2 nao possuem checagem de tipo implementada");
00092         }
00093         
00094         public Valor avaliar(AmbienteExecucao ambiente) {
00095                 return this;    
00096         }       
00097 
00098         public String toString() {
00099         StringBuffer sb = new StringBuffer();
00100         sb.append("fn ");
00101 
00102         List<Id> listaId = getListaId();
00103 
00104         if (listaId != null) {
00105             for (Id id : listaId) {
00106                 sb.append(id.toString() + " ");
00107             }
00108         }
00109         sb.append(". ");
00110         sb.append(exp.toString());
00111         return sb.toString();
00112         }
00113         
00114 }

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